이전 팀프로젝트 중 WebRTC 기능을 이용한 다대다 음성채팅 기능을 구현하였는데
Notion에 휘갈기듯 정리한거 빼고 남아있는게 없어서 이 참에 블로그에 정리하고자 한다.
WebRTC?
WebRTC(Web Real-Time Conmunication)는 웹 브라우저 간에 플러그인의 도움 없이 서로 통신할 수 있도록 설계된 API이다.
W3C에서 제시된 초안이며, 음성 통화, 영상 통화, P2P 파일 공유 등으로 활용될 수 있다.
WebRTC를 뒷바침하는 기술은 개방형 웹 표준으로 구현되며,
모든 주요 브라우저에서 일반 자바스크립트 API로 제공하며 Android 및 IOS 애플리케이션과 같은 네이티브 클라이언트의 경우 동일한 기능을 제공하는 라이브러리를 사용할 수 있다.
WebRTC는 오픈소스이며 현재 Apple, Google, Microsoft, Mozilla 등의 지원을 받는다고 한다.
대표적인 WebRTC 기반의 서비스는 Google Meet, Zoom, Discord 등이 있다.
(이외에 알만한 이름의 서비스들이 사용중이다.)
장점
1. 실시간 스트리밍 지연률이 낮다
대표적인 장점이라 하면 지연율이 낮다는거다.
= 다른 스트리밍에 비해 상대적으로 빠르다!
위에 사진에서는 각 스트리밍 프로토콜 별로 Latency 를 나타내고 있는데,
맨 오른쪽을 보면 가장 낮은게 WebRTC 인걸 볼수있다.
왜 이런 속도가 날까?
바로 P2P 통신이기 때문이다.
WebRTC는 Peer간 직접 통신을 기반으로 하고있다.
다른 통신과는 다르게 서버를 거치지 않아도 되기 때문에 상대적으로 지연 속도가 낮게된다.
2. 별도의 플러그인 없이 사용 가능
다른 통신의 경우 특정 미디어 플레이어가 필요로 하는 경우가 있다.
하지만 WebRTC는 브라우저 기본 내장 기능을 사용하기 때문에 별도의 플러그인 없이도 사용이 가능하다.
3. 오픈소스
오픈소스의 장점은 무료로 사용이 가능하다도 있지만,
커뮤니티에서 계속적으로 기능을 유지보수 하기 때문에 지속적인 발전이 된다는 점이다.
(오픈 소스의 장단점이야 다들 알고 있는 부분이니...)
단점
1. 브라우저 호환성
대부분의 브라우저 호환이 된다고 하지만 대표적으로 IE(Internet Exproler)의 경우 호환이 되지 않는다.
아래 이미지는 caniuse 홈페이지에서 검색한 결과이다.
결과를 보면 주로 사용되는 대부분의 브라우저에는 호환 되지만,
비주류 브라우저에 대해서는 호환이 되지 않는 모습을 볼 수 있기에 해당 브라우저를 사용하는 사람이라면 다른 브라우저 설치가 필요한 상황이다.
2. 서버 구성에 어려움이 있다.
P2P 통신이기에 서버가 필요 없을 수 있으나,
추가적인 기능이나 화상통화 그룹화 데이터, STUN/TURN 서버 구성 등의 추가 작업이 필요할 수 있다.
이에 대한 레퍼런스가 적은 편이고,
WebRTC 에서 제공되는 기능이 실시간 화상채팅에 초점이 맞춰져있기 때문에 화질품질에 대한 처리, 대용량 트래픽 등에 대한 처리는 직접 구현해줘야 한다.
(레퍼런스의 많고 적음은 개인차가 있을 수 있음!)
대부분의 기능을 처리하게끔 미디어 서버로 Kurento, Janus, Mediasoup 등이 있지만,
이에 대한 사용법 또한 익혀야하는 실정이다.
(돈을 내고 사용하는 서비스도 있다.)
3. 보안문제
P2P 통신이기 때문에 보안적 문제가 발생할 수 있다.
P2P의 대표적인 보안 문제는 도청, 통신 방해, 침입 및 변조 등이 있다.
이런 부분에 대해서는 지속적인 개선 작업이 이루어지는 중이라고 한다.
마무리
한동안 코로나로 인해 비대면 작업들이 늘어나면서,
WebRTC 기술은 많은 산업에 사용되고 있는 기술이 되어가고 있다.
물론 러닝커브가 있지만 미디어 서버를 사용하여 중계 서버만 만들면 되기에
WebRTC 와 관련 네트워크에 대한 공부만 한다면 구현에 큰 어려움이 없을것이다.
추가적으로 WebRTC 구현에 있어서,
NAT, ICE, STUN, TURN 등의 개념을 알고 있으면 좋다.
이 내용들은 다음 포스팅에서 진행하겠지만 그전에 알아보고 싶다면 아래 링크를 참고하면 좋을듯 하다.
https://developer.mozilla.org/ko/docs/Web/API/WebRTC_API/Protocols
WebRTC 프로토콜 소개 - Web API | MDN
이 글은 WebRTC API에 대한 프로토콜을 소개하기 위해 작성 되었습니다.
developer.mozilla.org
Github
전에 Kurento 미디어 서버 이용하면서 NodeJS용 N:N 예제코드가 없길래
Java 예제를 JS 용으로 번역해서 만든 코드 링크이다.
현재 사용하는 구조랑은 맞지 않아서 추후 리팩토링 예정이다.
우선은 흐름 파악용으로 사용하면 좋을 듯 하다.
(이에 대한 포스팅은 따로 진행 예정이다.)
https://github.com/mk1-p/kurento-many2many-nodejs
GitHub - mk1-p/kurento-many2many-nodejs: JS code for Nodejs environment based on the Kurento java example code
JS code for Nodejs environment based on the Kurento java example code - GitHub - mk1-p/kurento-many2many-nodejs: JS code for Nodejs environment based on the Kurento java example code
github.com
참고문서
WebRTC
An open framework for the web that enables Real-Time Communications (RTC) capabilities in the browser.
webrtc.org
https://tech.kakaoenterprise.com/121
WebRTC 응용 서비스를 개발하는 2가지 방법
시작하며 코로나로 인해 마음 놓고 서로를 대면할 수 없는 시대로 살아온 지 벌써 2년이 되어갑니다. 우리 안에 공포가 자리 잡았고 그렇게 금방이라도 와르르 무너질 것 같았던 인간 사회는 이
tech.kakaoenterprise.com
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=mingyo01&logNo=222050438291
STREAMING PROTOCOLS
프로토콜이란? 프로토콜은 한 통신 시스템에서 다른 통신 시스템으로 데이터가 이동하는 방식을 관리하는 ...
blog.naver.com
[WebRTC] WebRTC란 무엇일까?
🎞 WebRTC란 무엇인가? Web Real-Time Communication의 약자로 웹/앱에서 별다른 소프트웨어 없이 카메라, 마이크 등을 사용하여 실시간 커뮤니케이션을 제공해주는 기술이다. 우리가 잘 알고있는 화상통
gh402.tistory.com
'DEV > Etc' 카테고리의 다른 글
[Tool] SDK MAN (SDK Manager) (0) | 2023.11.24 |
---|---|
[Etc] 셀레니움 크롬 드라이버 자동 설치(webdriver-manager) (0) | 2023.11.03 |
[Flask] Flask 란? (0) | 2023.08.03 |
Google 간편로그인 등록 (feat. OAuth) (0) | 2023.07.22 |
OAuth 2.0 개념 정리 (0) | 2023.07.22 |