https://s3-us-west-2.amazonaws.com/secure.notion-static.com/97425c0e-ee07-48a6-aa53-0ebe28e084b3/Untitled.png

<aside> 💡 페이스북 엔지니어링 블로그에 올라온 원문의 한국어 번역본입니다. 의역, 오역이 있을 수 있습니다.

</aside>

우리는 인터넷이 수십 년 동안 사용해온 사실상의 표준 프로토콜을 QUIC로 대체하고 있습니다. 더 나은 유저 경험을 만드려 네트워크 프로토콜을 최적화를 해왔는데, 이번 건은 우리가 해온 작업 중에 가장 최신의 것이자 급진적입니다. 현재 페이스북 인터넷 트래픽 75% 이상이 QUIC과 HTTP/3를 사용하고 있습니다. (HTTP/3도 그냥 QUIC이라고 부르겠습니다.)

QUIC이 불러온 긍정적인 효과들은 다음과 같습니다.

인터넷 TF(IETF)는 여전히 QUIC과 HTTP/3의 표준화 작업을 진행중입니다.

QUIC, HTTP/3란 무엇인가?

폭넓게 이야기하면 QUIC은 TCP의 대체재입니다. Google에서 개발했고 Google QUIC(gQUIC)이란 이름으로 2015년 IETF에서 공개됐죠. 그 이후로, IETF에서 개선과 재구성 작업을 거쳐 현재의 QUIC이 되었습니다. HTTP/3는 차세대 HTTP이죠. QUIC과 HTTP/3는 우리와 구글, IETF 커뮤니티가 인터넷 프로토콜을 사용해보며 얻은 수십년간의 모범 사례와 학습을 통해 만든 가장 최신이자 최고의 인터넷 프로토콜입니다.

TCP & HTTP/2 조합이 TCP & HTTP/1.1보다 성능이 뛰어난데, QUIC HTTP/3 조합은 그걸 한 번 더 뛰어넘습니다. TCP & HTTP/2는 스트림 멀티플렉싱을 통해 단일 네트워크 연결이 여러개의 데이터 스트림을 지원하는 기능을 처음으로 도입했죠. QUIC & HTTP/3는 유실 패킷들이 정체되고 연결 내 모든 스트림이 느려지는 TCP Head-Of-Line Blocking을 피함으로써 스트림들이 진정으로 독립적이게 하여 한 단계 더 앞으로 나아갑니다.

QUIC은 최첨단 손실 복구 기능을 채택하여, 악조건의 네트워크 상에서 대부분의 TCP 구현체들보다 더 나은 성능을 발휘합니다. TCP는 방화벽 같은 네트워크 미들박스가 패킷 형식을 일일이 체크하는 경우하는 경우가 많기 때문에, 호환성을 고려하다 보니 업그레이드 느리다는 점에서 골화된 경향이 있습니다. QUIC은 완전 암호화, 프로토콜 확장성 최고급화를 통해 미래에 이뤄질 개선을 보장함으로써 이러한 문제를 피합니다. 또한, QUIC을 위해 특별 디자인 된 JSON 기반 추적 형식 QLOG을 통해 전송 과정을 계측, 관찰, 시각화 할 수 있는 새로운 방법을 제공합니다.

경험을 기반으로한 프로토콜 개발

우리는 QUIC의 빠른 테스트와 배포를 위해 QUIC 구현체 mvfst를 자체 개발했습니다. 예전에도 여러 차례 프로토콜 구현체를 자체 개발한 적이 있었는데요, HTTP 서버/클라인트 라이브러리 Proxygen이 첫 작품이었고, Zero Protocol과 TLS 1.3 구현체 Fizz를 만들었습니다. 페이스북 앱은 Fizz와 Proxygen을 사용하여 Proxygen Mobile을 통해 서버와 상호작용 중입니다. 보안 인증을 위한 delegated credentialsDNS over TLS는 TLS를 이용한 보안 솔루션이기도 합니다.

완전 처음부터 새 프로토콜을 개발하고 배포하기

우리는 새 프로토콜이 기존 소프트웨어와 매끄럽게 연동되고, 개발자들이 빠르게 일할 수 있게 해주길 바랐습니다. 첫 시험으론, 페이스북 트래픽에 큰 부분을 차지하는, 프록시 된 공개 트래픽을 포함하는 내부망을 택했습니다. QUIC이 내부 트래픽에서 작동하지 않는다면, 더 큰 인터넷 상에서도 마찬가지일 것이란 걸 알고 있었죠.

버그 및 문제들을 털어내는 것 이외에도, 이 전략을 실행하는 과정에서 네트워크 로드밸런서의 QUIC 호환과 무중단 배포를 보장하는 방법을 디자인하게 되었습니다.