라이브 스트리밍 프로토콜 선택 — HLS / LL-HLS / WebRTC 의사결정
HLS, LL-HLS, WebRTC를 지연 구성 요소, 호환성, 상호작용, 배포 방식, 운영 비용으로 비교합니다. 고정된 지연 수치로 프로토콜을 선택하지 않고 목표 latency와 audience 규모, 양방향 media 요구, device 지원 범위를 측정해 결정하는 절차를 제시합니다.
목차(31개 항목)
- 0. 핵심 명제 — 지연 예산으로 후보를 좁히고 운영 조건으로 검증한다
- 1. 라이브 스트리밍 지연 분해
3. LL-HLS — 저지연 HLS
4. WebRTC — sub-second 목표와 다른 트레이드오프
- 5. 프로토콜 비교 매트릭스
- 6. CDN LL-HLS 지원 현황
- 7. YouTube 라이브 모드 비교
- 8. 시각적 타이밍 비교
9. 유스케이스 → 프로토콜 의사결정
- 10. 한국 시장 현실
- 11. SA 의사결정 프레임 — 7가지 인터뷰 질문
- 12. SA 체크리스트
13. 한 줄 결론
- 관련 글
- 참고 자료
"라이브 커머스에 HLS면 충분한가요?", "스포츠 중계는 LL-HLS와 WebRTC 중 무엇을 써야 하나요?" 허용 지연은 첫 질문이지만 시청자 규모, 기기, 비용, 양방향성까지 함께 봐야 합니다.
이 글은 HLS / LL-HLS / WebRTC 세 프로토콜을 지연 분해, 내부 메커니즘, 비용·호환성 트레이드오프, 한국 시장 현실까지 비교해 의사결정 프레임을 제공합니다.
0. 핵심 명제 — 지연 예산으로 후보를 좁히고 운영 조건으로 검증한다
허용 지연으로 후보를 좁힌 뒤, 시청자 규모·상호작용·네트워크·기기·전송 비용으로 HLS, LL-HLS, WebRTC를 선택한다. 지연 숫자 하나가 프로토콜을 자동 결정하지는 않는다.
흔한 오해와 정정:
| 오해 | 정확한 이해 |
|---|---|
| HLS는 옛날 거, LL-HLS가 좋음 | 둘은 다른 트레이드오프. HLS는 안정성/비용/호환성, LL-HLS는 지연 |
| LL-HLS = HTTP/2 Push | ❌ 2020년 스펙에서 제거됨. 현재는 Preload Hints가 대체 |
| WebRTC가 항상 1초 미만 | 경로·손실·TURN·jitter buffer·미디어 처리에 따라 달라짐 |
| YouTube Ultra-low latency = LL-HLS | 공개 문서는 지연 목표와 기능 제약을 설명하며 내부 전달 방식을 특정하지 않음 |
1. 라이브 스트리밍 지연 분해
같은 "라이브"라도 지연 예산이 다르면 우선 검토할 프로토콜 후보가 달라집니다.
아래 수치는 구성 요소의 상대적 크기를 설명하기 위한 가상 예시이며 보장값이 아닙니다. 실제 서비스에서는 동일한 timecode를 송출 화면과 재생 화면에 표시해 glass-to-glass 지연을 측정합니다.
시청자 버퍼는 큰 비중을 차지할 수 있지만, 인코더·패키저·네트워크 상태에 따라 지배 구간이 달라집니다. 각 구간을 따로 계측합니다.
| 프로토콜 | 지배 변수 | 일반 E2E |
|---|---|---|
| 표준 HLS | 완성 세그먼트 게시 + 플레이어 live-edge 거리 | 구성·플레이어에 따라 수초~수십 초 |
| LL-HLS | part 게시 + hold-back + blocking reload | 구성에 따라 수초대 목표 가능 |
| WebRTC | 짧은 jitter buffer + 실시간 congestion control | 네트워크·토폴로지에 따라 sub-second 목표 가능 |
2. HLS — 세그먼트 배포와 지연의 트레이드오프
Apple이 공개한 HTTP 기반 라이브 스트리밍 프로토콜로, 여러 플랫폼과 플레이어에서 폭넓게 사용됩니다.
작동 원리
전통적인 HLS 구성은 완성된 세그먼트를 게시한 뒤 플레이어가 이를 가져갑니다. 세그먼트 길이와 live-edge 정책이 지연에 영향을 주며, part를 먼저 게시하는 LL-HLS는 다른 동작을 사용합니다.
지연 공식
왜 버퍼 3개인가
- 네트워크 출렁임 대비 — 한 세그먼트 다운로드 실패해도 다음 두 개로 버팀
- 재생 안정성 — 1개만 갖고 있으면 잠깐 끊겨도 멈춤
- live-edge 정책 — 플레이어 시작점과 서버의 hold-back 설정이 안정성과 지연을 교환
구조
ABR ladder의 child playlist들이 master 아래에 묶임 → 시청자가 자기 네트워크 상태에 맞춰 화질 자동 전환 (#38).
장점
- 폭넓은 플레이어·기기 지원
- 일반 HTTP 캐시 인프라 활용
- 대규모 배포에 CDN 캐시 활용 가능
- 성숙한 운영 도구와 생태계
단점
- 지연 큼 (10~30초)
- 인터랙티브 라이브에 부적합
3. LL-HLS — 저지연 HLS
Apple이 2019년 WWDC에서 발표. 표준 HLS의 지연 문제를 해결하기 위한 확장.
핵심 아이디어
세그먼트가 완성되기 전에 더 작은 단위(part)로 쪼개서 즉시 전달.
LL-HLS 핵심 메커니즘
현재 LL-HLS는 partial segment, blocking playlist reload, preload hint, delta update, rendition report와 server-control 속성을 조합합니다. 초기 제안에 있던 HTTP/2 Push 의존성은 현재 사양에 없습니다.
① Partial Segments (Parts)
세그먼트를 더 짧은 part로 나누고 EXT-X-PART로 표현합니다. part duration은 패키저 설정이며 Apple 문서는 200ms 예시를 제공합니다.
② Blocking Playlist Reload
시청자가 "다음 part 나오면 즉시 알려줘"라고 요청. HTTP long polling 방식.
_HLS_msn (media sequence number) + _HLS_part 쿼리 파라미터로 정확한 시점 지정.
③ Preload Hints
다음 올 part를 미리 알려줘서 시청자가 미리 요청 준비.
클라이언트는 다음 리소스 URI를 미리 알고 요청을 준비할 수 있습니다. preload hint만으로 리소스 전달이나 지연 목표가 보장되지는 않습니다.
④ Byte Range Addressing (옵션)
작은 part 여러 개를 한 파일에 담고 byte range로 가리킴 → 파일 개수 폭증 방지.
byte range 사용 여부는 패키저·origin·CDN 캐시 동작을 함께 시험해 결정합니다.
LL-HLS 비용
표준 HLS 대비:
- playlist·part 요청과 origin 상태 관리 증가
- CDN 요금과 캐시 효율은 provider·요청 패턴에 따라 달라짐
- blocking reload, delta update, cache key를 이해하는 origin/CDN 구성이 필요
4. WebRTC — sub-second 목표와 다른 트레이드오프
브라우저/모바일에서 직접 P2P 또는 SFU 통해 미디어를 주고받는 프로토콜.
작동 원리 차이
| 항목 | HLS 계열 | WebRTC |
|---|---|---|
| 전송 단위 | 파일(세그먼트/part) | 패킷(RTP) |
| 프로토콜 | HTTP | SRTP/DTLS 기반 미디어; ICE 결과에 따라 UDP·TCP·TURN 경로 가능 |
| 패키징 단계 | 필요 (HLS 컨테이너) | 없음 (raw RTP) |
| 시청자 버퍼 | 세그먼트/part와 live-edge 정책 | 적응형 jitter buffer |
| 신뢰성 | TCP 재전송 | NACK/PLI/RPSI 선택적 |
| 적응 | variant 선택 | congestion control·simulcast/SVC·SFU 정책 |
지연은 실측한다
WebRTC 지연은 capture timestamp가 시청자 화면에 나타나는 시각까지 측정합니다. 지역, SFU hop, TURN relay, packet loss, 재전송, jitter buffer, transcoding 여부를 결과와 함께 기록합니다. 특정 벤치마크 숫자를 제품 목표로 그대로 옮기지 않습니다.
WebRTC의 트레이드오프
- sub-second 지연 목표를 설계할 수 있음
- 시청자별 실시간 전송과 SFU egress 비용이 증가
- 일반 HLS 객체 캐시와 같은 방식으로 배포하지 않음
- 대상 브라우저·네트워크에서 selected candidate pair, relay 사용률, join 성공률을 측정
- TURN 서버, NAT 우회, ICE 상태를 운영해야 함
화상 회의·통화·상호작용이 중요한 방송에 잘 맞습니다. 대규모 one-to-many에서도 사용할 수 있지만, HLS 계열과 다른 capacity·비용 설계가 필요합니다.
5. 프로토콜 비교 매트릭스
| 항목 | 표준 HLS | LL-HLS | WebRTC |
|---|---|---|---|
| 지연 목표 | 수초~수십 초 | 수초대 | sub-second 가능 |
| 전송 단위 | Media Segment | Segment + Part | RTP packet |
| 시청자 버퍼 | 플레이어 live-edge 정책 | hold-back/part hold-back | 적응형 jitter buffer |
| 키프레임 정렬 | 세그먼트 경계 IDR | 세그먼트·rendition 경계 IDR | join·layer 전환용 keyframe |
| 서버 요구사항 | HTTP origin/CDN | LL-HLS aware origin/CDN | signaling + ICE/STUN/TURN + SFU(구성에 따라) |
| 시청자 확장성 | CDN 캐시 활용 | CDN 캐시 활용 | SFU capacity를 시청자 수에 맞춰 확장 |
| 비용 | egress·요청·트랜스코딩 | 추가 요청·origin 상태 관리 | SFU 처리·egress·TURN relay |
| 호환성 | 대상 플레이어로 확인 | LL-HLS 기능 지원 조합 확인 | WebRTC API·codec·ICE 경로 확인 |
| ABR | ✅ Master playlist | ✅ Master playlist | △ 자체 비트레이트 적응 |
| 운영 복잡도 | 낮음 | 중간 | 높음 |
6. CDN LL-HLS 지원 현황
LL-HLS는 단순히 .m3u8과 .m4s를 캐시하는 것보다 더 많은 동작이 필요합니다. CDN을 고를 때 현재 공식 문서와 실제 PoC로 다음을 확인합니다.
- blocking playlist reload 쿼리와 timeout 처리
- delta update·rendition report·preload hint 보존
- part와 byte-range의 cache key·TTL·origin shielding
- signed URL, 광고 삽입, multi-CDN 기능과의 호환성
제품 상태와 요금은 바뀌므로 특정 CDN의 GA/Beta 표를 고정하지 않습니다. 예를 들어 AWS는 MediaPackage의 LL-HLS 구성 문서를, Cloudflare는 Stream live input 문서를 각각 제공합니다.
7. YouTube 라이브 모드 비교
YouTube는 라이브 송출 시 3가지 모드를 제공합니다.
| 모드 | YouTube 공개 안내 | 검증 방법 |
|---|---|---|
| Normal | 고정 지연 목표를 명시하지 않음 | 대상 채널에서 glass-to-glass 측정 |
| Low Latency | 대다수 시청자에게 10초 미만으로 설명 | 지역·기기·네트워크별 측정 |
| Ultra-low Latency | 대다수 시청자에게 5초 미만으로 설명 | 기능 제약과 버퍼링을 함께 측정 |
YouTube 공개 문서는 Low latency가 대다수 시청자에게 10초 미만, Ultra-low latency가 5초 미만이라고 설명합니다. 내부 전달 프로토콜은 이 수치만으로 추정하지 않습니다.
Ultra-low latency 모드 제약:
- 4K 미지원
- 버퍼링 가능성 증가
- 일부 인코더/플레이어 호환성 이슈
8. 시각적 타이밍 비교
아래는 구성 요소를 보여 주는 예시일 뿐, 보장 지연이 아닙니다. 실제 서비스에서는 화면에 timecode를 넣고 glass-to-glass로 측정합니다.
9. 유스케이스 → 프로토콜 의사결정
결정 트리
다음 분기는 지연 요구로 1차 후보를 좁히는 예시입니다. 최종 선택은 바로 아래 운영 조건과 PoC 결과까지 포함해 결정합니다.
시나리오별 검토 후보
| 시나리오 | 우선 검토 후보 | 함께 검증할 조건 |
|---|---|---|
| 일반 방송 / 강의 / VOD형 라이브 | 표준 HLS | 비용, 재생 안정성, 기기 호환성 |
| 라이브 커머스 | LL-HLS 또는 WebRTC | 목표 채팅 동기, 시청자 규모, 상호작용 방식 |
| 스포츠 / 게임 / 경매 | LL-HLS·LL-DASH 또는 WebRTC | 허용 지연, 동시 시청자, 서버 비용 |
| 화상 회의 / 통화 | WebRTC | 양방향 미디어, TURN 경로, 단말 성능 |
| 1:N 인터랙티브 라이브 | HTTP 저지연 스트리밍과 WebRTC 조합 검토 | 호스트·시청자 경로 분리, 동기화, 비용 |
10. 한국 시장 현실
공개 근거 없이 국내 서비스의 내부 프로토콜을 추정하지 않습니다. 고객 미팅에서는 HAR·manifest·player 통계를 수집할 권한이 있는지 확인하고, 없으면 제품 요구사항만으로 새 파이프라인을 설계합니다. 지역 CDN PoP, 통신사별 RTT·손실, 한국에서 실제 쓰는 TV·모바일 기기 비중을 PoC 조건에 포함합니다.
11. SA 의사결정 프레임 — 7가지 인터뷰 질문
라이브 프로젝트 미팅에서 던지는 질문 순서:
이 7가지 답으로 후보를 좁힌 뒤, 실제 사용자 지역·기기·동시 접속 조건의 PoC 결과로 결정합니다.
12. SA 체크리스트
13. 한 줄 결론
허용 지연과 상호작용 요구로 후보를 좁히고, 시청자 규모·기기·네트워크·운영 비용을 PoC로 검증한다. LL-HLS는 part와 playlist 제어로 HTTP 배포의 live edge를 줄이고, WebRTC는 실시간 전송 대신 SFU·TURN capacity를 요구한다.
한 장 요약
관련 글
- GOP-세그먼트 정렬의 산수 — Layer A 시간축 정렬
- ABR Ladder의 Layer B 정렬 — 화질 전환 시 키프레임 동기화
- Agora SEI 메타데이터 — 비디오 동기 메타데이터
- WebRTC란? ICE? STUN? NAT? TURN? — WebRTC 기초
- 왜 P2P가 막히는가? — NAT, STUN, TURN
- Agora의 기업 방화벽 우회 전략 — Cloud Proxy — UDP/TCP 정책
- M3U8과 TS 파일의 모든 것 — HLS Deep Dive — HLS 컨테이너 구조
- TTFB 분해 — 다른 종류의 지연 합산값
- 라이브 스트리밍 송출 파이프라인 — 송출 측에서 본 인코딩/세그먼팅 파이프라인
참고 자료
- RFC 8216bis — HTTP Live Streaming 2nd Edition (draft) —
EXT-X-PART,EXT-X-PRELOAD-HINT,EXT-X-SERVER-CONTROL(HOLD-BACK/PART-HOLD-BACK), Blocking Playlist Reload 등 LL-HLS 태그의 1차 규격 - RFC 8216 — HTTP Live Streaming — 표준 HLS 플레이리스트/세그먼트 구조의 원본 RFC
- Apple — Enabling Low-Latency HLS — Parts/Preload Hints/Blocking Reload 등 LL-HLS 구현 가이드(2020년 HTTP/2 Push 제거 반영)
- WebRTC W3C Recommendation — RTCPeerConnection, SRTP 전송, jitter buffer 등 WebRTC 브라우저 API 표준
- AWS — Low-latency HLS on AWS Elemental MediaPackage — MediaLive→MediaPackage→CloudFront LL-HLS 패키징/배포 공식 문서
- Cloudflare Stream — Live latency / LL-HLS — Stream 라이브 저지연(LL-HLS) 옵션 공식 문서
- YouTube Help — Choose live stream latency — Normal/Low/Ultra-low latency의 공식 목표와 4K 제약