.jpg)
인수인계를 받으면서 새로운 프로젝트에 투입습니다.👏
IOT 프로젝트로 어플을 통해 도어락을 열 수 있도록 도와주는 어플🔓
삐약이 신입은 앞 길이 막막합니다.😭😭😭
인수인계를 받고 프로젝트를 열어봤는데 내용 중 커넥션 풀을 관리하는 커넥션매니저를 생성하여 HttpClient를 관리하는 코드가 탁..😅
Http 통신 관련된 코드를 보고 흥미가 생겨서 공부면서 정리하려고 적는 글✌
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 설정
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