WebRTC에 대해서 이야기를 해봤는데 WebRTC를 유기적으로 잘 사용하기 위해서는 아래와 같은 서버가 필요하다.
-
Signaling - Always needed
-
NAT Traversal - need for production
-
Media - depends on the app
이번 포스트는 Signaling Server에 대해 다뤄볼 것이다.
😃 Signaling Server란?
이전 글에서 알 수 있듯이 WebRTC란 사용자 간의 P2P Connection을 통해 Object를 교환하는 방식이다.
그런데 그냥 P2P Connection만 존재하면 다 통신이 가능해지는 것일까????
물론 아니다! 우리는 상대방과 통신을 하기 위해서는 상대방(보낼 주체)이 누구인지를 먼저 파악해야 한다.
이를 위해 Signaling Server가 존재하는 것이다.
Signaling Server는 사용자 간의 WebRTC를 위한 P2P 통신을 할 때 모르는 사용자를 엮어주는 역할을 한다.
- 브라우저가 사용자의 장치에 접근을 한다.
- Signaling Server를 통해 상대방의 정보를 얻는다.
- Peer to Peer Connection을 통해 통신한다.
위 그림을 보면,
사용자는 Peer to Peer Connection을 만들기 위해 Signaling Server에 먼저 접근하여 상대방의 정보(위치)를 알아낸 후 Peer to Peer Connection을 하는 것을 볼 수 있다.
🔍 Signaling Server에서 정보 교환해야 할 것들
- 통신을 열고 닫기 위한 세션 컨트론 메시지들 ( Session Control Messages )
- 에러 메세지들 ( Error Messages )
- 코덱 (Codecs)
- 대역폭 (Bandwidth)
- 미디어 유형 (Media Types)
- IP 주소 (Ip Addresses)
- 보안 키
- etc...
🔍 Signaling Server의 동작 원리
1. 통신을 원하는 사용자는 상대 사용자에게 Signaling Server를 통해 자신의 정보들을 제공한다. ( ICE 사용 가능 )
2. 상대 사용자는 그 정보들에 대해 자신의 정보를 담아 답장한다. ( ICE 사용 가능 )
ICE란?
Interactive Connectivity Establishment (ICE)는 브라우저가 Peer를 통한 연결이 가능하도록 하게 해 주는 프레임워크입니다.
🔍 Signaling Server는 직접 구축해야 할까??
WebRTC와는 별개로 Signaling Server는 구축해야 한다...
많은 Cloud Message Platform이 존재하긴 하지만,,, ( ex: Pusher, Kaazing, PubNub )
WebRTC Application을 위해 Signaling 서버를 직접 구축해보는 것도 좋은 것 같다.
예를 들어 Web socket, SIP, XMPP/Jingle 기술을 사용하면 된다!!
음 Netty를 사용해볼까?
Signaling Server를 어떤 프로그래밍 언어를 만들지는 아래 글을 참고하자
https://bloggeek.me/webrtc-programming-languages/
참고 : https://www.youtube.com/watch?v=YWjfs4aWKMc
궁금하신 것이 있거나 잘못된게 있으면 언제든지 댓글 달아주세요!
'WebRTC' 카테고리의 다른 글
[WebRTC] TURN 서버의 필요성 (2) | 2021.02.08 |
---|---|
[WebRTC] WebRTC란? (1) | 2020.12.22 |