안녕하세요 자르반입니다.
지난 번 실시간 스트리밍을 설명드렸는데요, 이번에는 실시간 스트리밍 중, WebRTC기술에 대해 설명을 해드리려고 합니다!
설명 드리기 전, 미디어 스트리밍에 가장 많이 쓰이는 포멧은 무엇일까요?
조사 결과, HLS가 가장 높은 비율을 차지하고 있었습니다.
HLS는 라이브 스트리밍을 위한 전통적인 프로토콜인 RTSP의 진입장벽을 해소하기 위해 Apple이 개발한 프로토콜입니다.
HLS 프로토콜은 대중적인 인기를 얻은 많은 훌륭한 속성을 가지고 있습니다.
그러나 감소된 지연 시간은 그 중 하나가 아니었습니다.
사실, Apple은 품질과 규모를 개선하기 위해 의도적으로 기술에 지연 시간을 내장했습니다.
기존 HLS는 평균 10-45초의 지연시간을 가지고 있었습니다.
하지만 WWDC 2019에서 저지연 HLS를 발표하는 등 Apple은 계속해서 Latency를 낮추는 작업을 계속해서 하고 있습니다.
그럼에도 불구하고 새롭게 개선된 HLS의 지연시간은 3초 이하입니다. 이것은 분명 매우 빠르고 Low Latency에 적합합니다. 하지만 가장 빠른 옵션이 필요한 실시간 스트리밍이 필요한 경우에는 아직도 미흡합니다.
그렇다면, real-time에 흡사하는 정도의 라이브 스트리밍 format은 무엇이 있을까요?
바로 WebRTC입니다.
한마디로 웹 브라우저만 있으면, 별도의 설치 없이 리얼타임 커뮤니케이션이 가능할 수 있게 만들어주는 기술입니다.
실제 이러한 장점때문에, HyperConnect, Discord등이 WebRTC를 사용하고 있습니다.
WebRTC는 기존의 Web 2.0에서 나아가, 서버와 같은 중간자를 거치지 않고 브라우저 간을 P2P로 연결하는 기술입니다. 사실 우리가 종종 볼 수 있는 화상 통화와 실시간 스트리밍, 화면 공유 등이 WebRTC 기술을 기반으로 하고 있습니다.
P2P기술을 기반으로 하고 있어 중개 서버를 따로 거치지 않기 때문에 빠른 속도가 보장되며 HTTPS가 강제되기 때문에 보안이 보장됩니다.
그렇다면 WebRTC는 어떻게 동작할까요?
WebRTC가 동작하기 위해서는
P2P(Peer To Peer) 즉, 피어끼리 연결이 되어야 하는데요,
피어끼리 연결이 되기 위해서는 서버가 필요합니다.
??서버? P2P면 서버가 필요 없는 것 아닌가요?
물론 그렇게 생각하실 수 있습니다.
하지만 피어끼리 연결을 하기 위해선 피어끼리의 정보를 교환해야하는데요
그런 정보를 교환하기 위해서 서버가 필요한 것이죠!
예를들면 서로의 정보를 교환하기 위해 연락처 교환을 하는 것 처럼 말이죠
그러면 서버로 피어간에 정보만 전달 시키면 되는 것인가요?
이론적으로는 맞아요!
하지만 집에서 인터넷을 하는 사람들 대부분 공유기를 가지고 있어요.
이는 공인 IP를 분산시켜 여러 포인트에서 이용하기 위함인데요. 대부분의 가정집에서는
NAT(공유기)를 사용합니다.
따라서 서버에서 공유하는 피어간의 정보(공인 IP)를 얻기 위해서는
STUN서버, STUN으로 해결하지 못하는 경우 TURN 서버가 필요합니다.
이런식으로 말이죠
만약 위의 과정이 다 됐다면, 실제로 각 피어끼리의 연결이 완성된거랍니다!
그렇다면 이런 실시간 커뮤니케이션의 WebRTC의 장단점은 무엇이 있을까요?
앞서 챕터0에서 말씀드린 것처럼 스트리밍 서비스에는 다음과 같은 Trade Off가 있습니다.
WebRTC는 Near RealTime Communication이 가능한 만큼 Scale등이 작을 수 밖에 없다는 것을 알 수 있습니다.
따라 twitch나 아프리카 방송처럼 몇십만명이 동시간적으로 들어오는 스트리밍 서비스에선
WebRTC가 어울리지 않겠죠?
추가적으론 다음과 같은 장/단점이 있어요
브라우저는 여러 수신 스트림을 동기화할 수 없으므로 그룹 오디오 또는 비디오 회의를 실행하려면 오디오 및 비디오 믹싱을 위한 화상 회의 서버가 필요합니다.
WebRTC 솔루션은 서로 호환되지 않습니다. 이 표준은 일반적으로 비디오 및 오디오 전송 방법에만 적용되는 반면 공급업체는 신호, 메시징, 파일 전송, 회의 일정 등을 자유롭게 결정할 수 있습니다.
그룹 회의 믹싱 및 트랜스코딩에는 많은 컴퓨팅 리소스가 필요합니다. WebRTC에 대한 그룹 화상 회의 지원에는 일반적으로 유료 구독(클라우드 솔루션의 경우) 또는 대규모 인프라 투자가 필요합니다. 각 회의 레이아웃에는 일반적으로 서버에 하나 이상의 논리적 CPU 코어가 필요하기 때문입니다.
하지만 P2P연결에서는 WebRTC가 브라우저(웹)을 통해 연결하는 것이므로 WebRTC가 범용적으로 사용되기 위해서는 다양한 브라우저에서 접속하는 유저들에게 동일한 경험을 제공하는 것입니다.
때문에 WebRTC에서 큰 단점 중 하나가 브라우저와 플랫폼 간 호환성 문제입니다.
[Reference]