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초까지 기다리기 때문에 예상치 못한 에러나 지연이 발생할 수 있습니다.