
webRTC
webRTC(Web Real Time Communication)이란 웹 브라우저에서 실시간 커뮤니케이션을 가능하게 해주는 기술이다.
구글에서 개발되었으며 Client의 브라우저가 서로 연결됨으로써 별도의 서버를 경유하지 않고 데이터를 송수신 할 수 있다.
자바스크립트 API의 조합인 webRTC는 P2P(Peer To Peer Connection) 연결 방식을 사용한다.
핵심 API
P2P
기존의 서버와 클라이언트가 데이터를 송수신하는 과정과는 본질적으로 다른 구조를 가지고 있다.
중앙 서버 없이 관련 프로그램에 접속돼있는 단말 또는 사용자들끼리 실시간으로 데이터를 공유할 수 있는 연결 방식이다.
구현 방식
- 하이브리드 (Hybrid)
기존 서버와 클라이언트의 구조와 동일하다.
중앙 서버가 존재해 중개 및 검색 기능을 제공하고 데이터 송수신은 피어들 간 이루어진다.
중앙 서버가 존재해 검색 성능이 빠르지만 규모가 커질수록 서버에 가해지는 부하가 늘어나며 서버가 죽으면 전체 네트워크가 죽는다. - 퓨어 (Pure)
중앙 서버를 사용하지 않는 방식이다.
네트워크에 사용자는 동일하게 서버와 클라이언트의 역할을 겸하고 검색과 데이터 송수신에 있어 동일한 수준의 책임을 가진다.
중앙 서버가 없으므로 부하 증가 시 비용이 발생하지 않고 네트워크가 죽는 일이 거의 없다 하지만 중앙 서버가 없어 검색 시 모든 네트워크의 컴퓨터를 검색하므로 성능 저하가 발생할 수 있다. - 슈퍼 (Super)
하이브리드와 퓨어 방식의 장점을 결합 한 방식이다.
중앙 서버 역할을 하는 슈퍼 피어들을 여러 개 배치해 네트워크를 구성한다.
중앙 서버가 존재해 검색 성능이 빠르고 하나의 서버가 죽더라도 다른 서버로의 대체가 가능하다.
이론적으로 슈퍼 피어 방식 네트워크를 구성하는 건 매우 어렵고 관련 자료도 많지 않다.
webRTC 작동 원리
크게 Signalling, Connecting & Securing, Communicatiioning 총 3단계 과정을 거쳐 서로 간의 브라우저가 연결된다.
(브라우저가 서로 간의 스트림(Stream)을 전송하여 양방향 통신을 가능하게 하는 HTML5 API를 사용한다)
실시간 통신을 위해 필요한 사항
- 기기의 스트리밍 오디오 비디오 데이터 정보
- 소통하고자 하는 기기의 네트워크 정보(아이피 포트 등)
- 에러 보고와 세션 초기화를 위한 신호 통신 정보
- Capability 정보(해상도 코덱 등)
Signalling
사용자가 중간에 Signalling 서버를 통해 서로 자신의 데이터(영상/오디오 등)를 담아 서로 전달받는 과정을 의미한다.
발신자(Caller)가 수신자(Callee)에게 연결 여부(Offer&Answer)를 묻게 된다.
- 발신자는 getUserMedia를 통해 자신의 미디어 정보 생성
- addStream을 통해 스트림 생성
- createOffer를 통해 offer 생성
- setLocalDescription을 통해 내 컴퓨터에 저장 후 Signalling 서버에 offer 전송
- 수신자는 발신자가 보낸 offer를 setRemoteDescription을 통해 자신의 컴퓨터에 저장
- 수신자는 초기 발신자가 수행했던 과정(5~8)을 거쳐 Signalling 서버에 answer 전송
SDP(Session Description Protocol)
피어들 간 송수신되는 콘텐츠 규격의 표준으로 멀티미디어, 해상도, 형식. 코덱 암호화 방법 등의 메타 데이터

Connecting & Securing
Signalling을 통해 브라우저 간 연결을 수립했다면 Connecting & Securing 과정을 통해 네트워크 간 연결을 수립한다.
보통 사용자는 공유기(Network Address Translation)를 사용한다.
이 경우 서로의 컴퓨터가 서로 가능한 최적의 방법을 찾는 기술 ICE(Interactive Connectivity Establishment) Candidate에 정보 공유를 위해 STUN과 TURN 서버를 사용한다.
- STUN (Session Traversal Utilities for NAT)
자신의 접근 가능한 공개 아이피와 포트 번호를 알아내는 작업이다.
P2P IP 연결을 위해 정보를 제공하며 연결이 실패할 경우 TURN 서버를 사용한다. - TURN (Traversal Using Relays around NAT)
피어들 간 통신이 실패할 경우 피어들 간의 미디어 스트리밍을 릴레이 한다.
공용 주소를 가지고 있으며 릴레이 시 네트워크 비용과 컴퓨터 자원이 소모된다.
Communicatiioning
Signalling, Connecting & Securing 과정 종료 후 MediaStream을 통해 피어들 간의 통신이 이루어진다.
webRTC 장점
참고 자료
https://www.wowza.com/blog/what-is-webrtc
https://blog.naver.com/PostList.naver?blogId=kpoint01
https://velog.io/@wnduf8922/etc-WebRTC%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
https://ko.wikipedia.org/wiki/P2P
'네트워크' 카테고리의 다른 글
사용자(클라이언트)를 식별하는 네트워크 헤더 (1) | 2023.10.10 |
---|---|
동기와 비동기 블로킹과 논 블로킹 (0) | 2022.11.02 |
OSI 7 Layer (0) | 2022.10.09 |
URI URL (0) | 2022.10.05 |
JWT (0) | 2022.09.25 |