커넥션 타임아웃

클라이언트가 서버와 연결을 시도할 때, 연결이 맺어지기까지 기다리는 최대 시간입니다. 이 시간 내에 연결이 안 되면 에러가 발생합니다.

왜 필요한가?

동작 방식

클라이언트 ──── 연결 시도 ────▶ 서버
    │                          │
    │     Connection Timeout   │
    │     (예: 3초)            │
    │                          │
    │   3초 내 연결 안 되면     │
    └─── ConnectTimeoutException 발생

커넥션 타임아웃 vs 리드 타임아웃

항목Connection TimeoutRead Timeout
시점연결 수립 단계데이터 수신 단계
상황TCP 연결 시도요청 후 응답 대기
원인서버 다운, 네트워크 끊김서버 처리 지연
[Connection Timeout]        [Read Timeout]
클라이언트 ─── 연결 ───▶ 서버 ─── 응답 대기 ───▶
         │                    │
      여기서 실패           여기서 실패

설정 예시

Java HttpClient

HttpClient client = HttpClient.newBuilder()
    .connectTimeout(Duration.ofSeconds(3))
    .build();

RestTemplate (Spring)

RestTemplate restTemplate = new RestTemplate();
HttpComponentsClientHttpRequestFactory factory =
    new HttpComponentsClientHttpRequestFactory();

factory.setConnectTimeout(3000);  // 3초
factory.setReadTimeout(5000);     // 5초

restTemplate.setRequestFactory(factory);

WebClient (Spring WebFlux)

HttpClient httpClient = HttpClient.create()
    .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000);

WebClient client = WebClient.builder()
    .clientConnector(new ReactorClientHttpConnector(httpClient))
    .build();

DB 커넥션 풀 (HikariCP)

spring:
  datasource:
    hikari:
      connection-timeout: 3000   # 풀에서 커넥션 얻는 시간
      validation-timeout: 5000   # 커넥션 유효성 검사 시간

타임아웃 종류 정리

타임아웃설명
Connection Timeout연결 수립까지 대기 시간
Read Timeout응답 데이터 수신 대기 시간
Write Timeout요청 데이터 전송 대기 시간
Socket TimeoutRead + Write 통합

적절한 설정값

Connection Timeout: 1~3초 (빠른 실패)
Read Timeout: 3~30초 (작업에 따라 다름)

CSLOG에서 보기