Socket.IO 1 : Socket.IO 라이브러리와 WebSokcet과의 차이

Socket.IO

Socket.IO는 클라이언트-서버 사이에 실시간 양방형 통신을 가능하게 하는 오픈소스 라이브러리.
양방향이며 이벤트 기반이다.
(양쪽에 등록된 이벤트를 탐지하여 로직을 수행한다.)

본래 node.js를 바탕으로 만들어진 기술이지만
현재는 다양한 언어로 구현되어있다.


WebSocket protocol 기반이며 raw WebSocket에서 제공하는 기능에 이어
추가적인 기능들을 제공한다.


Engine.IO와 Socket.IO

socke.io의 핵심 프로토콜 기능이 담겨있다.
socket.io는 Engine.IO를 기능을 사용하여 작동한다.

engine.io는 cross-browse호환성을 제공하며
연결 관리(및 프로토콜 업그레이드),
fallback 동작을 수행한다.


socket.io는 개발자가 용이하게 애플리케이션을 구현할 수 있도록
namespace, room, 이벤트 기반 통신을 기능을 제공한다.



WebSocket과 다른 특징

간단하게 말해서 기능이 더 많다.

- websocket은 socket.io에서 채택할 수 있는 양방향 통신 수단 중 하나이고

- websocket이 지원되지 않는 환경(클라이언트나 서버 둘 중 하나가 지원 안 한다던가)에서는
   http long polling과 같은 다른 통신 수단을 채택하여 선택한다.
   ( JSONP polling도 있었으나 현재는 deprecated )
   

- 소켓 연결 실패시에는 자동으로 재연결을 시도한다.

- 자동 재연결을 제공하기는 하지만 다양한 오류를 핸들링하는 코드를 별도로 구현하여
   안정성을 높여야함.

- 네임스페이스, 룸, 인증 기능을 활용할 수 있음.





Service 사용하기

WebSocket protocol 보다는 편리한 기능이 많고 무료라는 장점이 있지만 
유지보수 측면에서 믿고 사용할 수 있는
MS의 Azure SignalR, Google의 Firebase와 같은 전용 클라우드 서비스를 사용하기도한다.


제품마다 기능과 요금이 다르기 때문에 
애플리케이션 로직에 맞는 제품을 찾기 위해서는 꼼꼼히 비교해보아야한다.

예를 들어, Push notification이 필요한 경우
Azure SignalR, socket.IO가 아닌 FCM을 채택해야한다.

또한, socket.IO의 경우 전송하고 수신한 메세지를 저장하는 기능을 지원하지 않기 때문에
이 기능을 사용하려면 별도의 저장공간 구축이 필요하다.


 

댓글

이 블로그의 인기 게시물

실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접

노마드코더 개발자북클럽 Clean code TIL 6 : 6장. 객체와 자료구조

백엔드 개발자가 Djnago fullstack 사이드 프로젝트를하며 ( html, css, vanillaJS 그리고 JS프레임워크 )