webRTC란

pds·2023년 1월 11일
0

TIL

목록 보기
30/60

항해 최종프로젝트를 하면서 webRTC로 사용자들 간 영상/음성 연결을 구현하게 되었다.

전혀 처음들어보았던 기술이라 간단하게 어떤 것인지 알아보는 시간을 가졌다.


WebRTC(Web Real-Time Communication)

웹 브라우저 상에서 플러그인 없이 음성, 영상, 데이터를 실시간으로 주고받을 수 있게 하는 기술

어떤 소프트웨어나 플러그인 없이도 브라우저 상에서 음성, 영상, 파일같은 데이터를 사용자들간 주고받을 수 있게 해주는 기술이다.


핵심 개념

Peer to Peer

webRTC는 서버를 거치지 않고 브라우저 간 직접적인 통신이 가능하게 해주는데 이를 통해 빠르고 안정적인 통신이 가능해진다.

연결을 하려는 브라우저가 P2P 연결에 동의하고 상대방과 주소를 공유해 멀티미디어 데이터를 실시간으로 교환할 수 있게 해준다.

하지만 P2P연결을 위해 필요한 과정들이 있다.

브라우저들 간 연결이기 때문에 어떤 서버같은 것이 있는 것이 아니라 연결을 위해 필요한 어떤 동작을 처리해주는 서버가 결국 필요하다.


Signaling

그렇다고 서버가 아예 없어도 되는 것은 아니다. webRTC연결이 되기 전 필요한 과정이 있다.

Peer to Peer 통신을 위해 브라우저 사이에 메시지 교환을 해야하는데 이를 위해 Signaling이 필요하다.

Signaling은 P2P 통신을 위한 상호작용을 제공하는 기술로, 메시지 교환에 사용되는 WebSocket, HTTP, XMPP 등의 프로토콜을 이용합니다.

Peer connection 통신에 사용해야되는 프로토콜, 채널, 미디어 코덱 등 장치들 간 필요한 제어 정보를 교환하는 과정이다.

시그널링을 위해 시그널링 서버가 필요하며 일반적으로 웹소켓 서버가 활용된다.

시그널링 서버를 통해 아래에 기술할 여러 정보들을 사용자들 간 교환하게 하여 P2P연결을 수립한다.


MediaStream

브라우저의 오디오, 비디오, 데이터 등을 담는 스트림 객체로 webRTC가 이를 캡쳐 해 스트림으로 전송할 수 있다.

따라서 P2P 연결 전 클라이언트의 미디어스트림 정보를 얻어야 한다.


Session Description Protocol

Session Description은 Peer간 통신을 위해 필요한 세션 정보를 담고 있는 데이터 형식이다.

클라이언트에서 Session Description Protocol을 사용해 로컬 미디어스트림 정보를 생성한다.

여기에는 미디어 유형, 코덱 및 여러 기타 세션 정보가 포함된다.

SDP를 통해 세션 정보를 교환하고 Peer간 미디어 스트리밍을 가능하게 해준다.

사용자 MediaStreamSDP 를 통해 얻어 Signaling하여 다른 상대에게 전달하는 것이라고 이해했다.


NAT Traversal

WebRTC는 NAT(Network Address Translation) 방화벽 뒤에 있는 디바이스들 간의 통신을 지원한다.

연결을 시도한 클라이언트의 로컬 네트워크의 Private IP 주소를 공인 IP 주소로 변환하여 인터넷 상에서 P2P 연결을 가능하게 해준다.

누구인지 찾아내 연결을 할 수 있는 주소로 변환해 연결을 수립해야 한다는 것이다.

이를 가능하게 해주는 서버가 있다.


TURN, STUN

STUN(Session Traversal Utilities for NAT)

STUN서버 는 브라우저의 공인 IP주소와 포트 번호를 확인해 찾는 역할을 한다.

이를 위해서 브라우저는 STUN 서버에게 STUN request를 보내고 STUN 서버가 이를 수신하여 응답 메시지를 보낸다.

TURN(Traversal Using Relay NAT)

TURN 서버는 NAT환경에서 P2P 연결이 어려울 때 중계 서버 역할을 수행해 P2P 연결을 지원한다.

연결을 하는 Peer들이 직접적으로 통신하는 것이 아니라 TURN 서버를 경유한다.

서버를 통해 브라우저 간 데이터가 전달되는 형태라 중계를 통한 대역폭이 소모되고 지연이 있을 수 있어 보안 문제 등으로 연결이 되지 않을 때 사용되게끔 해야한다.


ICE(Interactive Connectivity Establishment)

클라이언트들이 P2P연결이 가능하게 하도록 최적의 경로를 찾아주는 기술

ICE는 STUN과 TURN 서버를 이용하여 NAT Traversal을 수행하는 기술입니다. ICE는 로컬 및 리모트의 NAT 타입과 환경을 분석하고, STUN과 TURN 서버를 우선순위에 따라 선택하여 P2P 연결을 수립합니다.

Candidate

NAT Traversal(STUN, TURN서버)로 획득한 IP주소와 프로토콜, 포트의 조합으로 구성된 연결 가능한 네트워크 주소들

이들 중 가장 최적의 주소가 클라이언트 간 P2P 연결을 위해 선택된다.


굉장히 많은 것들이 필요해보인다. 요약하면 다음과 같은 과정을 거친다.

(1) 클라이언트가 미디어 스트림을 받아 webRTC API를 사용해 로컬 미디어 스트림을 생성한다.

(2) SDP를 사용해 로컬 미디어 스트림을 생성해 시그널링 서버로 전달한다.

(3) 상대방(다른 Peer)은 받은 SDP를 사용해 원격 미디어 스트림 정보를 생성하고 본인의 SDP를 응답으로 보낸다.

(4) ICE 프레임워크를 통해 NAT Traversal로 연결을 위한 최적의 네트워크 주소 정보를 수집하고 Ice Candidate로 변환한다.

(5) 각 클라이언트는 생성된 ICE Candidate를 다른 Peer에게 전송하고 수신한 Candidate를 처리한다.

(6) 두 클라이언트는 적절한 ICE Candidate를 사용해 P2P연결을 시도하고 성공하면 로컬 / 원격 미디어 스트림이 상호간 교환된다.

profile
강해지고 싶은 주니어 프론트엔드 개발자

0개의 댓글