2014년 2월 24일 월요일

[튜토리얼/한글화] WebRTC 데이터채널: 고성능 데이터 교환을 위한 WebRTC 데이터 채널(WebRTC data channels: WebRTC data channels for high performance data exchange)

HTML5Rocks에 +Dan Ristic의 'WebRTC 데이터채널: 고성능 데이터 교환을 위한 WebRTC 데이터 채널(WebRTC data channels: WebRTC data channels for high performance data exchange)' 튜토리얼의 한글 버전이 업데이트되었습니다.

이번 번역은 한순보님께서 수고해주셨습니다. :)

"WebRTC는 종종 화상 회의와 같은 미디어 통신을 위한 규격처럼 인식되는 경우가 있으나 그렇지 않습니다. 화상회의와 같은 것은 WebRTC의 P2P 통신과 mediaCapture()이 결합된 좋은 사례 중 하나일 뿐이죠. WebRTC는 근본적으로 P2P를 기반으로 하는 데이터 전송 메커니즘입니다. 이는 파일 전송뿐만이 아니라 P2P를 기반으로하는 멀티플레이어 게임에도 유용합니다. RTCDataChannel은 파일 공유, 멀티플레이어 게임, 콘텐츠 전송을 위한 앱을 만드는 새로운 방식이며 이를 사용하여 낮은 지연 시간을 가지는 고성능 네트워크 어플리케이션을 제공할 수 있습니다. RTCDataChannel의 출현은 브라우저에서 데이터의 통신 방식 중 많은 부분들을 바꾸게 될 것입니다."


TL;DR;


커뮤니케이션, 게임, 혹은 파일 전송을 위한 두 브라우저 간의 데이터 전송은 상당히 복잡한 과정일 수 있습니다. 우리에게는 WebSocket, AJAX, 그리고 Server Sent Events가 있지만 근본적으로 서버를 통한 통신 모델로 디자인되었습니다. 데이터를 중계(relay)하기 위해 서버를 설정하고 비용을 내야 하며, 아마도 이를 여러 데이터 센터로 확장할 필요가 있습니다. 이 시나리오는 높은 지연 시간(latency)의 가능성이 있고, 데이터를 비공개로 유지하는 것이 어렵습니다.

한 피어(peer)에서 다른 곳으로 직접 데이터를 전달하기 위해 WebRTC의 RTCDataChannel API를 사용하는 것은 P2P(peer-to-peer) 연결을 가능하게 하여 중개 서버가 없고 '홉(hops)'이 적어 지연 시간을 더 줄일 수 있습니다.

> WebRTC DataChannel의 특성


RTCDataChannel API는 웹소켓을 완전히 모방하여 디자인되었을 뿐만 아니라  문자열, Blob, ArrayBuffer 그리고 ArrayBufferView와 같은 일부지만 유용한 자바스크립트 바이너리 타입을 지원합니다. RTCDataChannel은 다음과 같이 UDP와 유사한 '신뢰성 없는 모드'와 TCP과 유사한 '신뢰성 있는 모드' 둘 중 하나로 동작할 수 있습니다.

[출처: +Ilya Grigorik 'High Performance Browser Networking']
신뢰성 있는 방식은 메시지 전송과 메시지가 전달되는 순서를 보장하지만 추가적인 오버헤드가 있으며 신뢰성 없는 방식은 모든 메시지가 상대편에 도달하는지와 어떤 순서로 도달하는지를 보장하지 않는 대신 오버헤드를 제거합니다

시그널링이 일어난 전후에 이미 설정한 피어 연결로부터 dataChannel 오브젝트를 생성하고 옵션을 설정하여 데이터 채널의 신뢰성 등을 설정할 수 있습니다. RTCDataChannel은 연결이 되거나, 끊기거나, 에러가 발생할 때와 다른 피어에서 메시지를 받았을 때 이벤트를 발생하도록 할 수 있습니다.

> 안전성


암호화(Encryption)는 WebRTC 요소의 기본 사항입니다. RTCDataChannel을 사용하면 모든 데이터가 데이터그램 전송 계층 보안 (Datagram Transport Layer Security, DTLS)을 사용하며 WebRTC를 지원하는 모든 브라우저가 DTLS를 내장하고 있으므로 추가적인 구현없이도 안전한 데이터 송수신을 가능하게 합니다.


이 튜토리얼은 WebRTC 데이터 채널을 설정하고 사용하는 기본적인 방법뿐만 아니라 오늘날 웹에서의 일반적인 사용 사례를 다루고 있습니다. 자세한 내용은 튜토리얼은 참조하시기 바랍니다. :)

번역 링크


참조 링크