📌 개요
WebRTC(Web Real-Time Communication)는 실시간으로 브라우저끼리 영상, 음성등의 데이터를 주고받을 수 있는 기술이다. WebRTC를 적용하려면 총 4가지 서버가 필요한다. 4가지 서버를 직접 구축할 수도 있고 LiveKit Cloud처럼 4가지 서버를 대신 제공해주는 서비스를 활용할 수도 있다. 여기서는 필요한 4가지 서버, 즉 Signaling 서버, Media 서버, STUN 서버, TURN 서버를 정리해보려고 한다.
✅ Signaling 서버
시그널링 서버는 트랙의 메타데이터를 제공받는 서버이다. WebRTC는 중간자 없이 Peer끼리 연결을 한다. 이때 어떤 Peer를 연결하려고 하는지와 어떤 방식으로 연결할지에 대한 정보가 필요하다. 전자의 정보를 연결 설정 정보(SDP)라 하고, 후자를 ICE Candidate라고 하는데, 이 두 정보를 주고 받는 서버가 시그널링 서버이다.
✅ Media서버
미디어 서버는 실제 비디오, 오디오 스트림을 주고받는 서버이다. WebRTC는 기본적으로 P2P방식이기 때문에 Peer끼리 비디오, 오디오 스트림을 주고 받게된다. 하지만 서비스에 참여하는 Peer가 늘어난다면 네트워크에 큰 부담이 된다. N개의 Peer가 있을 때 1명이 들어오게 되면 네트워크에는 추가로 N개의 연결이 생긴다. 이를 해결하기 위해 다중 연결이 필요할 때는 미디어 서버를 둔다. 미디어 서버를 통해 비디오, 오디오 스트림을 중계한다. 여기에도 2가지 종류의 미디어 서버가 있다.
SFU 미디어 서버는 스트림을 중계하는 역할만한다. 만약 10명의 참가자가 있다면 나를 제외한 9명의 스트림을 나에게 전달하는 역할을 하고, 스트림을 참가자쪽에서 처리해야한다. 또 다른 방식은 MCU는 스트림을 받아서 가공까지 하여 참가자에게 전송한다. 9명의 스트림 정보를 종합하여 참가자에게 전달한다. SFU는 중계 역할만 하기 때문에 서버 부하가 적지만, 참가자 쪽의 부하가 커진다. 그에 반해 MCU는 서버의 부하가 크지만 참가자의 부하는 적은 편이다.
✅ STUN/TURN 서버
STUN 서버는 Signaling 서버를 통해 전달하는 Peer의 정보를 알아내는 서버이다. 장치는 각자의 IP주소를 가지고 있다. 이때 장치의 Public IP와 Port를 알아야 연결을 할 수 있는데 이 정보를 알아내는 것이 STUN서버이다. 하지만 NAT과 같은 장치가 중간에 있다면 Public IP로 연결하는 것이 어렵다. 그래서 이를 우회하기 위해 TURN 서버가 필요하다. TURN서버에 내 IP를 전달하면 다른 참가자에게 이 정보를 전달시켜주는 서버이다.
'개발' 카테고리의 다른 글
| JavaScript는 클로저를 어떻게 만들었을까? (3) | 2025.08.03 |
|---|---|
| React에 MVVM 아키텍처 적용하기 (1) | 2025.07.25 |
| Spring Security + 세션 + 소셜로그인 (0) | 2025.01.08 |
| CORS 에러가 발생하는 과정 (0) | 2025.01.03 |
| Builder 패턴을 도입한 이유 (0) | 2024.12.23 |