Skip to content

WebRTC Basic

Albert Kong edited this page Oct 24, 2025 · 7 revisions

WebRTC 기초

WebRTC란

Web Real-Time Communication의 약자.

브라우저와 모바일 앱에서 별도 플러그인 없이 실시간 음성, 영상, 데이터 통신을 가능하게 하는 오픈소스 프로젝트.

핵심 특징

  • P2P 직접 통신
  • 낮은 지연 시간
  • 브라우저 네이티브 지원
  • 암호화 기본 제공 (DTLS, SRTP)

시그널링 (Signaling)

P2P 연결을 수립하기 위한 메타데이터 교환 과정. WebRTC 표준에는 시그널링 방법이 정의되어 있지 않으므로 선택 필요.

교환 정보

  • Session Description (SDP)
  • ICE Candidate (네트워크 경로)
  • 미디어 코덱 정보
  • 대역폭 제약

일반적인 구현

  • WebSocket
  • Socket.io
  • HTTP Long Polling
  • SIP

현재 프로젝트: Socket.io 사용 (WebSocket 폴백, 자동 재연결)

ICE (Interactive Connectivity Establishment)

NAT와 방화벽을 통과하여 최적의 연결 경로를 찾는 프레임워크.

동작 과정

  1. 로컬 네트워크 주소 수집
  2. STUN 서버로부터 공개 주소 획득
  3. TURN 서버를 통한 중계 경로 확보 (선택)
  4. 모든 후보(Candidate) 정보를 상대방과 교환
  5. 연결 가능한 경로 테스트
  6. 최적 경로 선택

ICE Candidate 타입

  • Host: 로컬 네트워크 주소
  • Server Reflexive: STUN으로 발견한 공개 주소
  • Relay: TURN 서버를 통한 중계 주소

STUN (Session Traversal Utilities for NAT)

클라이언트가 NAT 뒤에서 자신의 공개 IP 주소와 포트를 발견하도록 돕는 서버.

역할

  • 공개 주소 확인
  • NAT 타입 판별
  • P2P 연결 가능 여부 확인

무료 공개 STUN 서버

stun:stun.l.google.com:19302
stun:stun1.l.google.com:19302

제약

  • Symmetric NAT 환경에서는 P2P 연결 불가
  • 데이터 중계 기능 없음

TURN (Traversal Using Relays around NAT)

P2P 연결이 실패할 때 데이터를 중계하는 서버. STUN의 확장.

사용 시나리오

  • Symmetric NAT 환경
  • 기업 방화벽으로 P2P 차단
  • 모든 ICE Candidate 연결 실패

트레이드오프

  • 연결 성공률 향상 (거의 100%)
  • 서버 대역폭 비용 증가
  • 지연 시간 증가

운영 전략

  • TURN은 최후의 수단으로만 사용
  • 대부분 연결은 STUN으로 해결 (80-90%)

SDP (Session Description Protocol)

미디어 세션의 속성을 설명하는 텍스트 기반 프로토콜.

포함 정보

  • 미디어 타입 (audio, video, data)
  • 코덱 및 포맷
  • 네트워크 정보 (IP, 포트)
  • 대역폭 정보
  • 암호화 키

SDP 교환 흐름

  1. Caller가 Offer SDP 생성
  2. 시그널링 서버를 통해 전달
  3. Callee가 Answer SDP 생성
  4. Offer와 Answer 교환 완료 후 연결 시작

예시

v=0
o=- 123456789 2 IN IP4 127.0.0.1
s=-
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000

WebRTC 연결 수립 과정

sequenceDiagram
    participant A as Peer A
    participant S as Signal Server
    participant B as Peer B
    
    A->>A: createOffer()
    A->>S: Offer SDP
    S->>B: Offer SDP
    
    B->>B: createAnswer()
    B->>S: Answer SDP
    S->>A: Answer SDP
    
    A->>S: ICE Candidates
    S->>B: ICE Candidates
    
    B->>S: ICE Candidates
    S->>A: ICE Candidates
    
    Note over A,B: P2P Connection Established
Loading

참고 자료