SeouliteLab

[Java/자바] HttpClient에 Timeout 설정하기 본문

프로그래밍

[Java/자바] HttpClient에 Timeout 설정하기

Seoulite Lab 2024. 3. 9. 01:08

Java에서 HttpClient를 사용하여 외부 서버와 통신할 때, Timeout을 적용하는 것은 매우 중요합니다. 이번 글에서는 HttpClient에 Timeout을 적용하는 여러 가지 방법을 살펴보겠습니다.

1. 기본적인 Timeout 설정

가장 간단한 방법은 HttpClient의 기본 Timeout을 설정하는 것입니다. HttpClient의 생성자 또는 설정 메서드를 통해 Timeout 값을 지정할 수 있습니다.

import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class HttpClientExample {
    public static void main(String[] args) {
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(5000) // 연결 Timeout: 5초
                .setSocketTimeout(5000) // 소켓 Timeout: 5초
                .build();

        CloseableHttpClient httpClient = HttpClients.custom()
                .setDefaultRequestConfig(requestConfig)
                .build();

        // HttpClient 사용
    }
}

2. 특정 Request에 Timeout 적용

HttpClient를 사용하여 특정 Request에만 Timeout을 적용하고 싶은 경우에는 RequestConfig를 개별적으로 설정하여 사용할 수 있습니다.

import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(5000) // 연결 Timeout: 5초
                .setSocketTimeout(5000) // 소켓 Timeout: 5초
                .build();

        CloseableHttpClient httpClient = HttpClients.custom().build();

        HttpGet httpGet = new HttpGet("http://example.com");
        httpGet.setConfig(requestConfig);

        // HttpClient 사용
    }
}

3. ConnectionManager 설정

HttpClient의 ConnectionManager를 직접 설정하여 Timeout을 적용할 수도 있습니다. 이 방법은 커스터마이징이 필요한 경우에 유용합니다.

import org.apache.http.config.SocketConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

public class HttpClientExample {
    public static void main(String[] args) {
        PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
        connManager.setDefaultSocketConfig(SocketConfig.custom()
                .setSoTimeout(5000) // 소켓 Timeout: 5초
                .build());

        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(connManager)
                .build();

        // HttpClient 사용
    }
}