웹 개발/백엔드

[개념] 최대 유휴 시간(MIT)과 최대 유지 시간(ML)

Gogumiing 2025. 6. 20. 00:45

✔️ 목차


     

    ✅ 최대 유휴 시간 (Max Idle Time, MIT)

    DB 커넥션 풀 관리에서 매우 중요한 요소로, 사용되지 않는 커넥션을 풀에 유지할 수 있는 최대 시간

    • 예를 들어, 최대 유휴 시간을 30분으로 설정하면 30분 이상 사용되지 않은 커넥션은 종료되어 풀에서 제거된다.

     

    ✅ 최대 유지 시간 (Max Lifetime)

    DB 커넥션 풀 관리에서 매우 중요한 요소로, 커넥션이 생성된 시점부터 유지되는 시간

    • 예를 들어, 최대 유지 시간을 4시간으로 설정하면 커넥션은 생성된 시점부터 최대 4시간까지만 유지되며, 4시간이 지나면 커넥션이 유효하더라도 커넥션을 닫고 풀에서 제거된다.

     

    🤔 최대 유휴 시간과 최대 유지 시간을 무한대로 설정하면 되지 않을까?

    최대 유휴 시간(MIT)과 최대 유지 시간(ML)을 무한대로 설정하면 아래와 같은 문제가 발생할 수 있다.

    1. DB 서버와의 연결이 끊어졌을 때 감지하지 못하는 문제 
    2. 리소스 누수 발생 위험 증가  →  너무 오래된 커넥션이 비정상 상태로 남아있을 가능성 존재
    3. Connection 재사용 효율 저하

     

    ✅ 설정 시 고려해야 할 항목

    1. DB 서버의 connection timeout 값

    예를 들면, AWS RDS는 기본적으로 8시간으로 connection timeout이 설정되어 있다.

    따라서 최대 유지 시간(Max Lifetime)은 이보다 짧게 설정해야 한다. (보통 1시간 이하)

     

    2. 애플리케이션의 부하 특성

    낮은 트래픽의 경우 긴 idle time으로 설정하는 것이 좋고, 높은 트래픽의 경우에는 상대적으로 짧게 유지해도 상관 없다.

     

    3. 커넥션 재활용 테스트

    오래된 커넥션은 죽어 있을 수 있으므로 주기적 갱신이 필요하다. 이를 위해 유효성 검사를 실시한다.

     

     

    ✅ 유효성 검사

    커넥션이 정상적으로 사용할 수 있는 상태인지 여부를 확인하는 것

     

    1.  커넥션 유효성 검사 (Validation Query)

    spring:
      datasource:
        hikari:
          validation-timeout: 3000              # 유효성 검사 timeout (ms)
          connection-test-query: SELECT 1       # 검사 쿼리 (MySQL/Oracle 등)

     

    실제 쿼리를 실행하여 유효성을 검사하는 방법이다. Spring Boot는 HikariCP를 커넥션 풀로 사용하므로 connection-test-query를 거의 사용하지 않지만, 특정 환경에서는 명시적으로 쿼리를 설정하여 사용하기도 한다.

     

     

    2. HikariCP의 PING 기능 활용 (keepalive-time)

    spring:
      datasource:
        hikari:
          keepalive-time: 300000     # 5분 주기로 커넥션을 ping

     

    Spring Boot에서 사용하는 HikariCP는 커넥션을 풀에서 꺼내 사용할 때 isValid()를 통해 내부 JDBC 드라이버에 유효성 검사를 위임하며, 이것은 자동으로 실행된다. 하지만 위와 같이 keepalive-time 설정을 통해 일정 주기마다 강제로 커넥션을 테스트(ping)함으로써 유효성을 확인할 수도 있다.

    • 유효성을 확인한 후 유휴 커넥션이 죽어 있는 경우, 자동으로 감지하여 새로운 커넥션으로 갱신함
    • keepalive-time은 idle-timeout보다 짧게 설정하는 게 일반적임
    • 최대 유지 시간(max-lifetime)보다 짧게 설정하면 오래된 커넥션 갱신도 가능함

     

    ✅ 결론

    DB 벤더의 설정값과 맞춰 조정하는 것이 좋다! 😉

    (DB 벤더: DBMS를 개발하고 판매하는 회사)