'노드의 교과서'를 토대로 진행
노드 생태계에서는 "웹소켓"이라는 말을 들으면 보통 먼저 "Socket.IO"를 떠올리는 경우가 많습니다.
하지만 Socket.IO는 웹소켓을 활용한 라이브러리일 뿐이며, 웹소켓 그 자체는 아닙니다.
나중에 Socket.IO를 사용하기 위해서는 기반 기술인 웹소켓에 대해 먼저 알아야 합니다.
웹소켓은 HTML5에 새로 추가된 스펙으로, 실시간 양방향 데이터 전송을 위한 기술입니다.
이 기술은 HTTP와 다르게 WS라는 프로토콜을 사용합니다.
따라서 브라우저와 서버가 WS 프로토콜을 지원하면 사용할 수 있습니다.
노드(Node.js) 환경에서는 ws나 Socket.IO 같은 패키지를 통해 웹소켓을 사용할 수 있습니다.
웹소켓이 나오기 이전에는 HTTP 기술을 사용하여 실시간 데이터 전송을 구현했습니다.
그 중 하나가 폴링(polling)이라고 불리는 방식입니다.
HTTP는 클라이언트에서 서버로 향하는 단방향 통신이므로,
주기적으로 서버에 새로운 업데이트가 있는지 확인하는 요청을 보낸 후, 있다면 새로운 내용을 가져오는 단순한 방법이었습니다.
웹소켓 연결이 이루어진 후에는 그 다음부터 계속 연결된 상태로 있으므로 따로 업데이트가 있는지 요청을 보낼 필요가 없습니다.
업데이트할 내용이 생겼다면 서버에서 바로 클라이언트에 알립니다.
HTTP 프로토콜과 포트를 공유할 수 있으므로 다른 포트에 연결할 필요도 없습니다. 폴링 방식에 비해 성능도 매우 개선되었습니다.
서버 센트 이벤트(Server-Sent Events, SSE)라는 기술도 등장했습니다.
EventSource라는 객체를 사용하는데, 처음에 한 번만 연결하면 서버가 클라이언트에 지속적으로 데이터를 보냅니다.
웹소켓과 다른 점은 클라이언트에서 서버로는 데이터를 보낼 수 없다는 것입니다.
즉, 서버에서 클라이언트로 데이터를 보내는 단방향 통신입니다. 따라서 웹소켓만이 진정한 양방향 통신입니다.
하지만 주식 차트 업데이트나 소셜 네트워크 서비스에서 새로운 게시물을 가져오는 경우와 같이 양방향 통신이 필요하지 않은 경우도 있습니다.
서버에서 일방적으로 데이터를 내려주기만 하면 되기 때문이죠.
다음 장에서는 경매 시스템을 만들 때 SSE 기술을 사용해 볼 것입니다.
Socket.IO는 웹소켓을 편리하게 사용할 수 있도록 도와주는 라이브러리입니다.
Socket.IO는 웹소켓을 지원하지 않는 IE9와 같은 브라우저에서는 자동으로 웹소켓 대신 폴링 방식을 사용하여 실시간 데이터 전송을 가능하게 합니다.
클라이언트 측에서 웹소켓 연결이 끊겼다면 자동으로 재연결을 시도하며,
채팅방과 같은 기능을 쉽게 구현할 수 있도록 메서드를 제공합니다.
Socket.IO를 사용하기 전에 ws 모듈로 웹소켓이 무엇인지 직접 체험해보겠습니다.
'clone toy projects > node_expresss_chat' 카테고리의 다른 글
채팅 기능 구현하기 (0) | 2023.08.30 |
---|---|
미들웨어와 소켓 연결하기 (0) | 2023.08.30 |
실시간 GIF 채팅방 만들기 (0) | 2023.08.30 |
Soket.IO 사용하기 (0) | 2023.08.30 |
ws 모듈로 웹소켓 사용하기 (0) | 2023.08.30 |