WebRTC의 전반적인 아키텍처
WebRTC(Web Real-Time Communication)는 브라우저 또는 모바일 애플리케이션에서 플러그인 없이 실시간 통신을 가능하게 하는 기술이다. WebRTC의 기술적 구성 요소는 여러 계층으로 나뉘며, 각각이 실시간 통신을 원활하게 하기 위해 필요한 특정 기능을 수행한다.
네트워크 계층: ICE (Interactive Connectivity Establishment)
ICE는 WebRTC의 핵심적인 네트워크 계층 구성 요소로, 두 클라이언트 간의 네트워크 경로를 설정하는 데 사용된다. ICE는 여러 가지 후보 경로(candidate)들을 생성하고, 이를 기반으로 가장 최적의 경로를 선택하여 두 클라이언트 간의 연결을 설정한다.
-
STUN (Session Traversal Utilities for NAT): STUN 서버는 클라이언트가 공용 IP 주소를 확인하고 NAT(Network Address Translation)를 통해 경유할 때 자신의 위치를 파악하는 데 사용된다. 이 정보는 ICE 후보군 생성에 사용된다.
-
TURN (Traversal Using Relays around NAT): STUN이 실패할 경우, TURN 서버를 통해 미디어 데이터를 중계하는 방식으로 연결을 유지할 수 있다. TURN은 NAT나 방화벽 등으로 인해 직접적인 피어 투 피어 연결이 불가능할 때 사용된다.
-
NAT Traversal: NAT을 통한 경로 설정은 P2P 연결을 성립하는 데 중요한 과정으로, ICE 프레임워크 내에서 다양한 네트워크 환경에서도 연결이 가능하도록 지원한다.
시그널링 (Signaling) 프로토콜
WebRTC 자체는 시그널링 방법론을 정의하지 않지만, 시그널링은 두 클라이언트 간에 연결 설정, 세션 관리, 미디어 설정 등의 메타 데이터를 교환하는 중요한 단계이다. 시그널링은 SIP(Session Initiation Protocol), XMPP(Extensible Messaging and Presence Protocol), HTTP 등을 통해 이루어질 수 있다.
- SDP (Session Description Protocol): SDP는 미디어 세션의 설정 정보를 담고 있으며, WebRTC에서 시그널링 메시지로 주고받는 정보에 포함된다. SDP에는 코덱 정보, 미디어 형식, 네트워크 정보 등이 포함된다.
미디어 처리 계층
WebRTC는 음성, 영상 등의 실시간 미디어 처리를 위해 다양한 기술을 사용한다. 이 계층에서는 미디어 캡처, 인코딩, 전송, 디코딩, 렌더링 등의 과정을 다룬다.
-
미디어 캡처 (Media Capture): 사용자 디바이스의 카메라, 마이크 등의 미디어 소스를 캡처하는 기능을 제공한다. 이는 브라우저의 MediaStream API를 통해 이루어진다.
-
미디어 인코딩 및 디코딩: WebRTC는 다양한 코덱을 사용하여 오디오와 비디오 데이터를 인코딩 및 디코딩한다. 대표적인 코덱으로는 VP8, VP9, H.264 (비디오 코덱)와 Opus, G.711 (오디오 코덱)이 있다.
-
미디어 전송: SRTP(Secure Real-time Transport Protocol)를 통해 미디어 데이터가 안전하게 전송된다. 이 프로토콜은 미디어 스트림을 암호화하고 무결성을 보장한다.
데이터 채널 (Data Channel)
WebRTC의 데이터 채널은 P2P 연결을 통해 낮은 지연 시간으로 데이터(텍스트, 파일 등)를 주고받을 수 있게 한다. 이 채널은 SCTP(Stream Control Transmission Protocol) 위에서 동작하며, 신뢰성, 순서 보장, 다중 스트림 등의 기능을 제공한다.
-
SCTP (Stream Control Transmission Protocol): 데이터 전송을 위한 기본 프로토콜로, TCP와 유사하게 신뢰성을 제공하지만, 여러 스트림을 통해 데이터 손실 시 재전송 및 재정렬 기능도 제공한다.
-
DTLS (Datagram Transport Layer Security): 데이터 채널에서 보안을 제공하기 위한 프로토콜로, 데이터가 암호화된 상태로 전송되도록 한다.
보안 계층
WebRTC는 통신의 보안을 매우 중요시하며, 기본적으로 모든 미디어와 데이터 전송은 암호화된다.
-
DTLS: 모든 WebRTC 세션은 DTLS를 통해 보안이 강화된다. DTLS는 UDP를 통한 전송에서도 TLS의 보안 기능을 적용할 수 있도록 한다.
-
SRTP: 미디어 전송 계층에서의 보안은 SRTP를 통해 제공된다. SRTP는 미디어 스트림의 무결성을 보장하고, 재전송 공격을 방지하는 기능을 포함하고 있다.
연결 관리와 QoS
WebRTC는 다양한 네트워크 환경에서도 안정적인 통신을 유지하기 위해 QoS(Quality of Service) 및 연결 관리 기술을 사용한다.
-
RTCP (RTP Control Protocol): RTP(Real-time Transport Protocol) 세션의 품질을 모니터링하고 제어하는 프로토콜로, 패킷 손실, 지연, 지터 등의 정보가 RTCP 패킷에 포함되어 전송된다.
-
네트워크 적응: WebRTC는 네트워크 상태에 따라 비디오 품질을 자동으로 조정하여 사용자가 최적의 경험을 할 수 있도록 한다. 예를 들어, 네트워크 대역폭이 낮아지면 비디오 해상도나 프레임 속도를 줄여 지연 시간을 최소화한다.
WebRTC API와 개발 도구
WebRTC는 다양한 API를 통해 개발자들이 쉽게 실시간 통신 기능을 구현할 수 있게 한다. 주요 API는 다음과 같다.
-
RTCPeerConnection: P2P 연결을 관리하는 API로, ICE 후보군 관리, 시그널링 메시지 처리, 미디어 스트림 추가 등을 포함한다.
-
RTCDataChannel: 위에서 설명한 데이터 채널을 생성하고 관리하는 API로, 텍스트 메시지, 파일 등의 데이터 전송을 위한 인터페이스를 제공한다.
-
getUserMedia: 사용자의 카메라와 마이크에 접근하여 미디어 스트림을 생성하는 API이다. 생성된 스트림은 RTCPeerConnection에 연결되어 전송될 수 있다.
관련 자료:
- WebRTC 1.0: Real-Time Communication Between Browsers, W3C Recommendation, 2021.
- Interactive Connectivity Establishment (ICE): A Protocol for NAT Traversal for Offer/Answer Protocols, IETF RFC 8445, 2018.
- SRTP: Secure Real-time Transport Protocol, IETF RFC 3711, 2004.
- DTLS-SRTP Key Transport for Media, IETF RFC 5764, 2010.
- Stream Control Transmission Protocol, IETF RFC 4960, 2007.