Intro
이번 공통 프로젝트의 주제인 WebRTC에 대해 이해해보자.
Main
WebRTC
Web Real-Time Communication
웹, 앱(안드로이드, iOS)에서 별 다른 소프트웨어 없이, 카메라, 마이크 등을 사용해서 실시간 커뮤니케이션을 제공해주는 기술
- 화상통화, 화상공유 등을 구현할 수 있는 오픈소스
- 비디오, 음성 및 일반 데이터가 P2P방식으로 전송되도록 지원
P2P (Peer to Peer)
: 중앙 서버를 거치지 않고 클라이언트 컴퓨터끼리 직접 통신 - JavaScript API로 제공
장단점
장점
-
Latency가 짧다
RTMP보다 낮은 Latency로 거의 지연시간 없는 real-time과 비슷한 방송 가능
- 별다른 소프트웨어 없이 실시간 커뮤니티 가능
- 개발하는 데 있어 진입장벽이 낮음
- 무료 !
단점
-
크로스 브라우징 문제
사람들이 잘 사용하지 않는 브라우저나, 최신버전을 사용하지 않은 사용자는 사용이 불가능하다는 단점이 있음.
Internet Explorer는 지원 불가 !!
-
STUN/TURN 서버 필요
P2P 통신을 하기 위해서는 사용자 IP 주소를 알아야 한다
STUN/TURN
일반적으로 우리가 사용하는 인터넷 네트워크에는 방화벽이 존재하며, NAT기반의 서로 다른 네트워크 상의 서버, 호스트 등이 일부 내부 네트워크를 통해 서로를 매핑하는 방식을 이용하여 통신한다.
WebRTC는 시그널링을 통해 P2P 방식으로 통신한다. 방화벽 뒤에 숨겨진 네트워크에 속한 클라이언트 Private IP 간의 통신은 불가능한 경우가 발생하며, 이 때 STUN 또는 TURN 서버를 활용하여 통신문제를 해결할 수 있다.
NAT
Network Address Translation
Private IP를 Public IP로 일대일 대응시켜 변환하는 장치
- IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술
- 패킷에 변화가 생기면 IP나 TCP/UDP의 체크섬(checksum)도 다시 계산되어 재기록되다 보니, 네트워크 성능에 영향을 줄 수밖에 없다.
- 여러대의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위해 자주 쓰임
- 내부 네트워크에서 사용하는 IP 주소와 외부에 드러나는 주소를 다르게 유지 ⇒ 내부 네트워크에 대한 보안 기능 (방화벽과 비슷)
현대의 네트워크 세상에선 NAT와 방화벽을 제외하고는 설명될 수 없다.
그러나 WebRTC 통신은 P2P 방식으로 서로 데이터를 주고받아야 하기에, 보내고 받는 Peer의 정보(Public IP)를 알고있어야 하므로 NAT환경에서 문제가 많다.
이를 STUN과 TURN 서버를 사용해서 해결 가능하다.
STUN
Session Traversal Utilities for NAT
클라이언트의 Public IP를 확인하여 시그널링 수행 지원
- UDP 프로토콜 기반
- 이번 프로젝트에서는 Kurento 미디어 서버를 Signaling Server로 활용
TURN
Traversal Using Relays around NAT
서로 다른 NAT 또는 방화벽 뒤에 있는 클라이언트가 NAT 또는 방화벽을 순회하며 중개서버를 통해 데이터를 송수신하는 방식
- STUN에서 확장된 개념
- Private IP 내 각 Peer 들은 Public 망 내에서 미디어 스트리밍 릴레이 역할을 하는 TURN 서버를 경유하여 통신 진행