WebRTC란?
- Web Real-Time Communication의 약자
- P2P 방식으로 카메라, 마이크 등을 전송할 수 있도록 해준다. (서버를 거치는 것보다 훨씬 빠름)
- Javascript API로 제공되기 때문에 별다른 소프트웨어가 필요없다.
- WebRTC 통신 과정
- Signaling 을 통해 통신할 peer간 정보를 교환한다. (세션 제어 메시지, 네트워크 구성 정보, 미디어 기능 등의 정보)
- WebRTC를 사용해 연결을 맺고, peer의 단말에서 미디어를 가져와 교환한다.

Signaling
WebRTC는 P2P 연결을 통해 직접 통신하지만, 이를 중계해주는 과정이 필요하다. 이를 시그널링이라고 부르고 이를 수행하는 서버를 Signaling Server라고 부른다. 서버는 peer들을 논리적으로 묶고 서로간의 정보를 교환하여 준다. 이 과정에서 공인 IP나 방화벽 문제를 해결하기 위해 STUN/TURN 서버를 이용하기도 한다.
WebRTC 구현 방식

- Mesh는 1대1 연결에 적합하고 서버의 자원이 적게 들지만, N:N인 경우 클라이언트의 과부하가 급격하게 증가한다.
- MCU의 경우 다수의 송출 미디어를 중앙 서버에서 혼합 또는 가공하는 방식으로 중앙서버의 높은 컴퓨팅 파워가 필요하다.
- SFU의 경우 종단 간 미디어 트래픽을 중계하는 중앙 서버 방식으로 클라이언트 peer간의 연결이 아닌, 서버와 클라이언트 간의 peer를 연결한다.
Openvidu 구조

- Openvidu Deployment는 실시간 오디오/비디오 스트리밍에 필요한 모든 인프라를 제공한다. Docker로 배포한 뒤 application으로 사용한다. (Docker 4443 PORT)