개발 일지

HttpClient (Netty) Configuration 정리

북극곰은콜라 2023. 5. 25. 19:05
반응형


개요

Spring Webflux의 WebClient의 설정을 정리하기 전
HTTP 관련 구현체인 Netty의 HttpClient 설정을 우선 정리
기본적인 설정만 정리

HttpClient Configuration

Config Desc
disableRetry(boolean disableRetry) request 실패 시 retry 여부
doOnRedirect(BiConsumer<? super HttpClientResponse,? super Connection> doOnRedirect) redirect 응답 시 Consumer 설정
doOnConnected(Consumer<? super Connection> doOnConnected) connection success시 consumer 설정
followRedirect(boolean followRedirect) redirect 시 follow 여부
keepAlive(boolean keepAlive) keepAlive 설정
http2Settings(Consumer<Http2SettingsSpec.Builder> http2Settings) http2 관련 세팅
responseTimeout(Duration maxReadOperationInterval) connection 이후 response에 걸리는 총 시간에 대한 설정
secure(SslProvider sslProvider) SSL 관련 설정
  • 사설인증서 무시
  • SSL Timeout
  • 등등
websocket(WebsocketClientSpec websocketClientSpec) 웹소켓 관련 설정
그 외 hearders, doOnRequest, doOnResponseError 등 다수의 설정들이 존재

ClientTransport Configuration

Config Desc
channelGroup(ChannelGroup channelGroup) 채널 그룹 설정
doOnChannelInit(ChannelPipelineConfigurer doOnChannelInit) 채널 pipeline init 시 동작할 설정
option(ChannelOption<O> key, @Nullable O value) 채널옵션 설정 (후술)
runOn(EventLoopGroup eventLoopGroup) 이벤트 그룹 설정

ChannelOption

io.netty.channel.ChannelOption<T>

Config Desc
RCVBUF_ALLOCATOR 수신 버퍼 allocate 사이즈 지정
CONNECT_TIMEOUT_MILLIS 커넥션 타임아웃
MAX_MESSAGES_PER_READ 한번에 읽을 최대 메시지 사이즈 설정
SO_SNDBUF, SO_RCVBUF 송/수신 버퍼의 크기 조정 (UDP에서 사용)

Conclusion

네트워크 관련 설정을 할 수 있다.
주요 설정으로
 - SSL Provider를 통한 SSL 설정
 - responseTimeout 설정
 - Connection Timeout 설정
 - read / write Timeout 설정 (doOnConnected에 handler를 추가해서)
 - DNS resolver 관련 설정
 - Buffer size 관련 설정
Timeout 관련해서 connection, read, write는 설정할 만하다. 다만 response Timeout의 경우 특별한 이유가 없는 한 Client 입장에서 설정하는 건 문제의 여지가 많을 듯하다.
DNS 관련 설정으로 resolver 설정을 DEFAULT로 안 하면, 도메인에서 ip를 찾지 못하는 이슈가 있었다.
기타 설정들은 특별한 이유가 없는 한 default로 하는 게 최적일 것으로 보인다.

 


REFERENCE

https://projectreactor.io/docs/netty/release/api/reactor/netty/http/client/HttpClient.html

 

 

 

반응형

'개발 일지' 카테고리의 다른 글

Expand Kafka Cluster  (0) 2023.06.13
Webclient 동작 원리 및 Configuration  (0) 2023.05.30
Kafka Connect 사용성 검토  (0) 2023.05.24
Kafka Schema Registry  (0) 2023.05.23
Apache Avro 란  (2) 2023.05.22