서버 - 클라이언트의 경우
서버가 브라우저에 그냥 메시지를 전송할 수 없음 → request가 와야지만, response를 줄 수 있음
실시간 서비스를 만드려면 → 계속 서버로 확인 request를 전송해야함
그래서 websocket이 나옴 ( 통신이 열려있는 동안, 서버에서 리퀘스트 필요없이 바로 메시지를 보낼 수 있음/ 리얼타임 경험을 위해 만들어짐- > 채팅방은 웹소켓 서버에 모두가 접속한 것)
서버의 메모리 파워( 유저가 많으면 많을 수록 더 많은 메모리 필요하고, 서버에 더 돈을 써야함, 서버에 많은 비용이 들어감)
→ 그래서 webRTC (채팅방을 그러면 브라우저끼리 연결하자!) →웹 리얼 타임 커뮤니케이션 ( p2p 커뮤니케이션)
단순 텍스트 뿐만 아니라, 영상, 오디오 등도 다 주고 받을 수 있음. (서버 없이 가능함, 서버를 이용하는 것보다 빠르다(중개자가 없으므로)
문제점: 동접자가 많으면 어려움(하쿠나 최대 4명이 동시 방송)
웹소켓과 webRTC는 무궁무진한 가능성을 열어줌
→ Js만 할 줄 알면 된다.
그렇다면 어떻게 브라우저간 통신을 가능하게 할까?
STUN, TURN서버?
peer들간의 Ip주소를 알아내서 데이터 교환을 해야하는데, 개개인의 컴퓨터는 방화벽등 여러가지 보호장치들이 존재하고 있다. 서로간의 연결을 위한 정보를 공유하여 p2p통신을 가능하게 해주는 것이 stun/turn 서버.
stun - peer간의 정보를 확인하여 연결시켜주는 서버.
turn - 비공개 IP 주소도 연결할 수 있게 해주는 역할, peer간의 연결이 불가능한 경우에 연결할 수 있게 해준다.
어떨때 연결이 불가능한가?
라우터는 공개 IP주소를 가지고 있고, 단말들은 비공개 IP주소를 가지고 있음. ( NAT - IPv4의 주소 부족 문제를 해결하기 위한 방안)
단말이 유일한 공개 IP 없이 인터넷 상에 검색 될 수 있는 방법
TURN 서버와 연결하고 모든 정보를 그 서버에 전달하는 것으로 Symmetric NAT 제한(이전에 연결한 peer와 연결 가능) 을 우회하는 것을 의미 - 오버헤드가 발생하므로, 다른 대안이 없을 경우만 사용
출처:
webRTC? websocket 5분 개념정리! ( 노마드 코더)
'공부기록 > 기타' 카테고리의 다른 글
[git] merge vs rebase (0) | 2021.12.29 |
---|---|
http 0.9~ 3 (0) | 2021.12.24 |
reverse proxy (0) | 2021.12.23 |
block, non-block / sync, async (0) | 2021.12.22 |
HashTable과 HashMap의 일반적인 차이 (0) | 2021.11.23 |