WebRTC란?
- Web Real-Time Communication의 약자입니다.
- 사용 목적: 주로 실시간 오디오/비디오 스트리밍이나 P2P 데이터 전송을 위해 사용합니다.
- UDP를 사용하므로 지연시간(latency)이 짧고, 미디어 전송에 특화된 최적화 기능을 제공합니다.
WebRTC가 데이터를 전달하는 방법
Mesh 방식
- 각 클라이언트는 다른 모든 클라이언트와 개별적인 P2P 연결을 맺습니다.
- 각 클라이언트가 자신의 데이터들을 나머지 모든 클라이언트에게 직접 전송합니다.
- 장점
- 구현이 간단하지만 추가적인 설정이 필요하지 않습니다.
- 단점
- 참여자 수가 많아질수록 각 클라이언트의 네트워크 부하가 증가합니다.
SFU(Selective Forwarding Unit) 방식
- 클라이언트는 자신의 데이터를 SFU 서버에 보내고, 서버가 각 클라이언트에게 다른 클라이언트들의 데이터들을 분배합니다.
- SFU 서버의 역할
- 데이터 중계
- 클라이언트 선택적으로 포워딩 가능
- 네트워크 상태 감지하여 최적화된 스트림을 제공
- 장점
- 클라이언트의 네트워크 부하가 줄어들어 참여자 수가 많아도 성능이 상대적으로 안정적입니다.
- 단점
SFU 서버를 사용하여 클라이언트들에게 동시에 데이터를 전달할 수 있지 않을까?
- SFU 방식을 사용하면 서버에서 클라이언트들에게 데이터를 중계할 수 있습니다. 하지만 퀴즈 데이터와 같이 간단한 데이터들을 전달할 때는 일반적으로 WebSocket을 사용합니다.
→ 이유
- WebSocket을 사용할 때는 특별한 설정 없이 간단한 연결 설정으로 클라이언트와 서버간의 양방향 연결을 할 수 있습니다.
- WebRTC의 SFU 방식을 사용하려면 시그널링, STUN/TURN 서버 등을 다루어야 합니다.
- 시그널링: 클라이언트와 SFU 서버 간에 P2P 통신이 일어나기 전 세션 제어 메세지, 네트워크 구성, 미디어 기능 등의 통신을 하기 위한 연결 정보를 교환하는데 과정입니다.
- STUN 서버: P2P 연결 설정하기 위해 클라이언트가 자신의 공인 IP 주소와 포트 번호를 알아내는 데 사용합니다.
- TURN 서버: 클라이언트 간에 직접적인 P2P 연결이 불가능할 때 데이터를 중계하는 역할입니다. 주로 복잡한 NAT 환경이나 보안이 엄격한 네트워크에서 사용됩니다.
- 이러한 추가적인 설정이 필요하기 때문에 간단한 데이터들을 전달할 때에는 WebSocket을 사용하는 것이 좋습니다.
https://gh402.tistory.com/38
https://gh402.tistory.com/45
- 뿐만 아니라 SFU 방식은 미디어 스트림과 같은 실시간 데이터를 효율적으로 처리하고 전송하기 위해 설계 되었기 때문에 간단한 데이터를 클라이언트에게 전달할 때는 WebSocket을 사용하는 것이 더 적절합니다.