WebRTC 웹브라우저로 화상채팅 구현하기

솔다·2023년 2월 3일
0

WEB RTC란?

WebRTC(Web Real-Time Communications)란, 웹 어플리케이션 및 사이트들이 별도의 소프트웨어 없이 음성, 영상 미디어 혹은 텍스트, 파일 같은 데이터를 브라우져끼리 주고 받을 수 있게 만든 기술이다. WebRTC로 구성된 프로그램들은 별도의 플러그인이나 소프트웨어 없이 p2p 화상회의 및 데이터 공유를 한다.

요약하면, 웹 브라우저 상에서 플러그인을 하나도 설치하지 않고 음성채팅, 화상채팅, 데이터 교환까지도 가능하게 하는 기술이다.

Web RTC 통신 원리

Web RTC 기술은 P2P 통신에 최적화 되어있다.
Web RTC에 사용되는 기술은 여러가지가 있지만 크게 분류하면 3가지 클래스에 의해서 데이터 교환이 일어난다.

  • MediaStream - 카메라/마이크 등 데이터 스트림 접근
  • RTCPeerConnection - 암호화 및 대역폭 관리 및 오디오 또는 비디오 연결
  • RTCDataChannel - 일반적인 데이터 P2P 통신

이 3가지의 객체를 통해서 데이터를 교환하며, RTCPeerConnection들이 적절하게 데이터를 교환할 수 있게 처리하는 과정을 Signaling이라고 한다.

위의 그림은 시그널링 하는 과정을 나타낸 것인데, Peer Connection은 두 명의 유저가 스트림을 주고 받는 방식이므로, 연결을 요청하는 자와 연결을 받는 자가 존재한다(Caller/Callee). 콜러와 콜리가 통신을 하기 위해서는 중간에서 다리 역할을 하는 서버가 필요하고 서버를 통해서 SessionDescription을 서로 주고 받아야 한다.

용어정리

Web RTC API를 들여다보기 전에 다른 블로그를 참고하면서 용어들을 미리 공부해두려는 목적으로 용어들을 간략히 정리해보았다.

Stun Server, Turn Server

WebRTC는 P2P에 최적화 되어있다고 앞에서 말했었다. 즉, Peer들 간에 서로 네트워크 주소(IP)를 알아서 데이터 교환을 해야하는데, 이런 연결이 쉽지가 않다. 실제 컴퓨터에는 방화벽등 여러가지 보호장치들이 존재하고 있기 때문이다. 이를 해결 하기 위한게 Stun/Turn Server이다.

STUN (Session Traversal Utilities for NAT)

STUN 은 IETF RFC 5389에 정의된 네트워크 프로토콜/패킷 포맷으로, 네트워크 환경에 대한 Discovery를 위한 것입니다. 메신저들끼리 통신하기 위하여 STUN 패킷을 이용한다. STUN은 IP 종단을 연결하기 위해서

1) 어떤 종단이 NAT/Firewall 뒤에 있는지를 판단하게 해 준다.
2) 어떤 종단에 대한 Public IP Address를 결정하고 NAT/FIrewall의 유형에 대해서 알려준다.

2) 번의 정보를 가지고 P2P IP 연결을 위한 정보를 제공해주는 것이다. STUN은 P2P IP 연결을 위한 정보를 제공 하주기만 할 뿐이며, 어떤 종단의 환경이 P2P IP 연결이 불가능할 경우에는 연결을 위해서 STUN이 해줄 수 있는 것은 없습니다. 어떤 방화벽인 이전에 통신하지 않았던 peer와는 연결을 허락하지 않는 경우도 있는데, 이것이 이에 해당합니다.

이럴 경우 TURN을 이용해야 한다.

TURN
TURN은 Traversal Using Relays around NAT의 약자로, Peer 간 직접 통신이 실패할 경우 종단점들 사이에 데이터 릴레이를 수행하는 TURN 서버들을 사용합니다. 사실상 TURN을 사용하면, P2P라고 보기는 어렵습니다.

TURN 은 Peer 들간의 미디어 스트리밍을 릴레이 하기 위해 사용됩니다. TURN은 공용 주소들을 가지고 있으며 미디어를 릴레이 하기 때문에 네트워크와 컴퓨팅 자원이 소모될 수 있습니다.

보다 자세한 설명은 아래의 링크를 참고하자.
(https://alnova2.tistory.com/1110에서 자세한 내용 확인 가능하다)

SDP (session Description Protocol)

세션 기술 프로토콜(SDP)은 스트리밍 미디어의 초기화 인수를 기술하기 위한 포맷이다. 이 규격은 IETF의 RFC 4566으로 규정되어 있다.
실제로 WEB RTC는 SDP format 에 맞춰져 영상, 음성 데이터를 교환하고 있다.

이제 Javascript를 이용해서 작성할 예정이다. 다양한 강의가 있고 참고할 자료도 많으니 이를 참고해서 작성해보도록 하겠다.

0개의 댓글