티스토리 뷰
WebRTC 란?
WebRTC(Web Real-Time Communication)는 웹 브라우저에서 실시간 음성 통화, 영상 통화, 파일 공유 등의 기능을 제공하는 오픈 소스 프로젝트입니다. 웹 기술을 사용하여 통화를 시작하고, 통화 중인 두 사용자 간에 통화 데이터를 전송하며, 통화 종료를 관리하는 API를 제공합니다. 즉, 웹 애플리케이션과 사이트가 중간자 없이 브라우저 간에 오디오나 영상 미디어를 포착하고 마음대로 stream할 뿐 아니라, 임의의 데이터도 교환할 수 있도록 하는 기술입니다.
WebRTC는 일반적으로 브라우저에서 JavaScript 및 HTML5과 같은 웹 기술을 사용하여 구현됩니다. 이 기술은 특별한 소프트웨어나 브라우저 플러그인을 설치할 필요 없이 웹 애플리케이션에서 실시간 음성 및 영상 통화를 제공할 수 있게 합니다. 상호 연관된 API와 프로토콜로 구성되어 함께 작동합니다.
WebRTC는 다양한 플랫폼에서 사용할 수 있으며, PC, 모바일 기기 등 다양한 환경에서 동작합니다. 또한, P2P 기술을 사용하여 중간 서버 없이 사용자 간 직접 통신이 가능하므로, 통신의 안정성과 개인 정보 보호 측면에서 장점을 가지고 있습니다.
P2P란?
P2P는 Peer-to-Peer의 약어로, 노드들 간의 직접적인 연결을 통해 데이터를 공유하는 분산 네트워크 모델을 의미합니다. P2P 네트워크에서는 일반적으로 중앙 서버가 없으며, 각 노드들이 서로를 향해 직접적으로 연결됩니다.
P2P 네트워크는 파일 공유, 음악 공유, 영상 스트리밍, 온라인 게임 등 다양한 분야에서 사용됩니다. 이러한 서비스들은 일반적으로 대규모 사용자를 대상으로 하며, 사용자가 파일 등을 다운로드할 때 다른 사용자들로부터 직접적으로 받아올 수 있도록 설계되어 있습니다.
P2P 네트워크는 중앙 서버가 없기 때문에, 사용자들이 서로를 향해 직접적으로 연결됩니다. 이러한 구조는 중앙 서버가 다운될 경우에도 서비스가 지속될 수 있는 장점이 있습니다. 또한, 사용자들이 직접적으로 연결되기 때문에, 중간에 제3자가 개입하여 정보를 조작하거나 가로채는 등의 공격을 받을 가능성이 낮습니다.
NAT란?
NAT(Network Address Translation)는 인터넷에서 사용되는 IP 주소를 사설 IP 주소로 변환하는 프로세스입니다. 이를 통해, 단일 공인 IP 주소를 가지고 있는 라우터나 모뎀 등을 사용하여 여러 대의 기기가 인터넷에 접속할 수 있습니다.
NAT는 보안 상 이점과 IP 주소 부족 문제를 해결하기 위해 도입되었습니다. NAT를 사용하면, 사설 IP 주소를 사용하는 기기들은 인터넷에서 직접적으로 접근할 수 없으며, 공인 IP 주소를 사용하는 라우터나 모뎀 등을 통해 인터넷에 접속할 수 있습니다. 이를 통해, 인터넷 공간에서 사설 IP 주소를 사용하는 기기들을 보호할 수 있습니다.
그러나, NAT는 P2P 네트워크에서 사용자들 간의 직접적인 연결을 지원하는 데 어려움을 겪을 수 있습니다. NAT는 사용자들 간의 직접적인 연결을 차단하고, 중계 서버를 통해 데이터를 전달하는 방식으로 P2P 네트워크를 지원합니다. 이 때, 중계 서버는 데이터 전송 시간이 길어지고, 대역폭을 소비하는 문제가 있습니다.
WebRTC는 P2P 네트워크를 지원하기 위해 NAT 탐색 및 퍼지 통신 프로토콜인 ICE(Interactive Connectivity Establishment)를 사용합니다. 이를 통해, 사용자들은 NAT를 우회하고 직접적인 연결을 설정할 수 있습니다.
STUN 서버와 TURN 서버란?
STUN 서버와 TURN 서버는 WebRTC와 같은 P2P 네트워크에서 사용되는 중간 서버입니다.
STUN(Simple Traversal of UDP through NATs) 서버는 NAT(Network Address Translation) 뒤에 있는 클라이언트의 Public IP 주소 및 포트 번호를 확인하는 역할을 합니다. NAT는 보안 및 네트워크 관리를 위해 내부 IP 주소와 외부 IP 주소 간의 변환을 수행합니다. 따라서, P2P 네트워크에서는 STUN 서버를 통해 NAT의 내부 IP 주소와 외부 IP 주소 간의 매핑 정보를 확인하여, 사용자 간의 직접적인 연결을 지원합니다.
TURN(Traversal Using Relays around NAT) 서버는 NAT를 사용하는 클라이언트 간의 통신이 직접적인 연결을 생성할 수 없는 경우에 사용됩니다. 예를 들어, NAT 뒤에 있는 사용자들이 서로 다른 NAT에 있는 사용자들과 통신할 경우, NAT가 이를 막아서 연결이 되지 않습니다. 이런 경우에 TURN 서버는 클라이언트들 간의 중간 역할을 하여 데이터 전송을 지원합니다. TURN 서버는 데이터를 수신하고, 이를 클라이언트에게 전달하는 역할을 하며, 이 과정에서 NAT의 매핑 정보를 사용합니다.
STUN 서버와 TURN 서버는 WebRTC에서 P2P 네트워크를 구성하는 데 필수적인 중간 서버입니다. 이들 서버를 통해, P2P 네트워크에서 사용자 간의 직접적인 연결을 지원하고, 안정적인 데이터 전송을 보장할 수 있습니다.
ICE란?
ICE(Interactive Connectivity Establishment)는 WebRTC와 같은 P2P 네트워크에서 사용되는 NAT(Network Address Translation) 탐색 및 퍼지 통신 프로토콜입니다.
WebRTC는 P2P 네트워크를 구성하기 위해 사용자들 간의 직접적인 연결을 지원해야 합니다. 그러나, 사용자들이 NAT(Network Address Translation) 뒤에 있는 경우, 직접적인 연결을 설정하는 것이 어려울 수 있습니다. 이 때, ICE는 사용자들 간의 직접적인 연결을 설정하기 위해 NAT 탐색 및 퍼지 통신 프로토콜로 사용됩니다.
ICE는 다음과 같은 프로세스를 통해 사용자들 간의 직접적인 연결을 설정합니다.
- 클라이언트는 자신의 IP 주소와 포트 번호를 STUN(Session Traversal Utilities for NAT) 서버에 보내 NAT 타입을 확인합니다.
- 클라이언트는 서로 다른 NAT에 있는 다른 클라이언트에게 STUN 서버에서 얻은 정보를 포함한 ICE candidate 정보를 전송합니다.
- 다른 클라이언트는 수신한 ICE candidate 정보를 바탕으로 자신의 STUN 서버에 자신의 IP 주소와 포트 번호를 보내 NAT 타입을 확인합니다.
- 다른 클라이언트는 자신의 STUN 서버에서 얻은 정보와 함께 수신한 ICE candidate 정보를 포함하여 클라이언트에게 응답합니다.
- 클라이언트는 수신한 응답을 기반으로 다른 클라이언트와 직접적인 연결을 설정합니다.
이러한 과정을 통해, ICE는 사용자들 간의 직접적인 연결을 설정하고 안정적인 미디어 스트림 전송을 보장합니다.
Signaling이란?
Signaling은 WebRTC와 같은 P2P 네트워크에서 사용되는 프로세스로, 사용자 간의 연결 설정과 미디어 스트림 교환에 필요한 정보를 교환하는 과정을 의미합니다.
WebRTC는 P2P 네트워크를 구성하기 위해 사용자들 간의 연결 설정 및 미디어 스트림 교환 등 다양한 작업이 필요합니다. 이를 위해서는 사용자 간에 정보를 교환하는 프로세스가 필요한데, 이것이 Signaling입니다. Signaling은 일반적으로 클라이언트와 서버간에 이루어지며, 사용자들은 서로의 상태를 알 필요가 없습니다.
Signaling은 P2P 네트워크를 구성하기 위한 다양한 정보를 교환합니다. 예를 들어, SDP(Session Description Protocol) 정보, ICE(Interactive Connectivity Establishment) 서버 정보, NAT(Network Address Translation) 타입, 코덱 정보 등을 교환합니다. 이러한 정보를 교환함으로써, WebRTC는 사용자들 간의 직접적인 연결을 설정하고, 안정적인 미디어 스트림 전송을 보장합니다.
Signaling은 WebRTC의 핵심 기술 중 하나이며, 사용자들 간의 직접적인 연결 설정과 미디어 스트림 교환에 필수적입니다. Signaling은 다양한 프로토콜을 사용할 수 있으며, 일반적으로 WebSocket, HTTP, SIP 등의 프로토콜을 사용합니다.
*참고글
https://developer.mozilla.org/ko/docs/Web/API/WebRTC_API
https://velog.io/@kkookk55/WEB-RTC-ICE-STUN-TURN-NAT
2. 해당 코드
3. 코드 설명
'Projects' 카테고리의 다른 글
[Namoldak] Web Socket을 이용한 게임 기능 구현 (0) | 2023.02.24 |
---|---|
[Namoldak] SockJs, STOMP 를 이용한 실시간 채팅 구현 (0) | 2023.02.24 |
[Namoldak] Intersection Observer API 를 사용한 무한스크롤 (0) | 2023.02.24 |
[Namoldak] TroubleShooting_RefreshToken (0) | 2023.02.13 |
[Namoldak] EsLint & Prettier 설정 (0) | 2023.01.01 |