1. Intro: Connection Pool과 HikariCP

데이터베이스 연결은 비용이 큰 작업입니다. 매번 연결하고 끊는 대신, 미리 연결된 통로를 만들어두고 재사용하는 것이 Connection Pool의 핵심이죠. 그중에서도 HikariCP는 "광속(Light-speed)"이라는 이름답게 압도적인 성능을 자랑하며 Spring Boot 2.0부터 기본 라이브러리로 자리 잡았습니다.

2. HikariCP가 압도적으로 빠른 이유

단순히 "빠르다"고 하기엔 근거가 필요합니다. HikariCP는 다음 세 가지 측면에서 최적화를 이뤘습니다.

  • Bytecode Optimization: 소스 코드 레벨을 넘어 컴파일된 바이트코드 수준에서 실행 효율을 극대화했습니다.
  • FastList의 도입: 기존 ArrayList의 get()이나 remove() 시 발생하는 불필요한 검사 로직을 제거한 커스텀 리스트를 사용하여 오버헤드를 줄였습니다.
  • Lock-free 알고리즘: 커넥션을 획득하려는 스레드 간의 경합을 최소화하는 설계를 적용했습니다.

3. 실무에서 반드시 챙겨야 할 핵심 설정 (Best Practice)

블로그 독자들이 가장 궁금해할 실무 설정값입니다. 단순히 default를 쓰는 것보다 서비스 규모에 맞는 튜닝이 필요합니다.

  • maximum-pool-size: 전체 커넥션의 최대 개수입니다. 무조건 크게 잡는다고 좋은 게 아니라, DB 서버의 CPU와 디스크 I/O가 버틸 수 있는 수준으로 설정해야 합니다.
  • minimum-idle: 유휴 상태로 유지할 최소 개수입니다. Tip: 가급적 maximum-pool-size와 동일하게 설정하여 커넥션 풀의 크기가 변동하면서 발생하는 레이턴시를 방지하는 것이 좋습니다.
  • max-lifetime: 커넥션이 풀에 머무를 수 있는 최대 시간입니다. 중요: DB의 wait_timeout보다 반드시 2~3분 짧게 설정하여, 끊어진 커넥션을 애플리케이션이 잡고 있는 불상사를 막아야 합니다.

4. 시니어가 전하는 주의사항: Connection Deadlock

특히 **가상 스레드(Virtual Threads)**나 멀티 스레드 환경에서 한 작업이 두 개 이상의 커넥션을 점유할 때 발생할 수 있는 데드락 문제를 언급해 주면 좋습니다.

공식 가이드: $pool\;size = T_n \times (C_m - 1) + 1$

(최대 스레드 수 $T_n$, 한 작업당 필요한 커넥션 수 $C_m$)

5. Outro: 모니터링의 중요성

설정만큼 중요한 것이 모니터링입니다. MicrometerPrometheus를 연동하여 실시간으로 Active Connections 수치를 확인하며 maximum-pool-size를 점진적으로 최적화하는 과정이 반드시 필요합니다.

LIST

'DB' 카테고리의 다른 글

Spring Boot HikariCP 설정을 잘못하면 발생하는 5가지 장애  (0) 2026.03.11
Spring Boot HikariCP 커넥션 풀 설정 실무 가이드  (0) 2026.03.11
Redis  (0) 2026.03.10
MinIO  (0) 2026.03.10
OpenSearch  (0) 2026.03.10

+ Recent posts