# WebRTC의 절차 (Procedures in WebRTC)

#### 연결 초기화 (Connection Initialization)

WebRTC(Web Real-Time Communication)는 웹 애플리케이션 및 사이트에서 브라우저 간의 실시간 미디어 및 데이터 교환을 가능하게 하는 기술이다. WebRTC의 절차는 클라이언트 간의 안정적이고 보안된 연결을 설정하고 유지하는 데 필수적인 단계들을 포함한다. 이 절차는 주로 두 개의 주요 부분으로 나눌 수 있다: 신호 처리(Signaling)와 피어 연결(Peer Connection).

**신호 처리 (Signaling)**

신호 처리(Signaling)는 WebRTC 절차의 첫 번째 단계로, 두 클라이언트가 서로 연결될 수 있도록 필요한 메타데이터를 교환하는 과정이다. WebRTC는 신호 처리 메커니즘을 정의하지 않지만, 일반적으로 WebSocket, HTTP, 또는 XMPP와 같은 프로토콜이 사용된다. 이 단계에서는 다음과 같은 절차가 포함된다:

* **세션 설명 프로토콜(Session Description Protocol, SDP) 교환:**\
  클라이언트는 SDP를 사용하여 미디어 형식, 코덱, 네트워크 정보 등을 기술한다. 두 클라이언트는 이 SDP 정보를 교환하여 서로의 미디어 설정을 이해하고 적절히 조정한다. SDP는 `offer`와 `answer`로 나뉘며, 한 클라이언트가 `offer`를 생성하면, 다른 클라이언트는 이에 대한 `answer`를 반환한다.
* **ICE 후보(Interactive Connectivity Establishment Candidates) 교환:**\
  ICE는 네트워크 주소를 찾아내고 연결할 수 있는 가장 적합한 경로를 결정하는 데 사용된다. 각 클라이언트는 여러 네트워크 인터페이스(예: 로컬 IP, 공용 IP, 중계 서버)를 통해 접근 가능한 ICE 후보들을 생성하고, 이를 상대 클라이언트와 교환한다. ICE 후보는 STUN(Session Traversal Utilities for NAT) 또는 TURN(Traversal Using Relays around NAT) 서버를 통해 획득될 수 있다.

#### 피어 연결 설정 (Peer Connection Establishment)

신호 처리 과정이 완료되면, 클라이언트 간의 실제 피어 연결이 설정된다. 이 과정은 다음과 같은 절차로 이루어진다:

**ICE 후보 평가 및 연결 (ICE Candidate Gathering and Connectivity Checks)**

클라이언트는 교환된 ICE 후보를 평가하고, 가장 적합한 경로를 선택하여 연결을 시도한다. 이 과정은 일반적으로 다음과 같이 진행된다:

* **ICE Gathering:**\
  각 클라이언트는 가능한 모든 네트워크 경로를 수집하고, 이들 경로를 상대 클라이언트에게 전달한다. 이때 사용 가능한 후보들은 우선순위에 따라 나열된다.
* **Connectivity Checks:**\
  클라이언트들은 수신된 ICE 후보를 사용하여 상대 클라이언트와의 연결을 시도한다. 이 과정에서 STUN을 사용하여 연결 테스트를 수행하고, 성공적인 경로를 확인한다. 가장 높은 우선순위의 후보부터 순차적으로 테스트가 이루어지며, 성공적인 경로가 발견되면 그 경로가 선택된다.
* **ICE Nomination:**\
  다중 경로 중에서 최종적으로 사용할 경로를 선택하는 과정이다. 선택된 경로는 "Nominated" 상태가 되며, 이후 미디어와 데이터가 이 경로를 통해 전송된다.

**DTLS 및 SRTP 설정 (DTLS and SRTP Setup)**

피어 간의 연결이 확립된 후, 데이터 전송 전에 보안을 설정하는 단계이다.

* **DTLS(Datagram Transport Layer Security) 핸드셰이크:**\
  WebRTC는 보안을 위해 DTLS를 사용한다. 두 클라이언트는 DTLS 핸드셰이크를 수행하여 암호화 키를 교환하고, 전송되는 데이터의 무결성과 기밀성을 보장한다. DTLS는 TLS의 변형으로, UDP 기반의 전송을 지원한다.
* **SRTP(Secure Real-time Transport Protocol) 설정:**\
  미디어 스트림의 보안을 위해 SRTP가 사용된다. SRTP는 미디어 데이터의 암호화, 인증, 무결성 확인을 제공한다. DTLS 핸드셰이크를 통해 생성된 키는 SRTP에 사용되어, 음성 및 비디오 데이터의 안전한 전송을 보장한다.

#### 데이터 전송 및 유지 (Data Transmission and Maintenance)

연결이 확립된 후, WebRTC는 실시간 미디어 및 데이터 전송을 시작한다. 이 단계에서 이루어지는 절차는 다음과 같다:

**미디어 및 데이터 스트림 전송 (Media and Data Stream Transmission)**

* **RTP/RTCP(RTP Control Protocol) 전송:**\
  실시간 오디오 및 비디오 데이터는 RTP(Real-time Transport Protocol)를 통해 전송된다. RTCP는 RTP 스트림의 품질을 모니터링하고 제어하기 위해 사용된다. RTCP 패킷은 네트워크 상태 정보를 포함하며, 이는 전송 경로의 품질을 조정하는 데 도움을 준다.
* **데이터 채널 전송:**\
  WebRTC는 데이터 채널을 통해 비미디어 데이터를 전송할 수 있다. 이 채널은 SCTP(Stream Control Transmission Protocol) 위에 구현되며, 신뢰성, 순서 보장 등의 다양한 전송 속성을 지원한다. 데이터 채널은 텍스트, 파일 등 다양한 형태의 데이터를 실시간으로 주고받을 수 있게 한다.

**연결 유지 및 갱신 (Connection Maintenance and Renewal)**

실시간 통신 동안, 네트워크 상태 변화나 다른 외부 요인으로 인해 연결 상태가 변할 수 있다. 이를 관리하기 위한 절차는 다음과 같다:

* **ICE 연결 상태 갱신:**\
  초기 연결 후에도, 클라이언트는 주기적으로 네트워크 상태를 체크하고, 필요 시 새로운 ICE 후보를 교환하여 더 나은 경로로 연결을 갱신할 수 있다.
* **RTT(Round-Trip Time) 모니터링 및 조정:**\
  RTCP 패킷을 통해 라운드 트립 시간(RTT) 및 네트워크 지연을 모니터링하고, 이를 바탕으로 버퍼 크기 조정 및 비트 전송률 조정 등을 수행하여 스트림 품질을 유지한다.
* **페이스 체인지 및 회피(Face Change and Recovery):**\
  네트워크 장애나 변화가 발생했을 때, WebRTC는 신속하게 경로를 전환하거나 중단된 연결을 복구하는 절차를 수행한다. 이는 페이스 체인지(Face Change)라고 하며, 중계 서버를 통해 재연결하거나 새로운 ICE 후보를 통해 연결을 재설정한다.

***

관련 자료:

* WebRTC 1.0: Real-Time Communication Between Browsers, W3C Candidate Recommendation.
* Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal, IETF RFC 5245.
* Datagram Transport Layer Security (DTLS), IETF RFC 6347.
* Secure Real-time Transport Protocol (SRTP), IETF RFC 3711.
