2014년 3월 26일 수요일

[튜토리얼/한글화] WebRTC 시작하기(Getting started with WebRTC)

HTML5Rocks에 +Sam Dutton의 'WebRTC 시작하기(Getting Started With WebRTC)' 튜토리얼의 한글 버전이 업데이트되었습니다. 이번 번역은 이원제(+nuri nam)님께서 수고해주셨습니다. :)

"말그대로 WebRTC는 웹을 위한 실시간 통신 규격입니다. 이는 오디오나 비디오 스트림을 P2P로 송수신하는 것뿐만이 아니라 데이터 전달을 위한 메커니즘을 포함하고 있습니다. 대다수의 서비스들은 클라언트-서버 간의 데이터 통신을 통해 기능을 제공하고 있지만 어떤 경우는 클라이언트 간의 빠른 데이터 교환이 주요 기능 구현 사항이 되기도 합니다. 바로 이러한 경우 WebRTC는 중요한 기반 기능을 제공합니다. 뒤집어 얘기하자면 서버를 중계할 이유가 없으며 클라이언트 간의 데이터를 빠르게 송수신하고자 한다면 WebRTC는 좋은 선택이 될 수 있습니다. WebRTC의 다양한 구현 사례를 보기 전에 이 튜토리얼을 통해 WebRTC가 어떠한 것이고 어떻게 사용하는지를 확인해보시기 바랍니다."


TL;DR;


현재 웹의 주요 도전 과제 중에 남은 하나는 실시간 대화(Real Time Communication, RTC) 가능하게 하는 것입니다. 많은 웹서비스들이 이미 실시간 통신을 사용하고 지만 네이티브 앱이나 플러그인들의 다운로드가 필요했습니다. 이제 HTML5에서 플러그인 없는 실시간 통신을 위한 규격인 WebRTC는 현재 크롬, 오페라, 파이어폭스에서 가능하며 WebKitGTK+ 와 Qt 네이티브 프레임워크에도 통합되어 있습니다.

WebRTC 어플리케이션이 취하는 일반적인 기능은 다음과 같습니다.

  • 스트리밍 오디오, 비디오 또는 데이터의 획득
  • 네트워크 정보의 획득 및 다른 WebRTC 클라이언트들과 정보 교환
  • 에러들의 보고, 세션 초기화/종료를 위한 Signal 통신 관리
  • 미디어와 클라이언트의 지원 기능(해상도와 코덱 등)에 대한 정보 교환
  • 스트리밍 오디오, 비디오, 데이터의 송수신



apprtc.appspot.com의 WebRTC 통신 및 일반 통신

스트리밍 데이터를 얻고 통신하기 위해 WebRTC에서는 다음과 같은 API를 제공합니다.

  • (getUserMedia라고도 하는) MediaStream - 카메라/마이크 등 데이터 스트림 접근
  • RTCPeerConnection - 암호화 및 대역폭 관리 및 오디오 또는 비디오 연결
  • RTCDataChannel - 일반적인 데이터 P2P통신


> MediaStream


MediaStream API는 미디어의 동기화된 스트림들을 말합니다. 예를 들어, 카메라와 마이크의 입력에서 받아온 스트림은 오디오와 비디오 트랙들로 동기화 됩니다. getUserMedia()는 반드시 로컬 파일 시스템이 아닌 서버에서 사용되어야 합니다.


> 시그널링(Signaling)


WebRTC 클라이언트로 사용되는 웹 브라우저들 사이에 스트리밍 데이터를 주고 받기 위해 RTCPeerConnection를 사용하며 통신을 조율하고 조장할 메세지를 주고 받기 위해 시그널링(Signaling)으로 알려진 일련의 과정이 필요합니다. 시그널링(Signaling)은 RTCPeerConnection API에 포함되지 않지만 WebRTC 개발자들은 SIP, XMPP 또는 적절한 쌍방통신 채널 등 자신들에게 편한 방식을 선택할 수 있습니다.


> RTCPeerConnection


RTCPeerConnection은 Peer들 간의 데이터를 안정적이고 효율적으로 통신하게 처리하는 WebRTC 컴포넌트입니다. JavaScript 측면에서 보면 RTCPeerConnection는 WebRTC에서 사용되는 엄청나게 많은 일들을 개발자가 신경쓰지 않을 수 있도록 많은 기능을 백그라운드에서 지원하고 있습니다. 실제로 WebRTC는 서버가 필요하지만 단순합니다.


> RTCDataChannel


오디오와 비디오처럼, WebRTC는 실시간으로 다른 형태의 데이터 통신도 지원합니다. RTCDataChannel API는 피어와 피어간 임의의 데이터 교환을 빠른 반응속도와 높은 처리량으로 가능하게 합니다. 이 API를 이용하여 게임이나 원격 데스크탑 어플리케이션, 실시간 채팅, 파일 전송, 분산 네트워크 등으로의 응용이 가능합니다.

RTCDataChannel API는 RTCPeerConnection의 대부분의 기능들을 활용하여 강력하고 유연한 P2P통신을 가능하게 하는 몇가지 기능을 가지고 있으며 통신은 브라우저간 직접 연결됩니다 , 그래서 RTCDataChannel은 WebSocket보다 매우 빠릅니다. 심지어 방화벽과 NAT의 방해로 '구멍내기'가 실패하여 중계(TURN) 서버와 연결이 되더라도 빠릅니다.


> 보안


실시간 통신 어플리케이션이나 플러그인에서 보안 문제가 발생하는 경우가 몇가지가 있습니다. WebRTC는 이 문제들을 피할 수 있는 몇가지 기능들을 가지고 있습니다:


  • WebRTC는 DTLS와 SRTP등의 보안 프로토콜을 사용하여 구현되었습니다. 따라서 암호화는 Signlaing 메커니즘을 포함한 모든 WebRTC Components의 필수 조건입니다.
  • WebRTC는 플러그인이 아니므로 컴포넌트들은 브라우저의 샌드박스위에서 실행되고 별도의 프로세스로 나눠지지 않습니다.
  • 카메라와 마이크에 접근은 반드시 허가를 통합니다.


WebRTC에 대한 자세한 내용은 튜토리얼을 참조하시기 바랍니다.

번역 링크


참조 링크