본문 바로가기

프로젝트

[WebRTC] 이용하기 쉬운 화상 채팅 경험 제공하기

국비 교육 최종 프로젝트를 진행하면서 비디오 채팅 기능을 개발했습니다.
이번 글은 비디오 채팅을 구현하기 위해서 사용한 WebRTC에 대해서 정리하고자 작성하게 되었습니다.


1. WebRTC란 무엇인가요?

WebRTC는 웹 브라우저 간에 실시간으로 음성과 영상 통화를 가능하게 해주는 기술입니다.
별도의 플러그인이나 소프트웨어 없이 브라우저끼리 데이터를 주고 받을 수 있도록 합니다.

 

2. WebRTC의 구성요소

2-1. 시그널링 서버

시그널링 서버는 브라우저의 P2P 연결을 위해 메타데이터를 교환하는 서버입니다.
SDP라는 프로토콜 정보를 전달해서 미디어 형식이나 코덱 등을 협상하고, ICE 후보를 교환해서 네트워크 정보를 교환합니다.

2-2. STUN 서버

공유기 등의 NAT 환경에 있는 클라이언트는 일반적으로 사설 IP밖에 알지 못합니다. 그렇기 때문에 자신의 공인 IP를 상대에게 전달하기 위해서는 STUN 서버가 필요합니다.
클라이언트는 STUN 서버에 요청을 보내서 자신의 공인 IP와 포트 정보를 확인합니다. 이후 시그널링 과정에서 알아낸 정보를 상대에게 전달할 수 있습니다.

2-3. TURN 서버

STUN 서버가 있음에도 불구하고 직접 연결이 불가능할 때가 있습니다. 이런 경우에는 TURN 서버를 활용해서 미디어 스트림을 중계할 수 있습니다.
TURN 서버는 클라이언트로부터 미디어 스트림을 받아서 다른 클라이언트에게 전달하는 역할을 합니다.

 

3. WebRTC의 아키텍처

WebRTC의 아키텍처

3-1. Mesh

Mesh 방식은 모든 클라이언트가 P2P로 연결되는 구조입니다.
서버에는 부하가 적지만 클라이언트가 늘어날 수록 네트워크 부하가 늘어나고 불편한 사용자 경험을 제공합니다.

3-2. SFU

SFU 방식은 각 클라이언트가 서버로 미디어 스트림을 전송하면 다른 클라이언트에게 선택적으로 전달하는 방식입니다.
이전 방식보다 클라이언트의 부하가 줄고 효율적인 네트워크 사용이 가능합니다.

3-3. MCU

MCU 방식은 모든 미디어 스트림을 서버에서 혼합하여 단일 미디어 스트림으로 만들어 클라이언트에 전송하는 방식입니다.
SFU 방식보다 네트워크 대역폭을 효율적으로 사용할 수 있지만 서버에 그만큼 높은 처리 능력을 요구합니다.


이번에 진행한 프로젝트에서는 10명까지 화상 채팅을 사용할 수 있으므로 SFU 아키텍처를 선택했습니다.
짧은 프로젝트 기간 내에 완성하기 위해 SFU 아키텍처 기반인 OpenVidu 라이브러리를 사용했습니다. 이 내용은 이후 포스팅에서 다뤄보도록 하겠습니다.

글을 끝까지 봐주셔서 감사합니다.
틀린 내용이 있다면 댓글로 지적 부탁드립니다.