TLS관련 설정

RequestConfig vs ConnectionConfig

설정 예시 코드

	@Bean
	public RestClient restClient() {
		return RestClient.builder()
				.requestFactory(clientHttpRequestFactory())
				.baseUrl(host)
				.defaultHeader("Accept", "application/json")
				.build();
	}

	@Bean
	public ClientHttpRequestFactory clientHttpRequestFactory() {

		final ConnectionConfig cc = ConnectionConfig.custom()
				//연결 타임아웃
				.setConnectTimeout(Timeout.ofMilliseconds(1500))
				.build();

		final RequestConfig rc = RequestConfig.custom()
				//풀에서 커넥션 대기 타임아웃
				.setConnectionRequestTimeout(Timeout.ofMilliseconds(1500))
				//읽기 타임아웃
				.setResponseTimeout(Timeout.ofMilliseconds(2000))
				.build();

		final PoolingHttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create()
				//맥스 커넥션 수
				.setMaxConnTotal(50)
				//특정 API에서 사용할 수 있는 최대 커넥션 수
				.setMaxConnPerRoute(40)
				.setDefaultConnectionConfig(cc)
				.build();

		final CloseableHttpClient httpClient = HttpClients.custom()
				.setConnectionManager(cm)
				.setDefaultRequestConfig(rc)
				.evictExpiredConnections()
				.evictIdleConnections(Timeout.ofMilliseconds(20))
				.build();

		return new HttpComponentsClientHttpRequestFactory(httpClient);
	}

1)PoolingHttpClientConnectionManager

cm

역할: 커넥션 풀(재사용되는 TCP 커넥션)을 관리한다.

요청마다 새로 TCP 연결을 맺지 않고, 기존 연결을 꺼내 써서 성능/부하를 줄인다.

setMaxConnTotal(200)

setMaxConnPerRoute(50)

2) RequestConfig

requestConfig