- WebRTC(Web Real-Time Communication)
웹 브라우저 간에 플러그인(드라이버나 중간자)의 도움 없이 서로 통신할 수 있도록 설계된 기술 이며 음성 통화, 영상 통화, P2P 파일 공유 등으로 활용될 수 있다.- 공식사이트 - https://webrtc.org/
웹 브라우저 기반의 통신 방식인 WebRTC 는 구글이 오픈소스화한 프로젝트에서 기원함.
그 뒤로 국제 인터넷 표준화 기구가 프로토콜 표준화 작업을, W3C 가 API 표준화 작업을 진행하였음.
자바스크릡트 API 를 포함하는 WebRTC 의 주요 구성요소
getUserMedia
오디오와 비디오 미디어를 가져온다(예: 장치의 카메라와 마이크로폰에 접근)
RTCPeerConnection
피어 간 오디오, 비디오 통신을 활성화 한다.
신호 처리, 코덱 관리, P2P 통신, 보안, 대역폭 관리를 수행
WebRTC 에서 두 피어 간의 연결을 설정하고 제어하기 위한 중심점 역할
RTCDataChannel
피어 간 양방향 임의 데이터 통신을 허용한다.
웹소켓과 동일한 API를 사용하며 매우 낮은 레이턴시를 보인다.
또, WebRTC API 는 통계 함수를 포함한다.
getStats
웹 애플리케이션에 webRTC 세션에 관한 통계 집합의 검색을 허용한다.
이 통계 데이터는 별도의 W3C 문서에 기술되어 있다.
WebRTC 는 P2P 방식의 커뮤니케이션이기 때문에 각각의 웹 브라우저는 다음과 같은 절차를 밟아야 한다.
1) 각 브라우저가 P2P 커뮤니케이션에 동의
2) 서로의 주소를 고융
3) 보안 사항 및 방화벽 우회
4) 멀티미디어 데이터를 실시간으로 교환
위 단계에서 2번, 3번 단계가 일반적인 웹 개발의 접근 방법으로 해결하기 어려운데 그 이유는 브라우저는 외부에서 접근할 수 있는 주소가 없기 때문이며 WebRTC 가 P2P 기반이긴 하지만 통신 설정 초기 단계에서는 중재자의 역할이 필요하다.
WebRTC 가 실시간으로 웹에서 데이터를 교환할 수 있는 이유는 시그널링이라고 일컫어지는 NAT 우회과정을 거치기 때문이다.
일반적으로는 라우터가 NAT 역할을 하는데 외부에서 접근하는 공인 IP와 포틉 번호를 확인하여 현재 네트워크 내의 사설 IP 들을 매핑한다.
(특정 브라우저 2개가 서로 직접 통신을 하려면, 각자 현재 연결된 라우터의 공인 IP 주소와 포트를 먼저 알아내야 한다.)
이러한 라우터를 통과해서 연결할 방법을 찾는 과정이 NAT Traversal 이다.
NAT Traversal 은 STUN 과 TURN 서버에 의 해 이루어진다.
현재 TURN 서버는 온라인에서 호스팅되는 애플리케이션 (오픈소스 COTURN 프로젝트 등) 및 클라우드 제공 서비스 등 온라인에서 사용할 수 있는 여러 가지 옵션이 있다.
✔️ STUN 과 TURN
WebRTC 는 P2P 로 디자인되어 있으며 실제 서비스 환경에서 P2P 연결을 위해서는 STURN 서버를 사용해 컴퓨터의 공인 IP 를 가져오고 TURN 서버는 P2P 통신이 불가능 할 경우 릴레이 서버로 동작 함.
서버가 포함된 WebRTC 구조에서 서버의 역할은 다음과 같다
->>>>>>>> 그림추가
1:1, 소규모 미디어 교환에 적합하다
P2P 기반으로 다수의 1:1 통신을 수행함
서버 비용이 들지 않는 장점이 있으나 많은 네트워크 리소스를 사용하게 되고, 실제 사용 환경에서 네트워크 지연으로 인해 쾌적한 도이기화를 제공하지 못하여 현재 대부분의 그룹 영상통화에서는 사용되지 않는 방식이라고 함
한쪽 Peer 에 서버를 두고, 들어오는 트래픽을 서버에서 믹싱해서 다시 내보내는 방식이다. 클라이언트와 네트워크의 부담이 줄어드는 반면, 중앙서버의 컴퓨팅 파워가 많이 요구된다.
믹싱하지 않고 트래픽을 선별적으로 배분해서 보내주는 방식, 각 peer 연결 할당과 encrypt/decrypt 역할을 서버가 담당하며 1:N 스트리밍 구조에 적합
XDN 은 SFU 와 MCU 의 요소를 결합하여 WebRTC 확장에 대한 새로운 접근 방식을 제시한다. SFU 나 MCU 와는 달리 XDN 은 중앙 집중식 서버가 아닌 클라우드 기반 클러스터링 아키텍처를 사용하여 WebRTC 의 확장성 문제를 해결한다.
출처 및 세부비교 - https://alnova2.tistory.com/1118
참고자료
- https://ko.wikipedia.org/wiki/WebRTC
- https://wormwlrm.github.io/2021/01/24/Introducing-WebRTC.html
- https://velog.io/@skyni/WebRTC%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A0%95%EB%A6%AC
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ps9knight&logNo=221329048336
- https://alnova2.tistory.com/1118
- https://millo-l.github.io/WebRTC-%EA%B5%AC%ED%98%84-%EB%B0%A9%EC%8B%9D-Mesh-SFU-MCU/
- https://www.red5pro.com/blog/3-key-approaches-for-scaling-webrtc-sfu-mcu-and-xdn/