[ 성능 테스트 ] 3. 커넥션 풀 튜닝으로 성능 올리기
[ 성능 테스트 ] 3. 커넥션 풀 튜닝으로 성능 올리기
안녕하세요. 이번 포스트에서는 스케줄 추천 API에 대해 k6를 활용해 부하 테스트를 진행하고, 커넥션 풀 설정을 튜닝한 뒤 성능이 어떻게 개선됐는지 공유한다.
테스트 배경
초기 테스트에서 95백분위 응답 시간이 5.59초로, 설정한 목표인 3초를 크게 초과했다. 에러율은 없었지만, 일부 요청에서 지연이 발생하는 현상을 확인했다.
- 최대 동시 사용자 500명
- 목표: 95백분위 응답 시간 3초 이하, 실패율 1% 미만
커넥션 풀 튜닝 내용
DB 커넥션 풀 병목 해소를 위해 HikariCP 설정을 조정했다.
1
2
3
4
5
6
spring.datasource.hikari.maximum-pool-size=300
spring.datasource.hikari.minimum-idle=20
spring.datasource.hikari.idle-timeout=60000
spring.datasource.hikari.connection-timeout=3000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.pool-name=HikariCP
- 최대 커넥션 수를 300으로 늘려 병목 완화
- 커넥션 타임아웃 및 최대 수명 조절로 커넥션 재사용 효율 향상
튜닝 후 테스트 결과
커넥션 풀 튜닝 후 결과 요약
지표조정 전조정 후비고
| 평균 응답 시간 | 3.24초 | 약 1.69초 | 약 48% 개선 |
| 95백분위 응답 시간(p95) | 5.59초 | 3.12초 | 목표 3초 근접, 경고 발생 |
| 최대 응답 시간 | 6.55초 | 4.83초 | 응답 지연 감소 |
| 실패 요청 비율 | 0% | 0% | 안정적 유지 |
| 총 요청 수 | 10,295건 | 19,581건 | 테스트 규모 확대 |
| 가상 사용자 수(VU) | 167~500명 | 195~500명 | 비슷한 부하 환경 유지 |
느낀 점 및 다음 단계
- 테스트는 이전 포스트에서 사용한k6 스크립트를 사용했음에도 불구하고, 커넥션 풀 설정 조정만으로 응답 시간이 크게 개선되어 DB 연결 병목이 주요 원인임을 명확히 확인할 수 있었다.
- 특히, Pinpoint APM을 활용해 DB 쿼리 및 커넥션 대기 시간을 상세히 모니터링하며 병목 구간을 파악했고, 이를 기반으로 커넥션 풀 튜닝 방향을 결정했다는 점이 효과적인 개선으로 이어졌다.
- 95백분위 응답 시간이 아직 목표치를 소폭 초과하는 만큼, 앞으로는 쿼리 튜닝, 캐싱 도입, 인프라 확장 등 추가 최적화를 계획 중이다.
- k6를 이용한 성능 테스트가 재현성과 효율성 면에서 뛰어나, 같은 스크립트를 반복 실행하며 튜닝 효과를 체계적으로 검증하는 데 큰 도움이 되었다.
마무리
이번 경험을 통해 커넥션 풀 튜닝이 API 성능에 미치는 영향을 체감할 수 있었다. 부하 테스트를 통한 지속적인 모니터링과 최적화는 안정적인 서비스 운영의 핵심임을 다시 한번 느꼈다.
여러분도 비슷한 환경이라면 커넥션 풀 설정부터 점검해보는 걸 추천한다.
This post is licensed under CC BY 4.0 by the author.
