WebRTC 앱 만들어보기: (1) Domain 지식

2024. 9. 8. 19:22iOS/네트워크

등장 배경

WebSocket(Web Real Time Communication)은 서버의 중개를 거쳐 통신을 한다. 따라서, Client가 늘어나고, 프레임의 크기가 커질 수록 서버의 부담이 늘어난다.

이를 해결하기 위해 등장한 것이 WebRTC이다. P2P로 연결되게 때문에 서버의 부담이 적다. 데이터 송수신에서는 UDP가 이용된다.

출처: 이프 카카오 2022 WebRTC 리모트 플레이

Signaling

두 클라이언트가 1)무엇으로, 2)어떻게 대화할지 서버를 통해 합의하는 과정.

IP, 미디어 유형, 코덱 등을 초기화하는 과정

Signalling 서버는 양방향 통신이 필요하기 때문에 WebSocket 구현이 일반적임

이 시리즈에서는 FireStore를 이용하여 개발해볼 예정

SDP(Session Definition Protocol)

무엇으로 통신할지: 비디오, 오디오 통신, 코덱, 리졸루션 등의 정보

어떻게 통신할지: WebSocket 또는 HTTP

Offer SDP → Answer SDP → ICE Candidate

Signaling이 다른 인스턴스에서 구현될 경우, Pub/Sub 구조로 통신이 가능하다.

어떻게 소통하는가?

클라이언트들이 소통에 사용할 수 있는 네트워크 정보를 보낸다. 이를 ICE Candidate라고 한다. 유형에 따라 클라이언트들의 ICE Candidate 정보를 SDP에 담아서 전송한다.

ICE(Interactive Connectivity Establishment) Candidate; ICE 후보

;NAT은 공인 IP와 사설 IP port를 매핑해주는 역할을 한다.

3가지 유형이 존재

  • Host Candidate: 로컬 네트워크일 경우 사용 가능하며, 사설 IP와 포트번호만 있으면 가능
  • Server Reflexive Candidate: 일반적인 서로다른 네트워크에서 소통. 하지만 클라이언트에서는 공인 IP를 유지하지 않고 있다. 이 떄 STUN(Session Traversal Utilities for NAT Server)를 이용한다.
  • Relay Candidate: 하지만, 방화벽 등 보안상의 이유로 어려울 경우 ,TURN 서버를 이용한다. 클라이언트들은 직접 소통하지 않고, TURN 서버를 통해 통신하기도 한다. 비용과 지연으로 권장되는 옵션은 아니다.

STUN(Session Traversal Utilities for NAT Server)

공인 IP 주소를 알려주는 역할을 하며, WebRTC 서비스 생성 시 STUN 서버를 설정한다.

상대방에게 나의 IP 주소를 알려주기 위해 STUN 서버에 요청 / 응답을 받는다.

STUN 서버는 구글 / Twilio, Xirsys, AWS, Coturn 등의 서비스 기업에서 무료로 제공한다. 하지만, 상용 서비스에서는 따로 구현할 것을 권장한다.

TURN(Traversal Using Relays around NAT)

미디어 통신을 할 때, 방화벽 같은 네트워크 환경 제약으로 클라이언트와 직접 소통하지 않고, 자체 서버를 통해 통신한다. STUN과 달리 무료로 제공해주는 서비스는 없으며, 오픈 소스 프로젝트인 coturn이 있다.

오픈 소스 turn 서버 프로젝트: coturn https://github.com/coturn

데이터 통신

ICE Candidate 선정을 거쳐 연결이 수립되면, P2P 통신을 시작한다.

이 때 SRTP 또는 SCTP를 사용한다.

SRTP vs SCTP

WebRTC에서는 영상 스트리밍에서는 실시간 전송에 알맞는 SRTP(Secure Real-time Transport Protocol)이 사용된다. 하지만 파일전송과 같은 경우는 데이터 유실이 있으면 안되기 때문에 SCTP(Stream Control Transmission Protocol)을 사용한다. UDP이지만, TCP와 유사하게 신뢰성을 보장하도록 설계되어 있다.

DTLS

UDP에서 암호화 기술인 SSL이 적용된 암호화 프로토콜. SRTP는 이 위에서 통신하여 보안성을 증가시킬 수 있다.

한계

N:N 통신을 위해서는 미디어 서버가 필요하다. 출처 : 이프카카오

네트워크 환경의 제약으로 TURN서버를 이용하거나, N:N Client의 경우에는 오히려 성능이 감소할 수 있다.

N:N 통신의 경우에는 추가적으로 SFU(Selective Forwarding Unit)이나 MCU(Multipoint Control Unit)기술을 적용해야 한다.

Front 개발자로서 WebRTC 개발에 필요한 지식

  • WebRTC API 이해
    • getUserMedia
    • RTCPeerConnection
    • RTCDataChannel
  • PeerConnection, DataChannel

Reference