AI

mysql connect_timeout 이 10초일때, jdbc connectTimeout 는 몇초가 적당한가?

david100gom 2025. 5. 7. 13:24

권장 설정:

JDBC connectTimeout ≈ 3~5초
(항상 MySQL 서버의 connect_timeout보다 짧게 설정)


🔍 이유:

📌 MySQL connect_timeout (서버 설정)

  • MySQL 서버가 TCP 접속 이후 클라이언트가 로그인 요청을 보내기까지 최대 대기 시간 (초 단위)
  • 기본: 10초
  • 서버 입장에서 "이 클라이언트가 아무 응답도 안 줘"라는 상황에서 연결을 끊는 기준

📌 JDBC connectTimeout (클라이언트 설정)

  • JDBC 클라이언트가 서버에 접속을 시도할 때 최대 대기 시간 (밀리초 단위)
  • 네트워크 문제나 서버 다운 시 빠르게 실패하도록 함

🔄 왜 JDBC 쪽을 더 짧게 해야 할까?

  • 클라이언트가 너무 오래 기다리지 않게 하여 빠른 장애 감지가 가능
  • 서버 쪽 connect_timeout은 실제 접속 이후 로그인 지연을 다루므로, 클라이언트의 연결 시도 타임아웃과는 다른 상황을 커버
  • 긴 JDBC timeout은 장애 시 애플리케이션 쓰레드가 오랫동안 블로킹될 수 있음

✅ 설정 예시:

properties
복사편집
jdbc:mysql://localhost:3306/mydb?connectTimeout=5000&socketTimeout=10000
  • connectTimeout=5000 → JDBC는 5초 기다리다가 접속 실패
  • MySQL connect_timeout=10 → 문제 없음

⛔ 반면, 이렇게 하면 문제 생김:

  • JDBC connectTimeout = 15초
  • MySQL connect_timeout = 10초

이 경우, 서버가 10초 후 연결을 끊었지만, JDBC는 여전히 15초까지 기다리기 때문에 예상치 못한 에러나 지연이 발생할 수 있습니다.