DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from 여기어때
  • Related reads#AuroraMySQL
#Backend

Aurora MySQL의 숨겨진 idle close 동작 — HikariCP "Failed to validate connection" 추적기

Aurora MySQL의 숨겨진 idle close 동작 — HikariCP "Failed to validate connection" 추적기
01

Summary

왜 30초마다 핑을 날리는데 연결이 끊길까? Aurora MySQL의 기괴한 타임아웃 비밀

표준 MySQL만 믿다가는 당한다, HikariCP 커넥션 오류 뒤에 숨겨진 Aurora의 비표준 동작 완벽 분석

HikariCP의 keepalive 옵션이 무색하게 커넥션이 끊기는 현상을 추적하며 발견한 Aurora MySQL의 독특한 동작 방식을 다룹니다. 커뮤니티 MySQL과 달리 Aurora가 왜 두 가지 타임아웃 값을 모두 참조하는지 아키텍처 관점에서 설명하고, 실무에서 바로 적용 가능한 DB 파라미터 최적화 가이드를 제공합니다.

  • 01표준 MySQL과 달리 Aurora는 wait_timeout과 interactive_timeout 중 작은 값을 최종 타임아웃으로 선택함
  • 02Aurora의 thread-pool 아키텍처와 별도 모니터링 스레드가 idle 커넥션을 관리하는 내부 메커니즘 분석
  • 03JDBC의 interactiveClient 옵션이 false임에도 interactive_timeout이 영향을 주는 이유 규명
  • 04AWS 공식 문서에서도 확인하기 어려운 60초 주기 모니터 스레드의 실체 확인
  • 05커넥션 풀 유지 실패 문제를 해결하기 위한 DB 파라미터 그룹 설정 모범 사례 제시

+RECOMMENDATION

Aurora MySQL을 사용하면서 HikariCP의 커넥션 검증 실패 로그가 뜬다면, 클라이언트 설정보다 먼저 DB 파라미터 그룹의 두 타임아웃 값이 동일한지 확인하십시오.

The Problem

HikariCP의 keepaliveTime이 30초로 설정되어 있음에도 불구하고, 서버 측에서 연결이 먼저 끊겨 'Failed to validate connection' 경고 로그가 분당 다수 발생하는 현상이 나타났습니다.

The Solution

표준 MySQL 동작 모델과 다른 Aurora MySQL의 내부 메커니즘을 분석하여, DB 파라미터 그룹의 interactive_timeout이 non-interactive 연결에도 영향을 준다는 사실을 확인하고 두 타임아웃 값을 동일하게 상향 조정했습니다.

The Result

DB 파라미터 수정 후 즉시 경고 로그가 중단되었으며, Aurora의 thread-pool 및 모니터 스레드 기반 idle 세션 관리 방식을 규명하여 향후 유사 문제에 대한 진단 가이드를 마련했습니다.

Trade-off

Aurora의 idle 종료 판정은 별도의 모니터 스레드가 약 60초 주기로 수행하므로, 설정한 타임아웃 값과 실제 종료 시점 사이에 수십 초의 오차가 발생할 수 있는 불확실성이 존재합니다.

03

Key Concepts

Concept · 01

Aurora Dual Timeout Evaluation

Aurora MySQL이 클라이언트의 interactive 여부와 상관없이 wait_timeout과 interactive_timeout 중 최솟값을 idle 종료 기준으로 사용하는 비표준 동작입니다.

  • JDBC 연결은 기본적으로 non-interactive로 분류되지만 Aurora에서는 두 설정값을 모두 평가합니다.
  • 작게 설정된 interactive_timeout이 의도치 않게 커넥션을 조기 종료시키는 원인이 됩니다.
Concept · 02

Thread-pool Multiplexing

Aurora MySQL이 제한된 워커 스레드로 다수의 사용자 커넥션을 처리하기 위해 사용하는 아키텍처로, 커넥션과 스레드가 1:1로 고정되지 않습니다.

  • 표준 MySQL의 네트워크 read-block 기반 타임아웃 메커니즘을 적용할 수 없는 구조적 원인입니다.
  • 스레드 효율성을 높이기 위해 커넥션이 idle 상태가 되면 워커 스레드는 다른 작업을 수행합니다.
Concept · 03

Monitor Thread

Aurora에서 idle 상태의 커넥션을 감시하고 강제로 종료시키기 위해 백그라운드에서 주기적으로 구동되는 전용 스레드입니다.

  • 약 60초의 주기로 동작하며 설정된 타임아웃을 초과한 세션을 일괄 정리합니다.
  • 이 주기로 인해 타임아웃 발생 시점이 설정값보다 늦어지는 등 불규칙한 패턴을 보일 수 있습니다.
Continue reading · same source

여기어때More from 여기어때

View all posts from 여기어때
  • EKS 컨테이너 메모리 스파이크 추적기

    EKSPage CacheLogback
    2일 전
  • SRE 업무에 AI 녹여내기 — 2편: Alert Adviser로 장애 원인 분석 자동화

    GrafanaMCPSlack Bot
    6일 전
  • SRE 업무에 AI 녹여내기 — 1편: Smart RI Calc로 인프라 비용 산정 자동화

    SREAWS KarpenterCost Estimation
    6일 전
  • WebFlux 전환 부하 테스트를 다시 쓴 이야기

    WebFluxSpring BootLoad Testing
    1주 전
  • 데드락을 해결하려다, 락을 줄이게 된 이야기

    MySQL InnoDBDeadlockPessimistic Lock
    1주 전

Related reads#AuroraMySQL

Explore #AuroraMySQL
아임웹

963초짜리 쿼리 하나가 HLL 205만까지 끌어올렸습니다

#AuroraMySQL2주 전
무신사·Java Flight Recorder

의심했던 범인은 알리바이가 있었다.

#AuroraMySQL1개월 전
아임웹·SRE

전사 장애를 데이터로 잠재운 인프라팀의 8개월

#AuroraMySQL2개월 전

Source

여기어때
여기어때
Engineering Blog

Published · June 8, 2026

Topics

Aurora MySQLHikariCPJDBCConnection PoolAWS RDS