
표준 MySQL만 믿다가는 당한다, HikariCP 커넥션 오류 뒤에 숨겨진 Aurora의 비표준 동작 완벽 분석
HikariCP의 keepalive 옵션이 무색하게 커넥션이 끊기는 현상을 추적하며 발견한 Aurora MySQL의 독특한 동작 방식을 다룹니다. 커뮤니티 MySQL과 달리 Aurora가 왜 두 가지 타임아웃 값을 모두 참조하는지 아키텍처 관점에서 설명하고, 실무에서 바로 적용 가능한 DB 파라미터 최적화 가이드를 제공합니다.
Aurora MySQL을 사용하면서 HikariCP의 커넥션 검증 실패 로그가 뜬다면, 클라이언트 설정보다 먼저 DB 파라미터 그룹의 두 타임아웃 값이 동일한지 확인하십시오.
HikariCP의 keepaliveTime이 30초로 설정되어 있음에도 불구하고, 서버 측에서 연결이 먼저 끊겨 'Failed to validate connection' 경고 로그가 분당 다수 발생하는 현상이 나타났습니다.
표준 MySQL 동작 모델과 다른 Aurora MySQL의 내부 메커니즘을 분석하여, DB 파라미터 그룹의 interactive_timeout이 non-interactive 연결에도 영향을 준다는 사실을 확인하고 두 타임아웃 값을 동일하게 상향 조정했습니다.
DB 파라미터 수정 후 즉시 경고 로그가 중단되었으며, Aurora의 thread-pool 및 모니터 스레드 기반 idle 세션 관리 방식을 규명하여 향후 유사 문제에 대한 진단 가이드를 마련했습니다.
Trade-off
Aurora의 idle 종료 판정은 별도의 모니터 스레드가 약 60초 주기로 수행하므로, 설정한 타임아웃 값과 실제 종료 시점 사이에 수십 초의 오차가 발생할 수 있는 불확실성이 존재합니다.
Aurora MySQL이 클라이언트의 interactive 여부와 상관없이 wait_timeout과 interactive_timeout 중 최솟값을 idle 종료 기준으로 사용하는 비표준 동작입니다.
Aurora MySQL이 제한된 워커 스레드로 다수의 사용자 커넥션을 처리하기 위해 사용하는 아키텍처로, 커넥션과 스레드가 1:1로 고정되지 않습니다.
Aurora에서 idle 상태의 커넥션을 감시하고 강제로 종료시키기 위해 백그라운드에서 주기적으로 구동되는 전용 스레드입니다.




