우리 프로젝트의 메인 기능인 화상채팅 + 화면공유 + 위치기반..! 을 위해서 webRTC라는 기술을 처음 접하게 되었다. 이것저것 참고 레퍼런스를 찾아보면서 코드를 구현해나가는 과정에서 일단 webRTC가 뭐길래 화상채팅을 할 수 있게 하는건지 공부를 해보았다.
WebRTC는 Web Real-Time Communication이다. 말그대로 브라우저 간에 오디오, 영상 미디어를 스트리밍하며 데이터 교환을 할 수 있도록 하는 기술이다. 이 녀석이 실시간으로 웹에서 데이터를 교환할 수 있는 이유는 '시그널링'이라는 NAT 우회 과정을 거치기 때문이란다.
STUN 서버에 의해 NAT 트래버셜 작업이 이루어지고 이 STUN 서버에 요청을 보내면 NAT 뒤에 있는 Peer 들이 서로 연결할 수 있는 IP와 포트를 찾아준다. (그러니까, STUN서버가 각 사용자들을 연결해준다는 것 같음) 근데 이 STUN 서버에서 항상 연결을 해주는게 아니기 때문에 이때 대안으로 TURN 서버를 사용한다. (근데 이 TURN 서버는 시간 지연이 필수적으로 발생하니 최후의 수단으로 쓰는 것이 좋다고 하네)
이렇게 포트와 ip를 찾고 사용자들을 찾으면 ICE 라는 프레임워크에서 두 단말이 p2p 연결을 하도록 해준다. 연결이 되면 SDP 규약에 맞춰 서로 연결이 됨.
이러한 과정을 '시그널링'이라고 하고 이 시그널링 서버를 직접 구축하거나 외부 솔루션을 사용할 수 있음. 시그널링 서버를 직접 구축하려면 웹소켓, 서버전송이벤트 방법을 적용할 수 있다고 함.
우리 프로젝트에서는 openVidu 라는 오픈소스 플랫폼을 사용하여 webRTC 기술을 사용하려고 한다. 웹, 모바일 환경에서 영상 통화를 쉽게 추가할 수 있어서 우리가 도전해볼만하다고 생각했다. openVidu가 webRTC를 위한 시그널링까지 제공을 해주고 있으니 얼마나 다행인지!!
이렇게 메인 기능인 화상 채팅과 화면 공유는 해결이 될 것 같다.
https://2jinishappy.tistory.com/335
https://wormwlrm.github.io/2021/01/24/Introducing-WebRTC.html
https://awabot.com/en/webrtc-telepresence-teleoperation/
'T.I.L. :: Today I Learned > 항해99 14기 본과정' 카테고리의 다른 글
Day 54. 서버 배포 도전기, 과연 할 수 있을 것인가. (0) | 2023.05.26 |
---|---|
Day 53. 🦉부엉 (0) | 2023.05.26 |
Day 51. 쿠..렌토..? 도..ㅋ...ㅓ..? (0) | 2023.05.23 |
Day 50. 기획부터 다시 천천히..🐌 (0) | 2023.05.22 |
Day 49. 이제 진또배기 start? (0) | 2023.05.21 |