1. MySQL의 wait_timeout 설정과 HikariCP 6.1.0에 추가된 maxLifeTime 분산 기능[ MySQL의 wait_timeout 설정과 커넥션 풀의 maxLifeTime 설정이란? ]외부 리소스와의 연결을 위해, 반드시 추가해야 하는 설정 중 하나가 타임아웃이다. 타임아웃을 제대로 설정하지 않으면, 다른 컴포넌트의 응답이 느려질 때 애플리케이션 전체가 영향을 받을 수 있다. 대표적으로 MSA 환경에서 외부 API와 통신을 할 때 타임아웃 설정이 중요하다. 타임아웃 설정이 존재하지 않으면, 외부 API의 응답이 지연될 때 애플리케이션의 스레드가 대기 상태에 빠져 전체 서비스의 응답 속도가 느려지며 장애를 전파받을 수 있기 때문이다.데이터베이스 관점에서도 타임아웃 설정은 매우 중요하..
1. Validation 애노테이션 사용 시에 발생하는 ConstraintDeclarationException 에러[ Validation 애노테이션 사용 시에 발생하는 ConstraintDeclarationException 에러 ]에를 들어 다음과 같은 컨트롤러가 존재한다고 하자. 파라미터로 받는 name은 최소 길이가 10이여야 한다는 유효성 검사를 도와주는 @Length 애노테이션이 붙어 있다. 그리고 이를 추싱화한 TestControllerInterface에는 관련 애노테이션 정보가 존재하지 않는 상황이다. 이러한 상황에서 컨트롤러를 호출하게 되면 어떤 결과가 나올까?import org.hibernate.validator.constraints.Length;import org.springframewo..
1. synchronized의 한계를 극복하기 위한 Lock 인터페이스와 ReentrantLock 클래스이전 포스팅에서 설명하였듯, synchronized 키워드를 활용한 동시성 제어는 다음의 2가지 치명적인 문제가 있었다.공정성 문제: 락의 획득 순서가 보장되지 않음무한 대기 문제: 대기하는 스레드를 깨우는 등의 제어를 할 수 없음 이런 문제를 해결하기 위해 자바 1.5부터 java.util.concurrent 라는 동시성 문제 해결을 위한 라이브러리 패키지가 추가되었다. [ 무한 대기 문제를 해결하기 위한 LockSupport 클래스 ]먼저 무한 대기 문제를 해결하기 위해 LockSupport 클래스가 추가되었다. LockSupport는 스레드를 블로킹/언블로킹하기 위한 가장 기본적인 도구로, ..
1. 동시성 제어를 위한 synchronized 키워드의 의미와 한계점[ synchronized 키워드란? ]자바 언어는 설계 초기부터 대량의 요청을 처리할 수 있도록 멀티 스레드를 염두하여 설계되었다. 이를 위해 자바는 1.0부터 손쉽게 동시성을 제어할 수 있는 synchronized 키워드를 제공하였다. synchronized 키워드를 사용하면 임계 영역의 동기화를 쉽게 구현할 수 있다. synchronized 키워드는 메서드 선언부에 붙여 사용하거나 특정 객체를 대상으로 동기화 블록을 만들어 사용할 수도 있다.public class BankAccount { private int balance = 0; // synchronized 메서드 public synchronized void d..
2025년에는 어떤 때보다 많은 일들이 있었고, 그에 따라 인상깊었던 한 해였습니다. 어느덧 2026년을 목전에 두고 있기에, 이제 한 해를 보낼 준비를 할 때가 된 것 같습니다. 2025년을 돌이켜보며 개인적으로 느꼈던 감정들과 생각들을 정리해보고자 합니다. 1. 2025년 회고[ 2025년의 학습과 자기개발 ]1월: 기본기가 탄탄한 자바 개발자 (제2판)2월: 함께자라기3월: 자바 병렬 프로그래밍4월: 모던 자바 인 액션5월: 그로쓰 해킹 & 개발자를 위한 레디스6월: 컴퓨터 밑바닥의 비밀 & 직업으로서의 소설가7월: 린 스타트업 & 타입으로 견고하게, 다형성으로 유연하게8월: 가상면접 1권 & 기획은 2형식이다9월: 최고의 프롬프트 엔지니어링 강의10월: 아이디어 불패의 법칙 & 객체지향 시스템..