Web Real-Time Communication
웹 어플리케이션과 사이트들이 별도의 소프트웨어(플러그인)없이 음성, 영상, 미디어, 텍스트, 파일과 같은 데이터를 브라우저끼리 주고 받을 수 있게 만든 기술.
P2P통신에 최적화 되어 있으며, 크게 3가지 클래스에 의해 교환이 이루어진다.
P2P연결은 중개 서버를 거치지 않아 빠른 속도가 보장되며, HTTPS가 강제되기 때문에 중간자 공격에 대한 보안이 보장된다. 실시간으로 할 수 있다는 특성을 바탕으로 개인화되고 참여 유도적인 웹 어플리케이션을 제작할 기회가 되기도 한다. 다만, 다양한 플랫폼과 브라우저에서 접속하는 사용자들에게 동일한 사용자 경험을 제공하는 것이 가장 큰 목표인 만큼, 브라우저와 플랫폼과의 호환성이 큰 문제로 대두됨.

WebRTC는 구글이 주도한 오픈소스 프로젝트를 기반으로 하는 웹표준이여서 크롬에서 가장 높은 호환성을 가진다. 그러나 아직까지는 다양한 플랫폼에서 완전한 표준화가 구현되지는 않은 기술. 따라서 adapter.js 라이브러리를 함께 사용하는 것이 필수적.
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) 라는 프레임워크 위에서 이루어지게 됨.
이제 연결이 완료되었으면, SDP(Session Description Protocol)을 통해 상호 데이터를 전송함.
시그널링은 WebRTC자체에서 지원하는 기능이 아니며, 연결전에 미리 준비해야 하는 과정. 자체 스펙으로 정해진 것이 아니라 정해진 방법이 없음. 따라서 직접 서버를 구축하거나 시그널링 서버를 제공해주는 외부 솔루션을 적용가능
https://wormwlrm.github.io/2021/01/24/Introducing-WebRTC.html#%EB%A7%88%EB%AC%B4%EB%A6%AC