WebRTC 개념 및 STUN & TURN 서버 역할
FE/WEB2024. 4. 28. 10:26WebRTC 개념
WebRTC
(Web Real-Time Communication)는 웹 브라우저와 모바일 어플리케이션을 통해 실시간으로 음성, 비디오, 데이터를 주고받을 수 있게 해주는 기술입니다.
이 기술은 플러그인이나 외부 소프트웨어 설치 없이도 동작하며, HTML5와 JavaScript API를 사용하여 구현됩니다.
WebRTC를 사용하면 아래와 같은 기능을 만들 수 있습니다.
- 화상 회의 시스템: Zoom, Google Meet과 같은 서비스와 같이, 실시간 화상 채팅이 가능한 시스템을 구현 가능
- 실시간 게임: 멀티플레이어 게임에서 실시간 음성 대화 시스템 구현 가능
- 파일 공유: 데이터 채널을 이용하여 브라우저 간 직접 파일을 공유할 수 있는 시스템 구현 가능
WebRTC 특징
- 실시간 통신: WebRTC는 지연시간이 매우 짧기 때문에, 실시간으로 대화나 비디오 컨퍼런스를 진행할 수 있음
- 브라우저 간 호환성: 브라우저 종류 상관없이 다양한 브라우저에서 지원 (예를들어, Chrome, Firefox, Safari 등)
- 데이터 암호화: 모든 통신은 기본적으로 암호화되어, 보안성이 높음
- 다양한 데이터 채널: 영상 뿐만 아니라, 텍스트, 파일, 이미지 등 다양한 형태의 데이터를 송수신할 수 있음
WebRTC 동작
WebRTC 통신을 위해 크게 아래 3가지로 구성됩니다.
- PeerConnection: 오디오 및 비디오 통신을 위한 연결을 관리
- DataChannel: 특정 데이터를 실시간으로 교환할 수 있는 채널을 제공
- MediaStream (getUserMedia): 카메라와 마이크 같은 미디어 입력 장치에 접근할 수 있게 해줌
STUN 서버 & TURN 서버
WebRTC의 구현에서 중요한 역할을 하는 두 가지 유형의 서버는 STUN
(Server Traversal Using NAT) 서버와 TURN
(Traversal Using Relays around NAT) 서버입니다. 이 두 서버는 네트워크 주소 변환(NAT) 뒤에 있는 장치들이 인터넷을 통해 서로 통신할 수 있도록 도와주는 역할을 합니다.
STUN 서버
STUN 서버는 주로 공인 IP(Public IP) 주소와 포트를 찾는데 사용됩니다. 사용자의 디바이스가 NAT 뒤에 있을 때, STUN 서버는 외부에서 접근 가능한 주소(공인 IP와 포트)를 파악하고, 이 정보를 해당 사용자에게 알려줍니다. 이를 통해 다른 피어(Peer)와 직접 통신할 수 있도록 합니다.
TURN 서버
TURN 서버는 STUN 서버로 해결할 수 없는 상황에서 사용됩니다. 일부 NAT 구성에서는 외부 서버와의 직접적인 peer-to-peer 연결을 허용하지 않습니다. 이 경우, TURN 서버는 모든 데이터를 중계하는 중개자 역할을 하여, 두 사용자 간의 통신을 가능하게 합니다. TURN 서버는 방화벽 또는 복잡한 NAT 구성에서 활용할 수 있습니다.
coturn 서버
STUN 서버와 TURN 서버를 각각 구현할 수도 있지만, Coturn이라는 오픈 소스 서버를 활용하면 STUN과 TURN 서비스를 모두 제공하는 기능을 통합하여 사용할 수 있습니다.
git: https://github.com/coturn/coturn
관련 글
'FE > WEB' 카테고리의 다른 글
CSS 정의와 구성 요소 (selector, property, value) (0) | 2024.09.10 |
---|---|
HTML5의 새로운 기능들 소개 (0) | 2024.06.04 |
HTML 시맨틱 태그를 사용하여 웹 페이지의 구조를 명확하게 (0) | 2024.03.03 |
webpack에 퍼그(pug) 설정하기 (pug 번들링) (1) | 2023.10.31 |
웹 폰트 굵기(font weight)에 대해서 (0) | 2023.10.16 |
IT 기술에 대한 글을 주로 작성하고, 일상 내용, 맛집/숙박/제품 리뷰 등 여러가지 주제를작성하는 블로그입니다. 티스토리 커스텀 스킨도 개발하고 있으니 관심있으신분은 Berry Skin을 검색바랍니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!