[JAVA] CloseableHttpClient

John·2022년 1월 18일

Apache HttpClient

목록 보기
1/1
post-thumbnail

인수인계를 받으면서 새로운 프로젝트에 투입습니다.👏
IOT 프로젝트로 어플을 통해 도어락을 열 수 있도록 도와주는 어플🔓
삐약이 신입은 앞 길이 막막합니다.😭😭😭

인수인계를 받고 프로젝트를 열어봤는데 내용 중 커넥션 풀을 관리하는 커넥션매니저를 생성하여 HttpClient를 관리하는 코드가 탁..😅

Http 통신 관련된 코드를 보고 흥미가 생겨서 공부면서 정리하려고 적는 글✌


📌 CloseableHttpClient

HttpClient의 인터페이스 구현 추상 클래스
커넥션 풀(Connection Pool) 지원

💻 코드

⬜ SendFile.java

...

CloseableHttpClient httpClient = null;

...

httpClient = connectionManager.getHttpClient();

...

커넥션 풀을 사용하는 httpClient를 생성하기 위한 코드입니다.

⬜ ConnectionService.java

...

PoolingHttpClientConnectionManager connectionManager = 
				new PoolingHttpClientConnectionManager();
                
...

connectionManager.setMaxTotal(maxTotal);
connectionManager.setDefaultMaxPerRoute(maxPerRoute);
connectionManager.closeIdleConnections(closeIdleConnections, TimeUnit.SECONDS);
        
...

public CloseableHttpClient getHttpClient(){
	if (httpClient != null) {
		return this.httpClient;	
	} else {
		return generateHttpClient();
	}
}

...

private CloseableHttpClient generateHttpClient() {
	CloseableHttpClient httpClient = HttpClients.custom()
			.setConnectionManager(this.connectionManager)
			.setDefaultRequestConfig(RequestConfig)
			.build();

	logger.info("create CloseableHttpClient !!");
	
	this.httpClient = httpClient;
	return this.httpClient;
}

HttpClient에서 PoolingHttpClientConnectionManager 설정
HttpClient에서 RequestConfig 설정


✍ Pooling Connection

PoolingHttpClientConnectionManager 클래스

PoolingHttpClientConnectionManager is a more complex implementation that manages a pool of client connections and is able to service connection requests from multiple execution threads.

클라이언트 연결 풀을 관리하고 여러 실행 스레드의 연결 요청을 처리할 수 있는 보다 복잡한 구현

💡 커넥션풀(Connection Pool)을 조절하는 방법은?

.setMaxTotal(int)

풀이 관리하는 최대 커넥션 수

.setDefaultMaxPerRoute(int)

메소드를 통해 최대 커넥션 개수, 라우트 당 최대 커넥션 수를 설정

.closeIdleConnections(30, TimeUnit.SECONDS);

30초 동안 사용되지 않는 유휴 커넥션을 close 한다.

CloseableHttpClient httpClient = <...>
httpClient.close();

커넥션 풀 종료

CloseableHttpClient httpClient = HttpClients.custom()
			.setConnectionManager(this.connectionManager)
			.setDefaultRequestConfig(RequestConfig)
			.build();

setConnectionManager(connectionManager)

커넥션 풀 설정

HttpClientBuilder
setConnectionManager(HttpClientConnectionManager connManager)
인스턴스를 할당

setDefaultRequestConfig(RequestConfig)

RequestConfig 설정

HttpClientBuilder
setDefaultRequestConfig(RequestConfig config)
RequestConfig
요청 실행에 사용할 기본 인스턴스를 할당 합니다.


✍ 마무리

커넥션 풀에 대해 더욱 공부할 수 있어 좋았으며, 프로젝트 개발을 진행함에 있어 꼭 필요했던 시간이었다👍

HTTP 통신을 더 공부하기 위해 HTTP connection routing, Secure HTTP connections 등을 공부할 필요성을 느꼈다.


📖 참조 링크
RequestConfig 보기
CloseableHttpClient와 HttpClient의 차이점은?
DefaultHttpClient와 CloseableHttpClient의 차이
HttpClient 연결 관리
HttpClient Connection Management
JSP 웹 프로그래밍
Apache HttpClient

Apache
Http API
HttpClientBuilder
Connection management

profile
기록을 습관으로

0개의 댓글