CPU, TPS, 쿼리시간 기준으로 HikariCP pool size 산정하기

Spring Boot 애플리케이션에서 DB 성능 문제의 상당수는 커넥션 풀 설정에서 시작됩니다.

많은 개발자가 다음처럼 설정합니다.

 
spring:
datasource:
hikari:
maximum-pool-size: 10
 

하지만 이 값은 서버 환경, DB 성능, 트래픽에 따라 달라져야 합니다.

이번 글에서는 HikariCP 커넥션 풀 크기를 실무적으로 계산하는 방법을 설명합니다.


1. 커넥션 풀은 동시 DB 작업 수를 의미한다

커넥션 풀은 다음 의미입니다.

동시에 실행 가능한 DB 작업 개수
 

maximum-pool-size = 10
 

의미

동시에 10개의 SQL만 실행 가능
 

구조

Client Request

Spring Thread

HikariCP Pool

Database
 

2. 가장 기본 공식 (CPU 기반)

많은 시스템에서 다음 공식으로 시작합니다.

connection pool ≈ CPU * 2
 

CPU = 4 core
 

추천 pool

8 ~ 12
 

왜냐하면 DB 작업은 대부분

I/O wait
 

상태가 있기 때문입니다.

즉 CPU보다 약간 많은 커넥션이 필요합니다.


3. TPS 기준 계산 방법

조금 더 정확하게 계산하려면 TPS와 쿼리 시간을 사용합니다.

공식

필요 커넥션 수 = TPS × 평균 DB 처리시간
 

예제

서비스

TPS = 100
평균 쿼리 시간 = 50ms
 

계산

100 × 0.05 = 5
 

필요 커넥션

5
 

안전하게

10 ~ 15
 

정도로 설정합니다.


4. 느린 쿼리가 많을 때

TPS = 100
평균 쿼리 시간 = 300ms
 

계산

100 × 0.3 = 30
 

pool = 30 이상
 

필요합니다.

이 경우 문제는 보통 쿼리 최적화입니다.


5. DB max connection 고려

PostgreSQL 기본값

max_connections = 100
 

하지만 DB는

관리용 커넥션
replication
monitoring
 

등을 사용합니다.

그래서 보통

20 ~ 30
 

정도는 남겨야 합니다.


계산 예

DB max_connections = 100
 

사용 가능

80
 

애플리케이션 서버

4대
 

가능한 pool

80 / 4 = 20
 

따라서

maximum-pool-size = 20
 

6. MSA 환경에서 문제

마이크로서비스 환경에서는 문제가 더 커집니다.

service A
service B
service C
service D
 

각각

pool = 20
 

이면

20 × 4 = 80
 

DB 커넥션이 사용됩니다.

MSA에서는 DB 커넥션 설계가 중요합니다.


7. 너무 큰 커넥션 풀의 문제

많은 개발자가 이렇게 생각합니다.

pool 크게 잡으면 좋다
 

하지만 그렇지 않습니다.

문제

DB context switching 증가
메모리 증가
lock contention 증가
 

결과

DB 성능 저하
 

그래서 커넥션 풀은 최소한으로 설정하는 것이 좋습니다.


8. 실무 추천 값

일반적인 Spring Boot 서비스 기준

CPU = 4
TPS = 100 ~ 300
 

추천

 
spring:
datasource:
hikari:
maximum-pool-size: 15
minimum-idle: 5
connection-timeout: 30000
max-lifetime: 1800000
 

9. 모니터링은 필수

커넥션 풀 설정은 한 번 정하고 끝나는 것이 아닙니다.

다음 지표를 항상 봐야 합니다.

Active Connections
Idle Connections
Pending Threads
 

Spring Boot Actuator + Prometheus + Grafana로 확인할 수 있습니다.


정리

HikariCP 커넥션 풀 크기는 단순한 숫자가 아니라 시스템 전체 성능에 영향을 주는 핵심 설정입니다.

설정할 때 반드시 고려해야 할 요소는 다음입니다.

CPU 코어 수
TPS
쿼리 실행 시간
DB max_connections
서버 수
 

✔ 핵심 한 줄

커넥션 풀은 크게 잡는 것이 아니라 정확하게 계산해야 한다.
LIST

+ Recent posts