-
WebRTC란?TIL (Today I Learned) 2024. 1. 16. 21:55
WebRTC 기본 개념
WebRTC(Web Real-Time Communications)은 웹 어플리케이션 및 모바일 기기에서 별도의 소프트웨어나 플러그인 없이 음성, 영상 미디어, 텍스트, 파일과 같은 데이터를 주고받을 수 있는 기술입니다. 주로 P2P( Peer-to-Peer) 화상회의 및 데이터 공유를 지원하며, 브라우저 간에 실시간 통신이 가능하게 합니다.
WebRTC는 비디오 채팅, 화상 회의, 온라인 교육, 의료 분야의 원격 진료 등 다양한 분야에서 활용되고 있습니다. 또한, 오픈소스 기술로 Chrome, Firefox, Opera 등의 주요 브라우저에서 지원되며, 주요 구성 요소로는 미디어 스트림, 시그널링, NAT 트래버설이 있습니다.
WebRTC 통신원리
WebRTC 기술은 P2P 통신에 최적화되어 있습니다. WebRTC에는 MediaStream, RTCPeerConnection, RTCDataChannel이라는 세 가지 주요 클래스가 있으며, 이들을 통해 실시간 데이터 교환이 이루어집니다.
- MediaStream(미디어 스트림)
카메라, 마이크 등의 미디어 데이터 스트림에 접근하는 데 사용됩니다.
- RTCPeerConnection(실시간 피어 연결)
데이터의 암호화, 대역폭 관리, 오디오 및 비디오 연결을 담당합니다. 두 피어 간의 연결을 설정하고 관리하는 주요 객체입니다.
- RTCDataChannel(실시간 데이터 채널)
P2P 통신을 위한 데이터 전송을 담당합니다. 오디오 및 비디오 스트림 이외의 일반적인 데이터를 교환할 수 있습니다.
이 세 가지 클래스를 통해 WebRTC는 브라우저 간에 실시간 통신을 가능케 합니다. 그러나 두 사용자가 통신을 시작하고 연결을 수립하기 위해서는 시그널링이라는 중간 단계가 필요합니다.
# Signaling
시그널링(Signaling)은 두 피어 간의 연결을 설정하고 유지하기 위한 프로세스를 나타냅니다. 아래는 시그널링 과정을 설명한 내용입니다.
- Caller(콜러)와 Callee(콜리)
두 사용자 중 하나가 연결을 요청하는 Caller이며, 다른 쪽이 연결을 받는 Callee입니다.
- 서버 역할
두 사용자 간의 연결을 중개하고 SessionDescription을 교환할 수 있도록 중간 역할을 하는 서버가 필요합니다.
- SessionDescription 교환
Caller와 Callee는 서버를 통해 서로의 SessionDescription을 교환하여 피어 연결을 설정합니다.
webRTC 시그널링 과정
시그널링 과정은 webRTC에서 두 피어 간의 연결 설정 및 관리를 위한 중요한 단계로, 다음과 같은 순서로 진행됩니다.
- 연결 요청 (Offer)
콜러(Caller)가 연결을 요청하면, 콜러는 SDP(Session Description Protocol) offer를 생성합니다. 이 offer에는 콜러의 미디어 설정 및 네트워크 정보가 포함되어 있습니다.
- 서버를 통한 전달
콜러가 생성한 SDP offer는 서버를 통해 콜리(Callee)에게 전송됩니다. 이때 서버는 offer를 받아오고 콜리에게 전달하는 중개 역할을 수행합니다.
- 응답 생성 (Answer)
콜리(Callee)는 받은 SDP offer를 기반으로 SDP answer를 생성합니다. 이 answer에는 콜리의 미디어 설정 및 네트워크 정보가 담겨 있습니다. 콜리는 이후 생성된 SDP answer를 서버를 통해 다시 콜러에게 전송합니다.
- 연결 설정
콜러는 서버를 통해 받은 SDP answer를 기반으로 연결을 설정합니다. 이것은 두 피어 간의 미디어 교환 및 통신을 위한 초기화 과정을 의미합니다. 이후에는 RTCPeerConnection을 사용하여 두 피어 간의 데이터 교환을 수행할 수 있게 됩니다.
이 과정에서 서버는 오직 SDP offer와 SDP answer를 전달하고 중개하는 역할만 수행하며, 실제 미디어 데이터는 직접적으로 두 피어 간에 전송됩니다. 따라서 서버의 역할은 시그널링 과정에서만 필요하며, 이후에는 피어 간의 직접적인 통신이 이뤄지게 됩니다. 이러한 웹RTC의 핵심 프로세스를 통해 콜러와 콜리는 중간에 서버를 통해 SessionDescription을 교환하며 실시간 데이터 교환을 시작하게 됩니다.
# 참고
https://web.dev/articles/webrtc-basics?hl=ko
https://codelabs.developers.google.com/codelabs/webrtc-web/#7
https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Protocols
'TIL (Today I Learned)' 카테고리의 다른 글
“Thread Pool Hell” 발생원인 (0) 2024.01.16 LexoRank에 대하여**** (1) 2024.01.10 메모장-LexoRank (0) 2024.01.05 내용 꼭 정리하기*****//NestJS와 TypeORM에서 Entity 생성 및 저장 시 주의사항 (0) 2024.01.02 NestJS_온라인 공연 예매 서비스 프로젝트_entity 관계 설정 수정 (0) 2023.12.29