WebRTC Data Channel이 뭔데?
처음 회사에서 프로젝트를 진행할때 만해도 WebRTC를 동영상 스트리밍 용도로 사용하고 채팅은 4 Layer단의 TCP 소켓을 이용하거나 Web Socket을 사용하여 구현할 예정이었다.
그러나 이번 프로젝트의 주 맥락이 WebRTC이고 자체로 영상이 아닌 Data를 전송할 수 있는 DataChannel을 지원한다. WebRTC는 당연히 UDP위에서 동작하기 때문에 UDP로 동작한다. WebRTC 프로토콜의 스택은 다음 그림과 같다.
따라서, WebRTC를 통해서 Peer to Peer 로 동작하는 데이터 전송 방식이라고 생각하면 된다.
Data Channel과 다른 전송 채널과의 차이
일반적으로 생각하고 있는 Web Socket 방식은 TCP위에서 작동되며 보통 Client to Server 구조로 동작하기 위해 디자인 되어있다.
하지만, WebRTC 기술은 애초에 만들어 지기를 UDP Layer위에서 작동하고 P2P를 위해 디자인 된 기술이다.
중간의 서버의 중계가 없기 때문에(단, 시그널링을 위한 서버는 당연히 필요) 더 빠론 속도로 작동하게 된다. 또한 SCTP(Stream Control Transmission Protocol)을 이용하여 일반적인 UDP와는 달리 비순차 전송, 재전송과 같은 설정가능한 전송 시멘틱스를 허용한다)
특징
문자열 뿐만 아니라 Blob, ArrayBuffer, ArrayBufferView와 같은 JS의 바이터리 타입의 일부를 지원한다.
따라서, 게임이나 파일전송에서 유용하게 사용할 수 있다.
위에서 설명한 SCTP와 다른 프로토콜의 비교가 된 표는 아래에 있다.
-----------------------------
하지만 우리가 만들고자 하는 서비스는 1:1의 동영상 서비스가 아닌 1:M의 동영상 스트리밍 서비스이기 때문에 이를 구현하기 위해 중간에 Media Server를 두어 구현하는 방법은 다음 글에 정리하도록 한다.
참고자료
www.html5rocks.com/ko/tutorials/webrtc/datachannels/
tools.ietf.org/html/rfc4960#section-1.2
enro2414-40667.medium.com/a-simple-rtcdatachannel-sample-2d89022b57e4
이상한 점이나 틀린점이 있다면 댓글로 달아주세요!
'Stove Dev Camp' 카테고리의 다른 글
Spring-boot "Handshake failed due to invalid Upgrade header: null" Error (Spring boot Websocket 연결 에러) (0) | 2021.02.01 |
---|---|
SCTP 프로토콜(기존 프로토콜 TCP, UDP)(1) (0) | 2021.01.25 |
WebRTC란? (STUN과 TURN 서버의 이해) (2) (3) | 2020.12.29 |
WebRTC란? (1) (0) | 2020.12.22 |
Project #2 Authorization (0) | 2020.12.22 |