피드로 돌아가기
Singleton Design Pattern in Java — From Naive to Thread-Safe
Dev.toDev.to
Backend

Double-Checked Locking을 통한 Thread-Safe한 DB Connection Pool 설계

Singleton Design Pattern in Java — From Naive to Thread-Safe

kichu2026년 5월 21일5intermediate

Context

DB Connection 생성 시 발생하는 고비용의 Performance Overhead 해결을 위해 단일 인스턴스 유지가 필수적인 상황. 단순 Naive Singleton 구현 시 Multi-thread 환경에서 인스턴스가 중복 생성되는 Race Condition 발생 가능성이 상존함.

Technical Solution

  • Private Constructor 설정을 통한 외부 클래스의 임의 인스턴스 생성 차단
  • Synchronized Method 적용을 통한 Thread-Safety 확보 및 동시성 제어 시도
  • Eager Loading 방식의 클래스 로딩을 통한 초기화 시점의 인스턴스 생성 및 리소스 낭비 가능성 분석
  • ReentrantLock을 활용한 임계 영역 설정을 통해 락 범위 최적화 도모
  • Double-Checked Locking 패턴 도입으로 첫 번째 null 체크 후 락을 획득하고 다시 null을 확인하여 불필요한 동기화 비용 제거
  • Singleton Instance의 단일 소스 관리로 DB Connection Pool의 일관성 유지

- Multi-thread 환경에서 Singleton 도입 시 단순 Null 체크 외에 동기화 전략을 반드시 검토할 것 - 성능 최적화를 위해 Method 전체에 락을 거는 대신 필요한 최소 범위에만 Lock을 적용하는 Double-Checked Locking 고려 - Resource 낭비를 방지하기 위해 Lazy Loading과 Eager Loading의 Trade-off를 분석하여 초기화 시점 결정

원문 읽기