[개념]WebRTC

KanDohyung·2024년 7월 8일

개념정리

목록 보기
1/28

📺 WebRTC란?

Web Real-Time Communication
웹 어플리케이션과 사이트들이 별도의 소프트웨어(플러그인)없이 음성, 영상, 미디어, 텍스트, 파일과 같은 데이터를 브라우저끼리 주고 받을 수 있게 만든 기술.

P2P통신에 최적화 되어 있으며, 크게 3가지 클래스에 의해 교환이 이루어진다.

  • Media Stream : 카메라 / 마이크 등 데이터 스트림 접근
  • RTCPeerConnection : 암호화 및 대역폭 관리 및 오디오, 비디오 연결
  • RTCDateChannel - 일반적인 데이터 P2P통신

P2P연결은 중개 서버를 거치지 않아 빠른 속도가 보장되며, HTTPS가 강제되기 때문에 중간자 공격에 대한 보안이 보장된다. 실시간으로 할 수 있다는 특성을 바탕으로 개인화되고 참여 유도적인 웹 어플리케이션을 제작할 기회가 되기도 한다. 다만, 다양한 플랫폼과 브라우저에서 접속하는 사용자들에게 동일한 사용자 경험을 제공하는 것이 가장 큰 목표인 만큼, 브라우저와 플랫폼과의 호환성이 큰 문제로 대두됨.

🧷 브라우저 호환성

WebRTC는 구글이 주도한 오픈소스 프로젝트를 기반으로 하는 웹표준이여서 크롬에서 가장 높은 호환성을 가진다. 그러나 아직까지는 다양한 플랫폼에서 완전한 표준화가 구현되지는 않은 기술. 따라서 adapter.js 라이브러리를 함께 사용하는 것이 필수적.

⚓ WebRTC의 P2P연결방식 한계와 극복 [시그널링]

WebRTC는 P2P방식이라 특정한 연결방식을 갖는다.
1. 각 브라우저가 P2P 커뮤니케이션에 동의
2. 상호 주소 공유
3. 보안 및 방화벽 우회
4. 실시간 데이터 교환

2,3번의 방식이 일반적인 웹 개발 접근방법으로는 해결하기가 어려움. 따라서, 중재자의 역할을 하는 기술이 필요함. 여기서 각 컴퓨터의 라우터를 통과해서 연결할 방법을 찾는 과정을 NAT traversal 이라함.

NAT트래버셜은 STUN(Session Traversal Utilities for NAT) 서버에 의해 이루어짐. 복잡한 인터넷 주소 속에서 자신을 식별할 수 있는 정보를 반환하고, 각 Peer들이 서로 연결할 수 있도록 공인IP와 포트를 찾아줌.

STUN 방식이 사용불가능 할 경우, TURN(Traversal Using Relay NAT) 서버를 대안으로 이용하게 됨. TURN방식은 중간에 서버를 거치게 되어 엄밀히 따지면, P2P통신이 아니게 되어, 구조상 지연이 반드시 발생하게 되므로, 최후의 수단으로서만 선택되어야 한다.

위의 일련의 과정을 거쳐 획득한 자신의 사설 또는 공인 IP와 포트넘버를 얻게 됨. (연결가능한 네트워크 주소들) 또한, 위의 모든 과정은 ICE(Interactive Connectivity Establishment) 라는 프레임워크 위에서 이루어지게 됨.

  • ICE: 두 개의 단말이 P2P 연결을 가능하게 하도록 최적의 경로를 찾아주는 프레임 워크

이제 연결이 완료되었으면, SDP(Session Description Protocol)을 통해 상호 데이터를 전송함.

  • SDP: 스트리밍의 해상도나, 형식, 코덱 등의 멀티미디어 컨텐츠의 교환을 위해, 매개변수를 정의하기 위한 표준.
  • Trickle ICE 옵션: 일반적으로 각 피어는 ICE 후보를 수집하여 목록을 완성 후, 한 번에 교환하게됨. 하지만 SDP모델과 맞물리며 단점으로 작용.(후보를 모으는데 시간이 오래걸리며, 그 과정에서 네트워크 환경에 따라 지연이 걸릴 수 있다. 또한, 한쪽의 ICE 후보 수집 작업이 완료되어야만 다른 피어가 ICE 후보를모을 수 있어, 비효율적) 이러한 비효율적인 후보 교환 작업을 병렬 프로세스로 수행할 수 있게 만드는 것이 Trickle ICE. 해당 옵션이 활성화된 ICE 프레임워크는 각 피어에서 ICE 후보를 찾아내는 즉시 교환을 시작하여 상호 연결 가능한 ICE를 보다 빨리 찾아낼 수 있음. 피어 간의 연결 상태를 체크함과 동시에 연결에 걸리는 시간을 최적화 가능하므로 가능한한 활성화 하는 것이 용이함.

시그널링은 WebRTC자체에서 지원하는 기능이 아니며, 연결전에 미리 준비해야 하는 과정. 자체 스펙으로 정해진 것이 아니라 정해진 방법이 없음. 따라서 직접 서버를 구축하거나 시그널링 서버를 제공해주는 외부 솔루션을 적용가능

참고자료

https://wormwlrm.github.io/2021/01/24/Introducing-WebRTC.html#%EB%A7%88%EB%AC%B4%EB%A6%AC

0개의 댓글