# WebRTC의 기술적 구성 요소 (Technical Components of WebRTC)

#### 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에 연결되어 전송될 수 있다.

***

관련 자료:

1. WebRTC 1.0: Real-Time Communication Between Browsers, W3C Recommendation, 2021.
2. Interactive Connectivity Establishment (ICE): A Protocol for NAT Traversal for Offer/Answer Protocols, IETF RFC 8445, 2018.
3. SRTP: Secure Real-time Transport Protocol, IETF RFC 3711, 2004.
4. DTLS-SRTP Key Transport for Media, IETF RFC 5764, 2010.
5. Stream Control Transmission Protocol, IETF RFC 4960, 2007.
