Keep-Alive, Nagle

twocowsong·2023년 6월 11일
0
HttpClient httpClient = HttpClient.create()
	...
    .option(ChannelOption.SO_KEEPALIVE, true) // Keep-Alive 활성화
    .option(ChannelOption.TCP_NODELAY, true) // Nagle 알고리즘 비활성화
    ...

HttpClient 설정 시 Keep-Alive를 활성화 하는 경우가 있습니다.

Keep-Alive란?

HTTP 통신에서 연결을 재사용하는 메커니즘입니다.
기본적으로 HTTP는 클라이언트가 요청을 보내고 서버가 응답을 전송하면 연결이 닫히게 됩니다.
그러나 Keep-Alive를 활성화하면 클라이언트와 서버 간의 연결을 재사용할 수 있습니다.

Keep-Alive를 활성화하면 한 번의 요청 및 응답 이후에도 TCP 연결을 유지하고,
추가적인 요청을 보낼 때 동일한 연결을 사용합니다.
이를 통해 매번 연결을 설정하고 해제하는 비용을 줄일 수 있고,
네트워크 지연 시간을 단축시키는 등의 이점을 제공합니다.

WebClient의 option(ChannelOption.SO_KEEPALIVE, true) 설정은 TCP 소켓 옵션인 SO_KEEPALIVE를 활성화하는 것을 의미합니다. 이로써 WebClient는 Keep-Alive를 사용하여 서버와의 연결을 유지하게 됩니다.

Keep-Alive를 사용하는 경우, 서버는 일정 시간 동안 클라이언트로부터 요청이 없는 경우 연결을 종료할 수 있습니다.

Nagle 알고리즘

Nagle 알고리즘은 TCP에서 데이터를 전송할 때 작은 조각으로 분할하여 전송하는 방식입니다.
이 알고리즘은 네트워크 효율성을 향상시키기 위해 도입되었으며, 작은 데이터 조각이 많이 전송되는 경우에 유용합니다.
그러나 실시간 통신이나 대량의 데이터를 빠르게 전송해야 하는 상황에서는 Nagle 알고리즘을 비활성화하는 것이 성능 향상을 가져올 수 있습니다.

Nagle 알고리즘은 작은 데이터 패킷을 버퍼링하여 조각들을 하나의 패킷으로 결합하여 전송합니다.
이로 인해 작은 크기의 데이터 패킷이 전송될 때 지연이 발생할 수 있습니다. 실시간 통신이나 대량의 데이터를 빠르게 전송해야 하는 경우에는 작은 패킷을 조금씩 전송하는 대신 빠르게 전송하는 것이 더 효율적입니다.

WebClient의 option(ChannelOption.TCP_NODELAY, true) 설정은 Nagle 알고리즘을 비활성화하는 것을 의미합니다.
이렇게 함으로써 작은 패킷을 조금씩 전송하지 않고, 가능한 빠르게 전송하여 지연 시간을 최소화할 수 있습니다.
이는 웹 클라이언트가 더 빠르게 요청을 전송하고 응답을 받을 수 있도록 도와줍니다.

profile
생각하는 개발자

0개의 댓글