HttpClient Setting 을 하는 이유
- Default HttpClient 를 사용하게 된다면, HttpClient Connection Pool 설정이 기본으로 잡힌다. 그러므로 원하는 성능이 나오지 못한다.
- 기본 설정은 오른쪽 HttpClientBuilder.class와 같이 기본은 0으로 잡히며 상용을 위한 서버에서는 반드시 튜닝이 필요하다.
- maxConnTotal = 0
- maxConnPerRoute = 0
단순한 접속일때는 createMinimal()를 사용하자.
- 이 경우에도 내부 코드를 보면 기본적으로 PoolingHttpClientConnectionManager class 를 사용하며, maxTotal 은 20, defaultMaxPerRoute 는 2로 설정되어 있음을 알고 있어야 한다.
- PoolingHttpClientConnectionManager 는 @ThreadSafe 가 붙어 있어 다중 thread 환경에서도 객체 접근이 안전하다.
- Connection이 많을 경우에는 PoolingHttpClientConnectionManager class에 setter를 이용해 maxConnTotal, maxConnPerRoute 값을 변경하자.
- Socket을 튜닝하고자 하는 경우는 HttpClientBuilder class의 DefaultSocketConfig class을 생성해서 내부 설정 값을 변경하자(필자는 XML로 설정했다).
- Default HttpClient 를 사용하게 된다면, HttpClient Connection Pool 설정이 기본으로 잡힌다. 그러므로 원하는 성능이 나오지 못한다.
- 기본 설정은 오른쪽 HttpClientBuilder.class와 같이 기본은 0으로 잡히며 상용을 위한 서버에서는 반드시 튜닝이 필요하다.
- maxConnTotal = 0
- maxConnPerRoute = 0
단순한 접속일때는 createMinimal()를 사용하자.
- 이 경우에도 내부 코드를 보면 기본적으로 PoolingHttpClientConnectionManager class 를 사용하며, maxTotal 은 20, defaultMaxPerRoute 는 2로 설정되어 있음을 알고 있어야 한다.
- PoolingHttpClientConnectionManager 는 @ThreadSafe 가 붙어 있어 다중 thread 환경에서도 객체 접근이 안전하다.
- Connection이 많을 경우에는 PoolingHttpClientConnectionManager class에 setter를 이용해 maxConnTotal, maxConnPerRoute 값을 변경하자.
- Socket을 튜닝하고자 하는 경우는 HttpClientBuilder class의 DefaultSocketConfig class을 생성해서 내부 설정 값을 변경하자(필자는 XML로 설정했다).
HttpClient XML 로 Setting 하기
- 필자는 XML 로 HttpClient 를 설정했으나, 코드로도 가능하다.
- 필자는 XML 로 HttpClient 를 설정했으나, 코드로도 가능하다.
정리
- HttpClient 는 계속 생성하지 말고, Bean 으로 등록해서 사용하자.
- 오픈소스를 사용할때 항상 Thread safe 한지 확인하자.
- HttpClient 는 계속 생성하지 말고, Bean 으로 등록해서 사용하자.
- 오픈소스를 사용할때 항상 Thread safe 한지 확인하자.
'Spring' 카테고리의 다른 글
Spring Batch 개발 Tip (0) | 2018.04.18 |
---|---|
RestTemplate Setting (0) | 2018.04.18 |
Mybatis Upgrade (0) | 2018.04.18 |
[Spring Framework] RestTemplate 으로 개발 시 에러가 난 경우 응답의 body 확인 (0) | 2018.01.29 |