Post

.NET 9 네트워크 개선 사항 알아보기

.NET 9 네트워크 개선 사항 알아보기

들어가기 앞서

NET 9에서는 대규모 트래픽 및 고성능 시나리오를 고려하여, HTTP 프로토콜에 대한 연결 풀링(특히 HTTP/3 및 HTTP/1.1) 기능을 대폭 개선했는데요.

이번 포스트에서는 주요 변경점과 그 배경, 그리고 어떤 이점을 얻을 수 있는지 살펴보겠습니다.

1. Connection Pooling

HTTP/3 연결 자체는 다중화(Multiplexing)를 통해 단일 연결에서도 여러 요청을 동시에 처리할 수 있지만, 서버 간 대규모 호출 등 특정 시나리오에서는 하나의 연결만으로는 충분한 처리량에 도달하기 어려워 병목 현상이 생길 수 있습니다. 이러한 문제는 HTTP/2에서도 확인됐었는데, MS에서는 “다중 연결” 방식을 도입했을 때 성능이 긍정적으로 개선된 사례가 있었으므로, .NET 9에서는 HTTP/3에서도 이를 지원하기로 결정했다고 하네요.

이번에 구현된 다중 연결 방식의 기본 아이디어는 연결이 포화 상태에 달하면 새로운 연결을 추가로 생성하여 보다 많은 요청을 동시에 처리하도록 하는 것인데, 초기 단계에서는 HTTP/2에서 사용되었던 다중 연결 동작과 유사한 구조로 동작합니다.

실제로 10,000개의 동시 요청 환경을 테스트해본 결과, 단일 연결 대비 초당 요청 처리량(RPS)의 유의미한 증가가 관측되어 성능 개선 효과가 증명되었다는 사실도 있습니다. 또한 CPU 사용률이 높아졌다는 것은 유휴 상태의 프로세서 시간을 줄이고 실제 요청을 더 적극적으로 처리하기 때문으로, 전체적인 스루풋 향상에 기여한다는 사실도 알 수 있었습니다.

마지막으로, 다중 연결을 활성화하려면 간단하게 SocketsHttpHandler에 옵션을 설정하는 방식으로 사용할 수 있습니다.

1
2
3
4
var client = new HttpClient(new SocketsHttpHandler
{
    EnableMultipleHttp3Connections = true
});

2. Proxy Auto Update on Windows

3. Public APIs

4. QUIC Connection Options

5. Stream Capacity API

6. Performance Improvements

7. WebSockets

8. .NET Framework Compatibility

9. Uri Query Redaction in HttpClientFactory Logs

10. Distributed Tracing Improvements

11. Experimental Connection Tracing

12. Keyed DI Support

13. SSLKEYLOGFILE Support

14. TLS Resume with Client Certificate

15. Negotiate API Integrity Checks

16. Server-Sent Events Parser

17. Primitives Additions

This post is licensed under CC BY 4.0 by the author.