기본적으로 익숙한 통신 프로토콜은 HTTP 프로토콜이다. HTTP 프로토콜은 서버와 클라이언트(브라우저)의 단방향 통신 프로토콜을 의미하며, 브라우저가 먼저 물어봐야 이에 대해 서버가 응답을 해주는 단방향의 통신 방식이고, 통신이 끝나면 연결은 지속되지 않는 특징을 지니고 있다. 이와 다르게 양방향 통신을 하기 위한 프로토콜이 바로 WebSocket이다. 그리고 WebSocket과 함께 알아두어야 하는 WebRTC에 대해 비교 정리 해보자.
WebSocket
서버와 브라우저가 서로 양방향/실시간 통신을 하기 위한 프로토콜
웹소켓 연결을 맺기 위한 첫 번째 핸드쉐이크 이후 지속적으로 연결이 유지되어, 매번 메세지 전송 시에 새롭게 연결을 맺을 필요가 없어 빠르고 효율적.
웹소켓은 TCP 소켓과 이름만 유사할 뿐 브라우저의 소켓이며, 웹소켓 프로토콜은 HTTP와 동일하게 애플리케이션 계층에서 동작한다. 그리고 평문 메세지 전송 방식이기 떄문에 SSl/TLS 보안 계층으로 암호화 되어야 데이터 탈취를 방지할 수 있다.
- WebSocket은 양방향 통신을 위한 프로토콜
- socket.io는 양방향 통신을 위한 웹소켓 프로토콜을 사용하는 라이브러리
socket.io | WebSocket |
새로운 사람이 채팅에 참여한 경우, 모든 클라이언트에게 메세지를 브로드캐스팅 가능 | 새로운 사람이 채팅에 참여한 경우, 연결된 사용자들의 리스트를 받아와서 한 명씩 메세지 발송 |
소켓 연결 실패시 fallback으로 알아서 reconnect | 소켓 연결 실패시 자동으로 reconnect되지 않음 |
많은 비용 및 자원 | 적은 비용 및 자원 |
boilerplate 코드 | 낮은 복잡도 but 지원하지 않는 브라우저 다수 존재 |
비교적 속도 느림 | 빠른 속도 |
WebRTC(Web Real-Time Communication)
브라우저와 서버가 통신하는게 아니라 클라이언트 끼리 통신하여 중간자 서버 없이 브라우저간 오디오, 영상 미디어, 데이터 등을 교환할 수 있도록 하는 기술. 주로 화상 채팅이나 음성통화에 쓰임. (신뢰성을 보장하는 TCP보다, 빠른 전송이 중요한 UDP 기반)
WebSocket도 영상을 주고 받을 수 있는데 왜 WebRTC를 사용하나?
- 영상, 오디오, 임의의 데이터 통신이 High-performance, High-quality 가 되도록 설계
- 브라우저간 직접 통신이므로 빠름
- 지연시간이 훨씬 짧음(Low-latency)
WebRTC도 WebSocket을 사용하나?
→ 사용한다. P2P(Peer-to-Peer) 연결을 통해 직접 통신하지만 부하를 다룰 수 있기 때문에 WebSocket 혹은 socket.io를 사용하여 Signaling 서버는 필요하다.
디테일하지만 쉽게 설명해놓은 영상이 있어서 함께 첨부한다.
'Today I Learned' 카테고리의 다른 글
[프로젝트 돌아보기 프로젝트] 세 번째, 왜 Next.js 앱 라우터인가? (0) | 2024.05.13 |
---|---|
[프로젝트 돌아보기 프로젝트] 두 번째, Vanilla-extract를 사용한 이유? (0) | 2024.04.17 |
[프로젝트 돌아보기 프로젝트] 첫 번째, Next.js 프로젝트에서 React-query가 필요할까? (0) | 2024.04.08 |
CS 개념 정리 (0) | 2024.04.05 |
REST API란? (0) | 2024.03.08 |