WebRTC

이건희·2023년 8월 18일
0

Eyeve Project

목록 보기
1/10

이번 프로젝트의 핵심인 WebRTC이다. 메인 기능이 화상 강의, 채팅이기 때문에 필수로 알아야하지만 처음 들어보고 접해보아서 여러번 찾아 보았지만 아직 개념이 확실하지 않다. 정리해두고 프로젝트 동안 계속해서 보자.


WebRTC 개념과 동작 방식

간단히 말하면 별도의 설치나 플러그인 없이 실시간 소통을 가능하게 해주는 기술이다.
기본적으로 P2P(Peer to Peer) 방식이라 이론상으론 별도의 서버 없이 클라이언트끼리 연결해 통신이 가능해야하지만 어디까지나 이론상이고 실제론 서버라고 하는 것이 필요하다. 한번 이에 대해서 알아보자.


Signal Server

P2P 연결을 위해선 보내고 받는 Peer의 정보를 알아야 한다. 이때 Signal Server가 WebRTC 통신이 시작되기 전에, 두 웹 브라우저간 정보 교환을 돕는 중개자 역할을 한다.
중요한 점은 Signal Server는 연결의 중개자 역할만 하지 Signal Server를 통해 비디오나 채팅 같은 데이터를 주고 받지는 않는다는 것이다.

동작 방식

1. 연결 요청 : 한 사용자가 다른 사용자와 통신을 시작하려면, Signal Server를 통해 연결 요청을 보낸다.

2. SDP(Session Description Protocol) 교환 : 두 사용자가 서로의 미디어 포맷, 네트워크 정보 등을 공유하기 위해 SDP 데이터를 주고 받는다.

3. ICE(Interactive Connectivity Establishment) 후보 수집 : 각 사용자의 네트워크 상태와 가능한 모든 IP 주소 및 포트 번호를 찾아 ICE 후보로 만들어 교환한다.

4. NAT Traversal : 외부 네트워크(public)와 내부 네트워크(private) 사이에서 웹 브라우저가 올바르게 통신할 수 있도록 돕는다.

여기서 SDP, ICE 등 모르는 용어들이 많이 나온다. 한번 정리하고 넘어가자.

필수 용어

SDP

SDP는 세션 연결 정보를 주고받는 표준화된 형식이다. WebRTC에서는 피어 간 오디오, 비디오 코덱 정보, IP 주소 및 포트 번호를 포함한 연결 관련 데이터를 교환하는 데 사용된다. Signal Server는 이 SDP 정보를 피어들 사이에 전달하여 서로의 통신 가능한 코덱과 연결 정보를 확인할 수 있도록 한다.

ICE

ICE 프로토콜은 P2P 연결을 만들기 위한 최적의 경로를 찾는 프로세스를 표준화한 것이다. ICE는 로컬과 공인 IP 주소, STUN 서버를 통해 확인된 IP 주소, TURN 서버를 통한 중계 IP 주소 등 다양한 후보를 활용하여 최상의 연결 경로를 도출한다. 이러한 ICE 후보 정보는 SDP와 함께 교환되며, 각 피어가 상대방에게 도달 가능한 경로를 확인하는 데 사용된다.

즉, STUN, TURN 서버를 이용해 ICE 후보(Candidate)를 알아내고 이를 Signal 서버를 통해 전달하여 최종 연결한다.

NAT Traversal

NAT Traversal은 NAT(Network Address Translation) 방화벽을 넘어 피어간의 직접적인 연결을 가능케 하는 과정이다. 일반적으로 NAT는 다수의 사설(private) IP 주소를 하나의 공인(public) IP 주소로 변환하므로, 피어간의 직접 통신을 차단할 수 있다. 이 문제를 해결하기 위해 WebRTC에서는 ICE 프로토콜을 활용하여 네트워크 상황과 방화벽 타입에 따라 다양한 연결 방법(STUN 또는 TURN 서버 이용 등)을 시도한다.

즉, Signal Server를 통해 Peer들간 연결 정보(Candidate: 후보, SDP)를 교환하며, 이는 양방향 통신을 지원하는 WebSocket으로 구현하는 것이 효과적이다.


STUN Server

일반적으로 집이나 회사 같은 사설 네트워크에서는 사설(private) IP 주소를 사용하고, 인터넷과 연결할 때 공인(public) IP 주소가 필요하다. 이때 NAT 장비(보통은 라우터)가 사설 IP와 공인 IP 간 통신을 중계해주는 역할을 한다. 하지만 이러한 구조 때문에 P2P 방식의 통신이 어려울 수 있다. 왜냐하면 P2P 방식은 사용자가 직접 연결 되어야 하는데, NAT 때문에 각자의 내부와 외부 IP 정보가 다르기 때문이다.

STUN 서버를 사용하면 사용자들이 자신의 공인 IP와 포트 정보를 알아낼 수 있다. 이렇게 알아낸 정보를 상대방에게 전달하여 P2P 통신을 가능하게 한다.

위 그림에서처럼 STUN Server를 이용해 자신의 공인 IP 주소를 알 수 있다.


TURN Server

STUN 서버를 사용하면 자신의 공인 IP 주소를 알아내어 P2P 연결을 할 수 있다고 하였다. 하지만 모든 경우에서 자신의 공인 IP 주소를 알 수 있는 것은 아니다. Symmetric NAT(연결마다 공인 IP와 포트를 바꾸는 방식 - 외부와 통신 할때마다 IP와 포트번호가 변경된다) 같은 상황에선 연결이 어려울 수 있다. 이런 상황에서 TURN Server를 사용한다.

TURN Server는 이러한 Symmetric NAT 상황 같이 특별한 상황일 때 사용하며 Symmetric NAT 제약 조건을 우회한다. TURN Server는 모든 데이터 송수신을 중계한다.

하지만 이렇게 모든 데이터 송수신을 중계하는만큼, 서버가 부담하는 오버헤드가 커져 지연 시간이 증가하고 대역폭 사용이 증가하며, 유지 관리 비용이 증가하게 된다. 따라서 서버의 용량과 성능이 뒷받침 되어야 하고, STUN 서버로 연결이 되지 않을때 마지막 보류로 사용하는 것이 좋다.


지식 참고 : wrtn.ai
사진 출처 : STUN Server, TURN Server

profile
백엔드 개발자가 되겠어요

0개의 댓글