Connection Pool 크기와 타임아웃 설정
기본개념
1. Connection Pool의 역할
- Connection Pool은 애플리케이션이 데이터 베이스와 통신하기 위해 미리 연결을 생성 해 두는 저장소.
- 연결을 매번 생성/해제 하면 성능이 저하되므로 재사용 가능한 연결 풀을 통해 성능을 최적화한다.
2. 주요 파라미터
- Maximum Pool Size: 동시에 사용할 수 있는 최대 연결 수.
- Minium Idle Connections: 사용되지 않을 때 유지할 최소 연결 수.
- Connection Timeout: 연결 요청 시 대기 할 최대 시간.
Connection Pool 크기 설정
왜 중요하가?
- 연결 풀 크기가 너무 작으면 요청이 대기 상태가 되어 처리 속도가 느려짐.
- 연결 풀 크기가 너무 크면 DB서버에 과부하가 발생하여 성능이 저하된다.
단계별 설정
- 트래픽 분석
- 애플리케이션의 동시 사용자 수와 요청 패턴을 분석.
- ex: 애플리케이션 초당 평균 100개의 요청이 발생하고 각 요청이 50ms동안 연결을 유지한다
= 100 * 0.05 = 5(최소 연결 필요)
- DB서버의 제한 확인
- DB서버가 지원할 수 있는 최대 연결 수를 확인.
- ex: MySQL
SHOW VARIABLES LIKE 'max_connections' ;
- 기본 설정
- 최소 연결 수는
트래픽 분석 결과의 80%
로 설정 - 최대 연결 수는
DB 서버의 최대 연결 수의 80%
를 넘지 않도록 설정.
- 최소 연결 수는
- 로드 테스트
- JMeter, Gating 등의 도구로 예상 트래픽을 시뮬레이션 하여 성능 확인.
- 연결 풀 부족 시 대기시간이 늘어나는지 확인.
Connection Timeout 설정
- 왜 중요한가?
- 타임아웃을 짧게 설정하면 불필요한 대기 없이 오류를 빠르게 감지할 수 있다.
- 너무 길게 설정하면 장애 원인 파악이 어려워진다.
- 너무 짧게 설정하면
- 네트워크가 느리거나 서버가 과부하일 경우 요청이 처리되기 전 연결이 끊어질 수 있다.
- 재시도 과정에서 네트워크 대역폭과 서버리소스가 불필요하게 소비된다.
- 설정 단계
- 요청 응답시간 확인
- 평균적 DB응답 시간은 수십ms에서 수백ms 수준.
- ex: 쿼리가 200ms 내외로 완료된다면 타임아웃을
500ms ~ 5000ms
로 설정
- Connection Timeout 설정
- HicariCP의
connection-timeout
은 견결을 기다릴 최대 시간이다. (default: 3000ms) - 실무에서는 보통 2000~10000ms 사이로 설정한다.
- HicariCP의
- Validation Timeout 추가.
- 연결 유효성을 검사하는 시간. 일반적으로
1000~5000ms
설정
- 연결 유효성을 검사하는 시간. 일반적으로
- 실패시 재시도정책
- 타임아웃 발생 시 재시도를 설정하거나 Circuit Breaker를 사용한다.
- 요청 응답시간 확인
성능 최적화
- 모니터링 도구를 활용한다.
- Actuator의
/metrics
엔드포인트에서hicaricp.connections.*
지표를 확인. - 그라파나, 프로메테우스와 통합하여 커넥션 풀 상태 모니터링
- Actuator의
- 쿼리 효율성 확인.
- 슬로우쿼리가 풀을 점유하지 않도록 주기적으로 쿼리 성능 분석.
- mysql의 경우
slow_query_log
활성화
- 스케일링 전략
- 트래픽이 지속적으로 증가할 경우 DB와 애플리케이션 인스턴스 수를 증가시킨다.
반응형