
웹 애플리케이션과 사이트가 중간자 없이, 브라우저 간에 오디오나 영상 미디어를 포착하고 마음대로 스트림할 뿐 아니라, 임의의 데이터도 교환할 수 있도록 하는 기술.
쉽게 생각해보자면, 음성통화, 영상통화, P2P 파일 공유 등으로 활용될 수 있는 “다양한 플랫폼에서 가능한 실시간 커뮤니케이션 기술”이라고 정리할 수 있다.
대표적인 서비스로는 Google Meet, Discord, Zoom 등이 있다.
: P2P로 연결하기 위해 중계 서버가 필요한데, 중걔서버로 클라이언트를 찾고 연결하는 과정을 시그널링 이라고 함
WebSocket, HTTP 등 알맞은 프로토콜을 개발자가 선택해서 구현하면 된다.

두 클라이언트 사이에 Connection을 만들기 위해, 그 둘을 연결시키는 작업을 해주는 시그널링 서버가 필요하다.
NAT환경을 통과하기 위한 서버이다.STUN만으로 부족할 때에 같은 목적으로 사용하는 서버이다.: 연결하고자 하는 Peer 서로간의 미디어와 네트워크에 관한 정보를 이해하기 위해 사용되는 프로토콜.

아까 나온 이 그림은 각각 offer, answer, candidate 의 SDP를 사용하는 예제이다. (직접 구현해봐야 더 자세히 이해할 수 있을 것 같다.)
https://peppo.tistory.com/203 이 블로그를 참고해보면 좋을 것 같다.

Mesh, MCU, SFU 방식이 존재한다.

Peer-to-Peer로 클라이언트끼리 주고받는다.Peer끼리 연결을 맺기 위한 시그널 정보를 주고받을 수 있게 돕는 역할을 수행한다.Peer끼리 정보를 주고받기 때문에 클라이언트의 부담이 크다.Peer의 부담이 더 커질 것이다.
upstream과 1개의 downstream을 가지는 구조 → 클라이언트의 부담이 적다.Peer의 스트림을 모아 인코딩 & 디코딩 모두를 하기 때문에 서버 성능이 받쳐줘야 한다. 또한 실시간 송수신 보장이 어려울 수 있다.Peer의 부하가 가장 적음 → 당연히 서버의 부하는 그만큼 커진다.
upstream과 N개의 downstream을 가지는 구조Mesh 방식보다는 실시간성이 떨어질 수 있지만, P2P에 걸맞는 실시간 송수신이 보장된다.Mesh 방식보다 N:M 연결에 있어서 클라이언트의 부하가 줄긴 했지만, 각각의 downstream을 개별적으로 유지해야 하기 때문에, 여전히 클라이언트에 부담이 존재한다.Mesh방식만으로는 클라이언트가 늘어날 수록 과부하가 기하급수적으로 많이 늘어났기 때문에 SFU와 MCU가 등장하였고, 요구사항에 맞춰 적절하게 활용할 필요성이 있다.
실시간성이 가장 최우선적으로 중요하다면 SFU를, 데이터를 중간에 가공해야 한다면 MCU를 활용해보는 것이 좋을 수 있다. 연결할 클라이언트가 적다면 단순 P2P 방식도 훌륭한 판단일 수 있다.
오류가 있거나, 잘못 기재된 부분이 있다면 피드백 부탁드립니다 :)