이번에 팀 프로젝트로 평소 불편했던 경험을 떠올려 아이디로 제안해보았습니다. 동료들과 학습할 때 주로 zoom, discord를 이용하는데 화면공유는 가능하지만 공유한 상태로 그림
을 그리면서 설명할 수가 없었습니다. 불편했던 경험을 살려 이번 팀 프로젝트에서 하나의 서비스로 만들어 해결해보려고 합니다.
WebRTC
(Web Real-Time Communication)는 browser <-> browser 사이 중간에 거치는거 없이
미디어 스트림, 데이터 교환할 수 있는 기술
- NAT(Network address translation) : 1개의 IP로 여러대의 컴퓨터에서 인터넷을 연결할 수 있도록 하는 기술 (공유기)
- 라우터 : 내부, 외부 구분없이 연결된 서버와 클라이언트간 네트워크를 최대한 효율적으로 분배하고 패킷(송수신되는 데이터 조각)들을 여러 네트워크에 분산해서 전송하고 다시 합쳐서 받는 장비
(공유기는 외부ip를 내부 아이피로 분배, 라우터는 공인ip(외부ip)를 보내고 받는다.)
ICE는 browser가 peer를 통해 연결이 가능하도록 해주는 프레임워크이다.
peer A -> peer B 연결해도 쉽게 안되는 이유는 방화벽, 단말기에 public IP 할당 등 여러 제약사항이 있어서다. ICE는 이러한 문제를 해결하기 위해 STUN, TURN 서버를 하나 or 전부를 사용합니다.
Nat환경에서 실시간 미디어 통신을 지원하기 위한 프로토콜 중 하나.
Nat환경(공유기)을 사용한다면 내부 IP는 숨겨져있기 때문에 외부 컴퓨터들이 직접 찾아 접속하기 힘들다. 이런경우 STUN 서버를 사용하여 Nat환경으로 사용되는 내부IP의 원래IP(외부IP)와 PORT번호를 파악할 수 있습니다. 즉 연결을 위한 정보만 제공해준다.
그리고 Symmetric NAT을 사용하는 라우터의 경우 연결을 할 수가 없다. 이럴 경우에는 TURN이 필요하다.
peer간 직접 통신
이 실패할 경우에 peer사이 TURN서버를 경유하게하여 통신한다. 이 경우 TURN 서버와 연결후 모든 peer들에게 서버의 모든 패킷을 보내고 다시 나에게 전달해주기 때문에 리소스 낭비가 심하여 최후의 수단으로 사용해야한다.