# WebRTC 네트워킹 구성 요소 (WebRTC Networking Components)

WebRTC (Web Real-Time Communication)는 웹 애플리케이션과 사이트가 플러그인 없이 오디오, 비디오, 데이터 스트림을 교환할 수 있게 해주는 기술이다. 이 기술이 원활하게 작동하기 위해서는 다양한 네트워킹 구성 요소가 필수적이다. 이러한 구성 요소는 신뢰할 수 있는 연결을 보장하고, 데이터의 품질을 유지하며, 실시간 통신을 가능하게 한다. 이 글에서는 WebRTC의 네트워킹 구성 요소를 계층적으로 자세히 설명한다.

#### ICE (Interactive Connectivity Establishment)

ICE는 WebRTC 네트워킹의 핵심 구성 요소로, 두 엔드포인트가 서로 연결될 수 있도록 도와주는 프레임워크이다. ICE는 네트워크 주소 변환(NAT) 환경에서도 엔드포인트 간의 연결을 설정하는 데 중요한 역할을 한다.

**ICE 후보 (ICE Candidates)**

ICE 후보는 네트워크 인터페이스, IP 주소, 포트, 전송 프로토콜 등의 네트워크 주소 정보를 포함하는 요소이다. ICE 후보는 로컬 후보와 원격 후보로 나뉜다. 로컬 후보는 각 엔드포인트에서 생성되고, 원격 후보는 상대방 엔드포인트에서 전달된 것이다. 이 후보들을 조합해 연결 가능한 경로를 찾는다.

**STUN (Session Traversal Utilities for NAT)**

STUN은 공용 IP 주소를 얻고, NAT 뒤에 있는 호스트의 위치를 확인하는 데 사용된다. STUN 서버는 클라이언트의 요청을 받아 공용 IP 주소와 포트 번호를 반환하며, 이를 통해 엔드포인트가 자신의 위치를 확인할 수 있다. STUN은 ICE 프로토콜의 일부로, 엔드포인트 간의 직접 연결을 시도하기 위해 사용된다.

**TURN (Traversal Using Relays around NAT)**

TURN은 NAT 및 방화벽을 통해 직접 연결이 불가능할 때 데이터를 중계하는 데 사용되는 프로토콜이다. TURN 서버는 중간자 역할을 하며, 클라이언트는 TURN 서버를 통해 데이터를 주고받는다. TURN은 더 많은 대역폭을 요구하고 지연 시간이 증가할 수 있지만, 연결이 확실히 이루어질 수 있도록 보장한다.

#### SDP (Session Description Protocol)

SDP는 두 엔드포인트 간에 멀티미디어 세션의 파라미터를 정의하고 교환하는 데 사용되는 프로토콜이다. SDP는 연결을 설정하기 위한 필수 정보들을 포함하며, 이 정보는 주로 ICE 후보와 미디어 정보로 구성된다.

**SDP 오퍼/앤서 (SDP Offer/Answer Model)**

SDP 오퍼/앤서는 WebRTC에서 세션 설정을 위한 과정이다. 한쪽 엔드포인트가 SDP 오퍼를 보내고, 상대방이 이를 받아 SDP 앤서로 응답한다. 이 과정에서 미디어 유형, 코덱, 네트워크 정보 등이 협상된다. 이 협상 과정이 성공적으로 이루어져야 통신이 가능해진다.

**SDP 파라미터**

SDP는 다양한 파라미터를 통해 세션을 정의한다. 여기에는 미디어 형식, 코덱, 비트레이트, 샘플링 레이트 등이 포함되며, 네트워크 연결을 위해 필요한 정보도 포함된다. SDP는 텍스트 형식으로 작성되며, 이는 쉽게 해석되고 전달될 수 있다.

#### SRTP (Secure Real-Time Transport Protocol)

SRTP는 WebRTC에서 오디오와 비디오 데이터를 안전하게 전송하기 위해 사용되는 프로토콜이다. SRTP는 RTP (Real-Time Protocol)를 확장하여 데이터의 기밀성, 무결성, 인증을 제공한다.

**암호화와 인증**

SRTP는 데이터 암호화를 통해 통신 내용이 도청되지 않도록 보호한다. 또한, HMAC (Hash-based Message Authentication Code)를 사용하여 데이터가 전송 중에 변경되지 않았음을 보장한다. 이러한 보안 기능은 WebRTC에서 민감한 미디어 데이터를 보호하는 데 필수적이다.

**키 관리**

SRTP의 키 관리는 DTLS-SRTP(Datagram Transport Layer Security-SRTP)를 통해 이루어진다. 이 방법은 통신을 설정하는 동안 양쪽 엔드포인트가 서로의 신원을 확인하고, 안전한 키를 교환하는 과정을 포함한다. 이 키는 SRTP 스트림에서 사용된다.

#### NAT 및 방화벽 처리

NAT 및 방화벽은 WebRTC의 네트워킹에서 가장 큰 도전 과제 중 하나이다. NAT는 로컬 네트워크 내에서 IP 주소를 변환하며, 방화벽은 외부에서 내부 네트워크로의 접근을 제한한다. WebRTC는 이러한 문제를 해결하기 위해 다양한 기술을 사용한다.

**시그널링 서버 (Signaling Server)**

시그널링 서버는 클라이언트 간의 네트워크 정보를 교환하는 데 사용된다. WebRTC는 시그널링 프로토콜에 대해 구체적인 표준을 정하지 않으며, 다양한 프로토콜이 사용될 수 있다. 시그널링 서버는 두 클라이언트 간의 SDP 교환, ICE 후보 교환 등을 중재한다.

**피어 간 연결 (Peer-to-Peer Connection)**

WebRTC는 가능한 한 피어 간 직접 연결을 선호한다. 그러나 NAT 및 방화벽 때문에 직접 연결이 어려울 수 있다. 이때 ICE, STUN, TURN을 활용하여 최적의 연결 경로를 찾는다. 피어 간의 직접 연결은 대역폭 효율성을 높이고 지연 시간을 최소화하는 데 기여한다.

***

관련 자료:

1. IETF RFC 5245: Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols
2. IETF RFC 4566: SDP: Session Description Protocol
3. IETF RFC 3711: The Secure Real-time Transport Protocol (SRTP)
4. IETF RFC 5766: Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)
5. IETF RFC 5389: Session Traversal Utilities for NAT (STUN)
