🚀

QUIC vs WebRTC: 왜 QUIC으로 돌아왔나?

WebRTC의 복잡함에 지쳐 QUIC으로 전환한 실전 사례

QUIC은 Google이 설계하고 HTTP/3의 기반이 된 전송 프로토콜입니다. TCP의 3가지 고질적 문제 — 느린 연결 수립(2~3 RTT), Head-of-Line Blocking(패킷 하나 유실 시 전체 대기), IP 변경 시 연결 끊김 — 를 UDP 위에서 해결했습니다. 실제로 원격 데스크톱 프로젝트(ulalaca → Noctiluca)에서 WebRTC를 시도했다가 한계에 부딪힌 사례가 있습니다. WebRTC는 Chromium 소스 수정 필요, 시그널링/STUN/TURN 구성 복잡, 포트 고정 불가, SCTP DataChannel의 HOL Blocking 문제가 있었습니다. QUIC으로 전환하자 UDP 포트 하나만 열면 끝, 스트림 독립성으로 HOL 해결, WiFi AP 전환 시에도 Connection Migration으로 연결 유지 — 이 모든 문제가 즉시 해결되었습니다.

구조 다이어그램

연결 수립 비교: TCP+TLS vs QUIC
TCP + TLS (기존)
RTT 1 TCP SYN → SYN-ACK → ACK
RTT 2 TLS ClientHello → ServerHello
RTT 3 TLS Finished → 데이터 전송 시작
2~3 RTT 소요
QUIC
RTT 1 Initial (TLS 1.3 포함) → 연결 완료!
재방문 0-RTT: 첫 패킷부터 데이터 전송!
1 RTT (재방문 0-RTT)
Head-of-Line Blocking 문제
TCP / WebRTC SCTP
Video Audio Input BLOCKED
패킷 1개 유실 → 전부 대기
QUIC (독립 스트림)
Stream 1: Video x 유실 이것만 재전송
Stream 2: Audio ✓ 계속 전송
Stream 3: Input ✓ 계속 전송
인프라 복잡도: WebRTC vs QUIC
WebRTC
필수 시그널링 서버 (SDP 교환)
필수 STUN 서버 (공인 IP 확인)
필수 TURN 서버 (NAT 뒤 중계)
문제 포트 고정 불가 / 재사용 불가
문제 Chromium 소스 수정 필요 (커스텀)
QUIC
UDP 포트 1개만 열면 됨
해결 시그널링/STUN/TURN 불필요
해결 포트 고정 가능
해결 Network.framework 등 네이티브 지원
Connection Migration
📶
WiFi AP-A
IP: 192.168.1.10
AP 전환
📶
WiFi AP-B
IP: 192.168.2.20
TCP/WebRTC
IP 변경 → 연결 끊김
QUIC
Connection ID 유지 → 끊김 없음
실전 교훈: WebRTC는 브라우저 P2P 화상통화에 최적화된 도구. 원격 데스크톱처럼 커스텀이 필요한 실시간 스트리밍에는 QUIC이 훨씬 단순하고 강력

동작 흐름

1

클라이언트가 서버의 UDP 포트로 Initial 패킷 전송 (TLS 1.3 ClientHello 포함)

2

서버가 Handshake 패킷으로 응답 — 암호화 협상 + 연결 수립이 1-RTT에 완료

3

재방문 시 0-RTT: 이전 세션 키로 첫 패킷부터 데이터 전송 가능

4

독립적 스트림 다중화: 비디오·오디오·입력을 별도 스트림으로 전송, 하나가 유실돼도 나머지 영향 없음

5

Connection ID 기반 연결 관리: WiFi → LTE 전환 시 IP가 바뀌어도 연결 유지 (Connection Migration)

6

내장 흐름 제어 + 혼잡 제어로 네트워크 상태에 적응적 전송

장점

  • 0-RTT / 1-RTT 연결 수립 (TCP+TLS 대비 1~2 RTT 절약)
  • Head-of-Line Blocking 완전 해결 (스트림 독립)
  • Connection Migration (IP 바뀌어도 연결 유지)
  • UDP 포트 하나로 모든 통신 (WebRTC처럼 복잡한 인프라 불필요)
  • TLS 1.3 내장 (별도 암호화 레이어 불필요)

단점

  • UDP 기반이라 일부 방화벽/네트워크에서 차단 가능
  • 기존 TCP 미들박스(방화벽, IDS)와 호환성 문제
  • 구현 복잡도 높음 (자체 재전송, 혼잡 제어 구현 필요)
  • WebRTC처럼 미디어 코덱/에코 제거 등은 미내장 (직접 구현)
  • UDP 최적화된 NIC/커널이 아니면 성능 저하 가능

사용 사례

HTTP/3 (모든 최신 웹 브라우징) 원격 데스크톱 / 화면 공유 (Noctiluca) 실시간 게임 (저지연 UDP + 신뢰성) 모바일 앱 API (네트워크 전환 빈번) CDN / 엣지 서버 간 통신