WebSocket vs socket.io
사실 애초에 둘은 다른 개념입니다. 웹 소켓은 양방향 소통을 위한 프로토콜이고, 프로토콜은 쉽게 말하자면 서로 다른 컴퓨터끼리 소통하기 위한 약속입니다. 반면, socket.io는 양방향 통신을 하기 위해 웹소켓 기술을 활용하는 라이브러리 입니다.
WebSocket과 socket.io에 대해서 알아봅시다.
WebSocket
- 웹 페이지의 한계에서 벗어나 실시간으로 상호작용하는 웹 서비스를 만드는 표준 기술
배경
HTTP 프로토콜은 클라이언트에서 서버로의 단방향 통신을 위해 만들어진 방법이기에, 실시간 웹을 구현하기 위해서는 양방향 통신이 가능해야 하는데, 웹소켓 이전에는 폴링(Polling), 스트리밍(Streaming) 방식의 AJAX 코드를 이용하여 구현하였지만, 이 방법들을 이용하면 각 브라우저마다 구현방법이 달라 개발이 어려운 문제가 발생했습니다. 이를 위해 HTML5 표준의 일부로 웹소켓(WebSocket)이 만들어지게 되었습니다.
특징
- 소켓을 이용하여 자유롭게 데이터를 주고 받음
- 기존의 요청-응답 관계 방식보다 더 쉽게 데이터를 교환할 수 있음
- 다른 HTTP Request와 마찬가지로 80포트를 통해 웹 서버에 연결
- http:// 대신 ws://로 시작하며 스트리밍과 유사한 방식으로 푸쉬를 지원
장점
- HTTP Request를 그대로 사용하기 때문에 기존 80, 443포트로 접속을 하므로 추가로 방화벽을 열지 않고도 양방향 통신이 가능
- HTTP 규격인 CORS 적용이나 인증 등의 과정을 기존과 동일하게 사용할 수 있음
TCP Socket과의 차이점
- 일반 HTTP Request를 통해 HandShaking 과정을 거쳐 최초 접속이 이루어 집니다.
Socket.io
다양한 방식의 실시간 웹 기술을 손쉽게 사용할 수 있는 모듈 WebSocket, FlashSocket, AJAX Long Polling, AJAX Multi part Streaming, IFrame, JSONP Polling 등 다양한 방법을 하나의 API로 추상화한 것입니다.
즉, Socket.io는 JavaScript를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있도록 한 기술입니다.
특징
- Socket.io는 현재 바로 사용할 수 있는 기술
- WebSocket 프로토콜은 IETF에서 관장하는 표준 프로토콜이라서 WebSocket을 지원하는 여러 서버 구현체가 있지만 Socket.io는 Node.js하나 밖에 없습니다.
장점
- WebSocket을 지원하지 않는 어느 브라우져라도 푸쉬 메시지를 일관된 모듈로 보낼 수 있음
- 개발자는 Socket.io로 개발을 하고 클라이언트로 푸쉬 메시지를 보내기만 하면, WebSocket을 지원하지 않는 브라우저의 경우는 브라우저 모델과 버전에 따라서 AJAX Long Polling, MultiPart Streaming, Iframe을 이용한 푸쉬, JSONP Polling, Flash Socket 등 다양한 방법으로 내부적으로 푸쉬 메시지를 보냄
예상 질문
언제 어떤것을 사용해야 하는가?
서버에서 연결된 소켓(사용자)들을 세밀하게 관리해야하는 서비스인 경우에는 Broadcasting기능이 있는 socket.io을 쓰는게 유지 보수 측면에서 훨씬 이점이 많고 가상화폐 거래소같이 데이터 전송이 많은 경우에는 빠르고 비용이 적은 표준 WebSocket을 이용합니다.
'CS > 네트워크' 카테고리의 다른 글
(1) 쉽게 배우는 데이터 통신과 컴퓨터 네트워크 (0) | 2022.05.27 |
---|---|
(1) 네트워크에 관해서_ (0) | 2022.05.05 |
SSL/TLS Handshake에 대해서 (0) | 2022.01.20 |
HTTP Method 정리 (0) | 2022.01.18 |
프록시(Proxy)란 ????????! (0) | 2022.01.17 |