Agora 자체 코덱과 Web SDK의 정체 — WebRTC 표준, SD-RTN 전용망, FEC의 분업
"Agora는 자체 코덱을 써서 빠르다는데, 브라우저에서는 어떻게 동작하나요?" 도입 검토 자리에서 가장 자주 나오는 질문입니다. 답의 핵심은 코덱과 네트워크를 분리해서 보는 것. 네이티브에서는 자체 코덱과 SD-RTN 전용망을 모두 쓰지만, 웹은 WebRTC 제약 때문에 VP8/H.264 표준 코덱을 강제당하고 오직 경로 최적화로만 차별화합니다. 이 글은 그 분업 구조와 함께, 해저케이블을 깐 게 아니라 같은 ISP 회선 위에서 라우팅 제어권을 가져간다는 SD-RTN의 실체, 재전송 없이 손실을 복원하는 FEC의 원리까지 풀어냅니다.
목차(41개 항목)
- 0. 핵심 명제 — Agora의 무기는 두 레이어로 분리되어 있다
1. WebRTC 기본기 — 브라우저가 강제하는 표준
2. 네이티브 SDK — Agora가 직접 코덱까지 잡는다
3. Web SDK — 절반은 표준, 절반은 Agora
5. 코드 레벨에서 보는 "서버가 경로를 관리한다"의 의미
6. 데이터센터 250개 = 전 세계에 박혀있는 컴퓨터
7. 데이터센터는 ISP와 어떻게 연결되나 — 멀티호밍
9. 실무 의사결정 — 언제 네이티브, 언제 Web?
- 10. 한 장 요약 — 암기 카드
- 11. 한 줄 결론
- 관련 글
- 참고 자료
"Agora는 자체 코덱을 써서 빠르다고 들었는데, 그럼 브라우저에서는 어떻게 동작하나요?". Agora 도입을 검토하는 자리에서 가장 자주 받는 질문 중 하나입니다. 답은 단순한 "예/아니오"가 아니라 레이어 분리 관점에서 풀어야 합니다 — 코덱 레이어와 네트워크 레이어를 따로 보면 네이티브와 Web의 차이가 자연스럽게 정리됩니다.
이 글은 그 분업 구조를 처음부터 끝까지 정리합니다. WebRTC 표준이 만든 제약, Agora가 그 위에서 살린 부분, SD-RTN 전용망의 실체, 그리고 FEC라는 진짜 무기까지.
0. 핵심 명제 — Agora의 무기는 두 레이어로 분리되어 있다
Agora의 실시간 성능은 "자체 코덱"과 "전용 네트워크(SD-RTN)" 두 레이어에서 나온다. 네이티브(iOS/Android/PC)에서는 두 레이어 모두 활용하지만, 웹 브라우저에서는 WebRTC API 제약 때문에 코덱 레이어는 표준(VP8/H.264)을 쓸 수밖에 없고, 네트워크 레이어(SD-RTN)에서만 차별화한다. 그래서 "Web에서 Agora를 쓰는 진짜 이유"는 코덱이 아니라 경로 최적화다.
흔한 오해와 정정:
| 오해 | 정확한 이해 |
|---|---|
| Agora는 모든 환경에서 자체 코덱을 쓴다 | ❌ 네이티브 한정. 웹은 WebRTC 표준 코덱(VP8/H.264) 강제 |
| Web SDK는 일반 WebRTC와 같다 | ❌ 코덱은 같지만 네트워크 경로가 SD-RTN 경유 |
| "전용 회선"이라 항상 빠르다 | ⚠️ 전용 백본망이지만 마지막 마일(클라이언트~엣지)은 공용 인터넷 |
| FEC는 코덱의 기능이다 | ⚠️ 코덱과 별개 레이어. 재전송 없이 패킷 손실을 미리 대비하는 채널 코딩 |
| WebRTC 자체로도 충분히 빠르다 | ⚠️ P2P 좋은 네트워크에서는 그렇지만, 글로벌·NAT 통과·혼잡 시 SFU+전용망이 필요 |
1. WebRTC 기본기 — 브라우저가 강제하는 표준
브라우저(Chrome/Firefox/Safari)에는 WebRTC라는 표준이 내장되어 있습니다. 별도 플러그인 없이 getUserMedia() / RTCPeerConnection API로 카메라·마이크 캡처와 실시간 전송이 가능합니다.
브라우저가 결정하는 것들
| 항목 | 누가 결정하나 | 개발자가 바꿀 수 있나 |
|---|---|---|
| 코덱 | 브라우저 런타임 | ❌ 강제 — RTCRtpSender.getCapabilities()로 노출된 목록만 사용 가능 |
| 암호화 | DTLS-SRTP 강제 | ❌ 표준 강제 |
| NAT 트래버설 | ICE 프레임워크 | ⚠️ STUN/TURN 서버는 지정 가능, 알고리즘은 표준 |
| 혼잡 제어 | GCC(Google Congestion Control) | ❌ 브라우저 내장 |
| 재전송/FEC | NACK + RTX, ULPFEC/FlexFEC | ⚠️ 켜고 끄는 정도만 가능 |
일반 WebRTC의 한계 3가지
🔴 1. 코덱 제약
- 자체 최적화 코덱을 브라우저에 주입 불가
- 브라우저 벤더가 지원하는 코덱만 사용 가능
🔴 2. 네트워크 경로
- 공용 인터넷 P2P → ISP 비즈니스 계약에 따라 경로 결정
- 혼잡 시 우회 불가 → 지연·손실 예측 불가
🔴 3. 패킷 손실 대응 속도
- NACK 기반 재전송 → 1RTT 이상 대기
- 100~300ms 추가 지연 발생
이 세 가지가 Agora 같은 RTC 서비스가 풀어야 할 문제입니다.
2. 네이티브 SDK — Agora가 직접 코덱까지 잡는다
네이티브 환경(iOS/Android/PC)에서는 Agora SDK를 앱에 직접 링크합니다. 브라우저 런타임이 끼지 않으므로 자체 코덱·자체 네트워크 스택을 모두 사용할 수 있습니다.
자체 코덱의 핵심 — 패킷 손실 대응
일반 WebRTC와 Agora 네이티브 코덱의 차이는 손실 발생 시점의 동작에 가장 명확히 드러납니다.
FEC(Forward Error Correction)란?
데이터를 보낼 때 복구용 여분 데이터(parity)를 미리 함께 보내는 채널 코딩 기술. 일부 패킷이 손실돼도 여분 데이터로 재전송 없이 즉시 복원 가능.
비유로 설명하면:
📦 택배 비유
책 10권을 보낼 때, 원본 10권 + 복구용 2권을 같이 보냄. 운송 중 2권 분실되어도 나머지 12권 중 10권으로 원본 재구성 가능 → 재배송 요청 불필요.
트레이드오프
FEC가 공짜는 아닙니다:
| 장점 | 단점 |
|---|---|
| 재전송 대기 0ms | 대역폭 증가 ( |
| 양방향 통신 불필요 (방송에 유리) | 손실률이 FEC 임계치 초과 시 무용 |
| 지연 예측 가능 | CPU 추가 사용 |
Agora 네이티브 SDK는 네트워크 손실률·대역폭 추정에 따라 패리티 비율을 조절하는 송신측 적응형 채널 코딩으로 FEC 비율을 동적으로 조정합니다.
3. Web SDK — 절반은 표준, 절반은 Agora
여기가 핵심 문제 지점입니다.
브라우저는 WebRTC 표준만 노출 → 자체 코덱을 직접 주입할 수 없음.
그래서 Agora Web SDK는 이렇게 설계되어 있습니다:
정리하면 — 레이어별 분업
| 레이어 | 네이티브 SDK | Web SDK |
|---|---|---|
| 캡처 | 자체 ADM/VDM | getUserMedia (브라우저) |
| 코덱 | ✅ Agora 자체 코덱 | ❌ WebRTC 표준 (VP8/H.264) |
| 암호화 | 자체 + DTLS-SRTP | DTLS-SRTP (브라우저) |
| 전송 스택 | 자체 RTP/UDP | WebRTC RTP/UDP (브라우저) |
| 네트워크 경로 | ✅ SD-RTN | ✅ SD-RTN |
| FEC 정책 | ✅ Agora 자체 적응형 | ⚠️ WebRTC ULPFEC + Agora 서버단 보강 |
Web에서 Agora의 유일하면서 결정적인 차별점 = 네트워크 레이어(SD-RTN)
코덱 효율은 어차피 브라우저 한계이므로, Agora는 그 외 모든 부분 — 경로·서버 보강·전송 품질 모니터링 — 으로 차이를 만듭니다.
4. SD-RTN — Software Defined Real-Time Network
이게 "전용 회선"의 실체입니다. 이름 그대로 소프트웨어 정의 실시간 네트워크. 그런데 여기서 가장 중요한 사실 하나를 먼저 박아둬야 합니다.
⚠️ 먼저 정정 — Agora는 해저케이블을 깔지 않았다
"Agora가 바닷속에 전용 해저케이블을 깔았나?" → NO. 물리적 회선은 똑같은 인터넷 인프라(ISP들)를 씁니다. 차이는 "누가 경로를 결정하느냐"의 제어권에 있습니다.
마케팅 자료에서 "전용 네트워크"라는 표현 때문에 오해하기 쉽지만, Agora 서버끼리의 연결도 결국 ISP 회선을 사용합니다. 본질은 물리 인프라의 차이가 아니라 라우팅 제어 주체의 차이.
패킷이 인터넷을 이동하는 기본 메커니즘
각 라우터는 패킷을 받으면 라우팅 테이블을 보고 "다음 어디로 보낼지" 결정합니다. 이 테이블은 BGP(Border Gateway Protocol) 로 ISP들끼리 합의해 만듭니다.
BGP의 본질: "어느 ISP랑 어떤 계약을 맺었느냐"에 따라 경로 결정. 즉 비즈니스 관계가 라우팅 결정 기준 — 속도나 품질이 아님.
🔴 일반 P2P WebRTC — 경로 선택 불가
- 경로 결정 주체: 각 라우터의 BGP 테이블 (분산 결정)
- 경로 변경: 불가 (내 권한 밖)
- 혼잡 감지: 불가 (ISP들이 상태 공유 안 함)
🟢 Agora SD-RTN — 중간에 Agora 서버를 박는다
핵심은 두 가지:
① 구간을 짧게 쪼개서 ISP 홉 수 감소 서울↔뉴욕 사이에 Agora 서버를 촘촘히 배치 → 각 구간이 짧아 ISP 1~2개만 경유.
② 각 구간의 다음 목적지를 Agora가 직접 선택
라우터의 BGP 테이블이 결정하는 게 아니라, Agora 소프트웨어가 실시간 측정값으로 결정.
핵심 차이 — 딱 한 줄
| 항목 | P2P WebRTC | Agora SD-RTN |
|---|---|---|
| 경로 결정 주체 | 라우터 (BGP) | Agora 소프트웨어 |
| 경로 결정 기준 | ISP 비즈니스 계약 | 실시간 RTT/Loss 측정 |
| 경로 변경 | 불가 | 가능 (수백ms 안에 전환) |
| 혼잡 감지 | 불가 (ISP끼리 비공유) | 가능 (내 서버끼리 상태 공유) |
| 서울↔뉴욕 ISP 홉 | 5~10개 | 구간별 1~2개씩 |
| 물리적 회선 | 공용 인터넷 | 공용 인터넷 (같음) |
🍕 비유로 한 번 더
🚗 공용 인터넷 = 네비 없이 외운 길로 운전
🛰️ Agora SD-RTN = 실시간 네비 + 거점별 직원
📮 택배 비유
| 일반 P2P | Agora SD-RTN |
|---|---|
| 일반 우체국에 맡김 | 내 직원을 중간중간 배치 |
| "규정상 대전 경유" | 대전직원이 "여기 막힘" 보고 |
| 대전 파업해도 나는 모름 | 본사가 "광주로 바꿔" 즉시 지시 |
| 경로 변경 불가 | 실시간 우회 |
기술적으로 어떻게 구현되는가
Last Mile은 여전히 공용 인터넷
⚠️ 마지막 마일 주의: SD-RTN의 제어권은 "사용자 단말 ↔ 가장 가까운 Agora Edge" 구간에는 미치지 않습니다. 그 구간은 여전히 ISP가 BGP로 결정. 그래서 사무실 Wi-Fi나 모바일 셀이 나쁘면 SD-RTN도 결국 그 영향을 받습니다.
250+ Edge 노드의 의미
Agora는 전 세계 250+ 데이터센터에 Edge 노드를 운영합니다. 클라이언트가 채널에 join하면:
- SDK가 가장 가까운 Edge를 자동 선택 (RTT 측정 기반) → last mile 최소화
- 패킷은 Edge → SD-RTN 백본(Agora 라우팅) → 상대 Edge → 상대 단말로 흐름
- 백본 경로 중 한 노드가 느려지면 다음 패킷부터 다른 노드로 우회
결국 한 줄: 같은 ISP 회선 위에서 돌지만, 중간에 Agora 서버를 박아서 (a) 각 구간을 짧게 만들고 (b) 다음 목적지를 BGP 대신 Agora 소프트웨어가 실시간으로 선택 — 이게 SD-RTN의 전부입니다.
5. 코드 레벨에서 보는 "서버가 경로를 관리한다"의 의미
추상적으로 "Agora가 경로를 제어한다"라고 말하면 와닿지 않습니다. 라우터와 Agora 서버의 차이를 코드 레벨에서 보면 직관이 잡힙니다.
일반 라우터 — 테이블대로만 움직이는 기계
라우터는 "테이블 보고 전달"만 하는 ASIC 기반 패킷 처리기입니다. 측정도 안 하고, 선택도 안 하고, 그냥 표대로 움직입니다. 테이블 자체는 BGP가 결정하므로 내가 바꿀 수 없습니다.
Agora 서버 — 소프트웨어가 도는 컴퓨터
이건 그냥 일반 컴퓨터에서 도는 소프트웨어입니다. Agora 엔지니어가 작성한 코드로 실시간 라우팅 결정.
라우터 vs Agora 서버
| 항목 | 일반 라우터 | Agora 서버 |
|---|---|---|
| 본질 | 패킷 전달 전용 기계 (ASIC) | 소프트웨어가 도는 컴퓨터 (x86) |
| 경로 결정 | BGP 테이블 고정값 | 코드로 동적 결정 |
| 측정 | 불가 | 직접 핑 날려 측정 |
| 전환 | 불가 | 조건에 따라 즉시 |
| 운영자 개입 | ISP 합의 필요 | Agora 단독 결정 |
한 줄: 라우터는 "테이블대로만 움직이는 기계", Agora 서버는 "직접 측정하고 판단하는 컴퓨터". 그래서 Agora 서버가 중간에 있으면 BGP 테이블이 아니라 실시간 측정값으로 경로를 결정할 수 있습니다.
6. 데이터센터 250개 = 전 세계에 박혀있는 컴퓨터
"Agora 서버"의 정체
유저가 Agora 앱을 켜면:
이건 유튜브 서버에 접속하는 것과 똑같은 원리입니다. 특별한 마법은 없습니다.
데이터센터란?
서버 컴퓨터들을 모아둔 건물입니다.
Agora의 "250개 데이터센터"는:
왜 많을수록 좋은가?
서버가 촘촘할수록 각 구간이 짧아집니다 → ISP 홉이 줄고, Agora 제어 구간이 늘어남.
📦 택배 비유
숫자가 클수록 → 커버리지 넓고 → 경로 제어 구간이 길어지고 → 더 안정적.
7. 데이터센터는 ISP와 어떻게 연결되나 — 멀티호밍
여기 또 한 가지 SD-RTN을 빠르게 만드는 비밀이 있습니다 — 데이터센터의 ISP 연결 방식.
일반 유저 vs 데이터센터
🔴 일반 유저 = 단일 ISP 의존
가정/사무실은 보통 한 ISP에만 가입. 그 ISP가 느려지면 그대로 영향받습니다.
🟢 데이터센터 = 멀티호밍 (여러 ISP 동시 계약)
데이터센터는 운영상 여러 ISP와 동시 계약합니다. 이걸 멀티호밍(multi-homing) 이라 부릅니다.
멀티호밍이 만드는 차이
정리 — SD-RTN의 두 가지 제어 레이어
| 레이어 | 무엇을 제어 | 효과 |
|---|---|---|
| L1. 서버 간 경로 선택 | Agora 서버끼리 어느 노드로 forward할지 | 글로벌 백본 우회 |
| L2. 데이터센터의 ISP 선택 | 한 데이터센터에서 어느 ISP 회선으로 나갈지 | 같은 도시 안에서도 회선 우회 |
이 두 레이어가 결합되면, 같은 ISP 인프라 위에서도 일반 유저와는 완전히 다른 네트워크 동작이 나옵니다.
8. 그래서 Web에서 Agora를 쓰는 이유는?
코덱은 어차피 브라우저 표준입니다. 그럼에도 Web SDK를 도입할 만한 이유는 명확합니다:
✅ Pro
| 이유 | 메커니즘 |
|---|---|
| 글로벌 안정성 | SD-RTN 백본으로 ISP 영향 최소화 |
| NAT 트래버설 부담 제거 | SFU 구조라 P2P NAT 협상 불필요 |
| 대규모 채널 지원 | SFU + 백본으로 수천 명 동시 전송 가능 |
| 품질 모니터링 | Agora Analytics로 RTT/Loss/Jitter 실시간 가시화 |
| 방화벽 우회 | Cloud Proxy로 기업 방화벽 통과 (#9 참고) |
| CDN과 동시 운용 | Media Push로 SD-RTN ↔ RTMP/HLS 변환 (#37 참고) |
⚠️ Con
| 한계 | 영향 |
|---|---|
| 코덱은 브라우저 한계 | 자체 코덱 효율 차이는 네이티브 한정 |
| 마지막 마일은 공용 인터넷 | 사용자 Wi-Fi 나쁘면 SD-RTN 무용 |
| WebRTC API 제약 | 인코더 파라미터 세부 조정 제한적 |
9. 실무 의사결정 — 언제 네이티브, 언제 Web?
같은 Agora SDK라도 환경마다 최적 구성이 다릅니다.
시나리오별 권장
| 시나리오 | 권장 | 이유 |
|---|---|---|
| 화상통화 앱 (모바일 우선) | 네이티브 + Web 병행 | 모바일은 자체 코덱 이득 큼 |
| 웹 기반 화상회의 | Web SDK | 설치 마찰 제거가 우선 |
| 라이브 커머스 (방송) | Web SDK + Media Push | CDN 분기 필요 |
| AI 음성 에이전트 | 환경에 맞는 SDK | 네트워크 경로가 핵심 |
| 게임 보이스챗 | 네이티브 | 초저지연이 KPI |
10. 한 장 요약 — 암기 카드
| 개념 | 한 줄 요약 |
|---|---|
| WebRTC 표준 | 브라우저 내장, 코덱·암호화·NAT 처리 강제 |
| Agora 자체 코덱 | 네이티브 한정. FEC 내장, 패킷 손실 즉시 복원 |
| Agora Web SDK | 코덱은 WebRTC 표준, 네트워크는 SD-RTN |
| SD-RTN | 250+ Edge 노드 + 실시간 최적 경로, 평균 76ms |
| FEC | 패리티 데이터 미리 보내 재전송 없이 복원 |
| 마지막 마일 | SD-RTN도 사용자 Wi-Fi는 보장 못함 |
| Web의 진짜 무기 | 코덱 ❌ / 네트워크 경로 ✅ |
11. 한 줄 결론
Agora의 실시간 성능은 두 레이어로 분리된다 — 자체 코덱(FEC 내장)과 SD-RTN 전용 백본. 네이티브에서는 둘 다 활용하지만, Web 브라우저는 WebRTC API 제약 때문에 코덱 레이어가 막힌다. 그래서 Web SDK의 핵심 가치는 "코덱 최적화"가 아니라 "경로 최적화" — ISP 비즈니스 계약 대신 250+ Edge가 실시간으로 그리는 최단 경로다. 단, 마지막 마일(사용자~Edge)은 여전히 공용 인터넷이므로 SD-RTN이 만능은 아니다.
관련 글
- #9 Agora의 기업 방화벽 우회 전략 — Cloud Proxy와 Firewall Whitelist — SD-RTN 위에 얹는 방화벽 통과 레이어
- #8 왜 P2P가 막히는가? — NAT, STUN, TURN 인터넷 구조 이해하기 — WebRTC P2P의 근본 제약
- #0 WebRTC란? ICE? STUN? NAT? TURN? — WebRTC 기본 구조
- #28 H.264 Profile·인코더 옵션·비트레이트의 현실 — 코덱 레이어 깊게 파보기
- #40 라이브 스트리밍 프로토콜 선택 — HLS / LL-HLS / WebRTC 의사결정 — 프로토콜별 비교
참고 자료
- Agora SD-RTN Overview — 전용 백본망 구조와 SLA
- Agora Web SDK Documentation — Web SDK 공식 문서
- WebRTC W3C Specification — 브라우저 표준 명세
- RFC 5109 — RTP Payload Format for Generic FEC — ULPFEC 표준
- RFC 8627 — RTP Payload Format for Flexible FEC — FlexFEC 페이로드 포맷 표준