회사에서 영상 스트림밍을 이용하는 업무가 생겨서 WebRTC 에 대해 자세히 알아보게 되었다.
WebRTC 에 대해서는 기존에 존재는 알고는 있었지만 기술에 대해 자세히 알지 못했는데 이참에 정리를 해두려고 한다.
WebRTC 란?
WebRTC(Web Real-Time Communication)는 웹 브라우저나 모바일 앱을 통해 실시간으로 오디오, 비디오, 데이터를 전송하고 통신할 수 있는 오픈 소스 프로젝트와 기술 집합입니다. WebRTC는 웹 기반의 응용 프로그램뿐만 아니라 모바일 앱에서도 활용될 수 있으며, 실시간 화상 통화, 파일 공유, 화면 공유, 온라인 게임 및 다양한 협업 도구 등 다양한 분야에서 사용됩니다.
WebRTC 의 가장 큰 특징은 P2P 서비스라는 점이다. 클라이언트가 일단 연결되면 서버를 거치지 않고 실시간으로 바로 데이터를 주고 받는다.
P2P 연결의 가장 큰 장점은 각 클라이언트에 전송해야 하는 많은 데이터를 전송하는 책임을 나누어 서버에서 발생하는 작업을 대폭 줄여 대기 시간을 줄일 수 있다는 것입니다.
그러나 기존 서버 기반 연결과 달리 P2P 연결을 설정하는 것은 어렵습니다. 각 피어는 데이터를 보낼 목적지와 장애물이 많기 때문에 피어 사이에 라우터, 프록시, 방화벽이 많이 있다는 의미입니다. 경우에 따라 잠재적인 로컬 네트워크 주소가 수만 개가 넘을 수도 있습니다.
WebRTC 의 주요 3가지 기능
WebRTC는 주로 세 가지 주요 기능으로 구성됩니다.
- 오디오 및 비디오 스트림 전송: WebRTC를 사용하면 사용자는 마이크와 카메라를 통해 오디오 및 비디오 스트림을 생성하고, 이를 네트워크를 통해 다른 사용자에게 전송할 수 있습니다. 이로써 실시간 화상 통화 및 영상 스트리밍을 구현할 수 있습니다.
- 피어 투 피어(Peer-to-Peer) 통신: WebRTC는 중앙 서버 없이 두 개 이상의 디바이스 간에 직접 통신할 수 있는 P2P 통신을 지원합니다. 이는 사용자 경험을 향상시키며 대역폭 사용을 최적화하는 데 도움이 됩니다.
- 실시간 데이터 통신: 오디오와 비디오 스트림 외에도, WebRTC는 실시간 데이터 통신을 지원하여 사용자가 추가 정보를 전송하고 수신할 수 있게 해줍니다. 이를 통해 채팅 메시지, 파일 공유, 게임 상태 등을 실시간으로 처리할 수 있습니다.
시그널링 서버 (Signaling Server)
WebRTC 는 P2P 서비스 이기에 각각의 Peer 는 다른 Peer 들의 접속 정보들을 알 수 없습니다. 이런 Peer 들의 최소화된 개인 정보를 노출하여 Peer가 서로 연결할 수 있도록 연결을 해결하고 설정하는 것이 시그널링 서버입니다. 다시 말해서 시그널링 서버는 P2P 통신을 위한 중개 서버입니다.
따라서 잠재적으로 피어 간에 연결 정보를 교환하려면 신호 서버를 구축하고 신호 프로토콜을 설계해야 합니다. 하지만 기존의 서버 기반 통신과 달리 피어 간에 연결 정보를 교환하면 서버에 닿지 않고도 실시간으로 서로 직접 데이터를 보낼 수 있습니다. 결과적으로 서버 기반 통신보다 지연 시간을 줄이고 많은 비용을 절감할 수 있습니다.
시그널링 서버는 다음과 같은 기능을 수행합니다.
- 피어의 연결 설정: 시그널링 서버는 피어들이 서로를 인식하고 연결할 수 있도록 돕습니다. 이때 연결 설정에 필요한 메타데이터를 교환하게 됩니다. 피어 간의 IP 주소, 포트 정보, 미디어 형식 등 연결 설정을 위한 정보가 여기에 포함됩니다.
- 세션 제어 및 관리: 시그널링 서버는 통화 시작, 종료, 미디어 스트림 추가/제거 등 세션 관리와 관련된 정보를 전달합니다. 이를 통해 사용자는 실시간 화상 통화나 데이터 교환을 원활하게 할 수 있습니다.
- 상태 및 메시지 교환: 피어 간의 상태 정보나 메시지 교환을 위한 데이터도 시그널링 서버를 통해 전달할 수 있습니다. 이를 활용하여 채팅 메시지나 추가 기능을 구현할 수 있습니다.
- NAT 트래버설: 피어들이 서로 직접 연결하기 어려운 경우, 시그널링 서버를 통해 중계 서버 (TURN 서버)를 찾아줌으로써 중계하여 피어 간의 통신을 가능하게 할 수 있습니다.
시그널링 서버는 P2P 통신에서 핵심적인 역할을 하지만, 실제 미디어 스트림은 직접 피어 간에 전송되며 중앙 서버를 거치지 않습니다. 따라서 시그널링 서버의 부하는 높을 수 있지만, 미디어 스트림이 직접 P2P로 전송되므로 대역폭 효율이 높아집니다.
WebRTC에서 시그널링 서버는 자체적으로 정해진 표준이나 프로토콜은 없습니다. 대신, 애플리케이션에서 사용하는 통신 규약과 데이터 형식을 따라 구현됩니다. 일반적으로는 WebSocket, HTTP, MQTT 등의 프로토콜을 사용하여 시그널링 서버를 구현합니다.
SDP 프로토콜 (Session Description Protocol)
연결 정보를 설명하기 위해 WebRTC는 P2P 연결을 위한 멀티미디어 통신 세션을 설명하는 표준 형식인 SDP(Session Description Protocol)를 사용합니다. SDP에는 코덱, 소스 주소, 오디오 및 비디오의 미디어 유형, 기타 관련 속성과 같은 피어 연결에 대한 일부 정보가 포함되어 있습니다.
SDP 교환 절차는 비교적 간단합니다.
- Caller 는 SDP Offer 를 시그널링 서버를 통해 제안합니다.
- Calle 는 SDP Offer 를 받고 이에 SDP Answer 를 응답합니다.
- SDP Answer 를 받은 Caller 는 통신을 하기 위해 연결을 준비합니다.
ICE (Interactive Connectivity Establishment)
Peer는 미디어 세션을 설정하기 위해 제안/응답을 통해 SDP 메시지를 교환했으며 이제 실시간 데이터를 전송하려면 연결해야 합니다. 그러나 피어 간 연결을 설정하는 것은 로컬 네트워크의 NAT/방화벽 뒤에 있고 WAN(Wide Area Network)에서 대상으로 가는 방법을 모르기 때문에 쉽지 않습니다. 이를 위해 WebRTC는 ICE(Interactive Connectivity Deployment) 프로토콜을 사용하며, 피어는 ICE 후보를 교환하여 이들 간의 실제 연결을 협상할 수 있습니다. ICE는 STUN(Session Traversal Utilities for NAT) 및 TURN(Traversal Using Relays around NAT) 프로토콜의 조합을 사용하여 NAT를 통해 해당 연결을 만드는 데 사용되는 전체 방법을 검색하는 데 사용됩니다
STUN (Traversal Using Relays around NAT)
NAT(Network Address Translation)와 방화벽을 통과하면서 장치 간에 직접적인 통신을 가능하게 하는 기술입니다. STUN은 네트워크 상의 주소 변환 문제를 해결하여 P2P 통신을 용이하게 하기 위해 사용됩니다.
NAT는 여러 장치가 하나의 공용 IP 주소를 공유하여 인터넷에 접속하는 것을 가능하게 해주는 기술입니다. 하지만 이로 인해 같은 내부 네트워크에 있는 장치들 간에 직접 통신하기 어렵습니다. STUN은 이러한 문제를 극복하기 위해 사용됩니다.
TURN (Traversal Using Relays around NAT)
TURN(Traversal Using Relays around NAT)은 NAT(Network Address Translation)와 방화벽을 통과하는 데 어려움이 있는 경우, 특히 P2P 통신을 할 수 없는 경우에 사용되는 프로토콜입니다. TURN은 중앙 서버를 사용하여 데이터를 중계하는 방식으로, 피어 간의 직접 통신이 어려운 상황에서도 실시간 통신을 가능하게 합니다.
참고
'네트워크' 카테고리의 다른 글
가장 많이 사용하는 스트리밍 프로토콜 6가지 (0) | 2023.09.01 |
---|