WebRTC의 첫 개념정리부터 시작하여 하이퍼커넥트의 경우, 해당 아키텍처를 어떻게 구축하였는지 개괄적으로 알아보도록 하자.
webRTC의 동작을 알기 위해선 각각의 용어를 알아야 한다.
[SDP]
SessionDescriptionProtocol의 약자로, 이는 webRTC통신 전, 각 Peer들의 미디어 데이터 교환 방식이 메타 데이터 형태로 정의된 프로토콜을 의미한다. 내부적으로 어떤 코덱을 사용할지, 미디어의 샘플레이트는 어떤지 등이 기술되어 있다.
[NAT 타입]
공인IP와 사설IP를 상호 변환해주는 네트워크 기술
[ICE candidates]
Interactive Connectivity Establishment의 약자이다. Peer들의 상호 연결 설립에 필요한 주소값 데이터를 의미한다. 내부적으로 Peer의 공인IP/포트/NAT 타입 등이 기술되어있다.
[STURN 서버]
ICE candidates정보를 추출해주는 역할
[TURN 서버]
1. STURN서버가 ICE candidates추출 실패 시, 대신 추출해준다.
2. SDP세션, ICE candidates를 Peer들간 교환이 성공적이었음에도 불구, P2P연결 실패 시 중개를 하여 Peer들끼리 연결해주는 서버
[SIGNALING 서버]
Peer들은 연결되기 전, 사전 준비 단계를 거친다.
1. Offer/Answer단계 : SDP세션을 상호 교환함으로써 미디어 데이터 교환 방식을 상대 Peer에게 알림
2. ICE candidates 교환 단계 : TURN/STURN서버로부터 Peer의 네트워크 주소 정보를 받아 Peer들간의 교환을 진행
위 이미지를 통해 webRTC의 연결 방식을 개략적으로 알 수 있다 생각한다.
첫 번째로, 연결을 희망하는 Peer의 Offer단계이다. 이 단계에선 해당 Peer의 SDP세션 정보를 Signal서버로 전송한다. 해당 서버는 이를 다른 Peer로 전달한다. 그 후, Peer2는 Answer단계를 수행하여 자신의 SDP세션 정보를 응답해준다. 이를 통해 Peer1과 Peer2는 어떠한 형태의 미디어 데이터를 어떠한 프로토콜로 어떠한 인코딩/디코딩 방식으로 주고받을지 약속할 수 있게된다.
STURN서버로부터 ICE Candidates데이터를 요청한다. 하지만 만약 실패할 수도 있는데, 이럴 경우, TURN서버로부터 해당 정보를 요청한다. STURN서버든, TURN서버든, ICE Candidates데이터를 수신받았을 경우 이를 각각의 Peer들에게 응답해준다. 그 후, 각 Peer들은 해당 데이터를 상호 교환할 필요가 있는데, 이를 위해 Signal서버를 통해 교환하게 된다. 이를 통해 각 Peer들은 상대방 Peer의 공인IP/포트/NAT 타입 등을 알게 됨으로써, 네트워크 상 어떻게 찾아가야할지를 알 수 있게된다.
SDP세션 정보와 ICE Candidates주소 정보 교환을 통해 두 Peer들은 미디어 통신 방식에 대해 알게되었으며, 상대방 Peer를 어떻게 찾아가야할지를 알게되었다. 이제 연결 단계만 남았다. 첫 번째로 두 Peer간 직접 연결을 시도할 수 있다. 이 연결은 주로 1:1 연결시에 쓰이며 중계서버가 없다. 하지만 실패하거나, 1:N 또는 N:N연결을 위해 TURN서버를 경유하여 릴레이 연결을 할 수 있다.
하이퍼커넥트는 크게 미디어 서버를 2가지가 존재한다고 추측한다. 한 개는 1 : N 방식으로 단방향으로 방송을 송출하는 '라이브 스트리밍 미디어 서버'이다. 또 다른 1개는 N : N 방식으로 양방향으로 소통하는 그룹콜 미디어 서버이다.