AI Briefing

배포 직후 발생하는 응답 지연을 해결하기 위한 여정 (feat. JVM 웜업)

·2026.02.25 19:00

DB Connection Timeout의 진짜 원인은 커넥션 부족이 아니라 JVM 웜업 부재였다.

배포 직후 요청이 몰리면 DB Connection Timeout과 초기 응답 지연이 반복됐고, 처음에는 HikariCP 설정 문제로 보고 connectionTimeout, maximumPoolSize, minimumIdle을 조정했다. connectionTimeout10초, maximumPoolSize30개에서 50개로 늘렸고, minimumIdle도 두었지만 현상은 사라지지 않았다.

커넥션 수를 늘려도 배포 직후에는 항상 풀의 상한까지 사용됐고, 안정화된 뒤에는 훨씬 적은 커넥션으로도 충분히 처리할 수 있었다. 초기 트래픽을 줄이기 위해 rolling update 대신 blue-green deployment를 적용해 30초 간격으로 20%씩 점진적으로 흘려보냈지만, 이것도 근본 해결책은 아니었다.

문제의 실마리는 Actuator / Grafana 메트릭에서 나왔다. 배포 직후에는 Connection usage time이 평소 5ms 이하에서 1~1.5초 수준으로 늘고, Connection acquire time도 평소 1ms 이하에서 5~10초까지 치솟았지만, 데이터베이스 쿼리 응답 시간은 변하지 않았다.

즉, 커넥션을 잡은 뒤에 애플리케이션 내부에서 무거운 작업이 길어지고 있었던 것이다. CPU 사용량과 Young GC 증가까지 함께 확인한 뒤, 결국 원인은 DB가 아니라 초기 JVM이 아직 충분히 워밍업되지 않은 상태에서 실트래픽을 받는 것으로 재정의됐고, 배포 직후 성능 저하를 해결하기 위해 JVM warm-up을 적용하는 방향으로 마무리된다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.