웹소켓
- 실시간, 양방향 통신을 웹 클라이언트와 서버 간에 가능하게 하는 기술
- 전통적인 HTTP 통신과 다르게, 웹소켓은 지속적 연결을 제공하여 서버와 클라이언트가 언제든 서로에게 데이터를 보낼 수 있게 함, 실시간 애플리케이션에 매우 적합
작동 방식
- 연결 초기화 : 클라이언트가 서버에 연결 요청을 보냄(사용자가 웹 페이지를 열 때)
- 핸드셰이크 과정 : 서버는 요청을 받고 웹소켓 연결을 수락함(사용자가 채팅 앱을 열면 서버는 이를 인식하고 연결을 확립함)
- 데이터 교환 : 클라이언트와 서버 간에 지속적인 연결이 맺어지며, 실시간으로 데이터를 주고받을 수 있음(채팅 앱에서 사용자가 메시지를 보내면, 해당 메시지가 서버를 거쳐 다른 사용자에게 즉시 전달)
사용 이유
- 실시간 통신 가능
- 낮은 오버헤드 : 추가적인 HTTP 요청 없이 핸드셰이크를 함으로써 데이터 교환이 가능해 통신 오버헤드가 낮음
- 양방향 통신 : 클라이언트와 서버가 양방향 통신이 가능
사용 예시
- 채팅 애플리케이션
- 온라인 게임
- 금융 애플리케이션
- 실시간 알림
const express = require('express');
const http = require('http');
const WebSocket = require('ws');
const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
ws.send(`Server received: ${message}`);
});
});
app.get('/', (req, res) => {
res.send('Hello, World!');
});
인기 있는 웹소켓 라이브러리 및 프레임워크
- ws(WebSocket) : Node.js용 가벼운 웹소켓 라이브러리, 간단하고 빠르며 확장성이 뛰어남
- Socket.IO : 실시간 통신을 위한 매우 인기 있는 라이브러리, 자동 재연결, 방(Room)개념, 여러 트랜스포트(fallback) 지원 등 고급 기능을 제공
- WebSocket-Node : ws와 비슷하지만 다른 API와 추가 기능 제공
- SockJS : WebSocket이 지원되지 않는 오래된 브라우저에서도 사용할 수 있는 라이브러리
- SignalR(ASP.NET) : ASP.NET 개발자를 위한 웹소켓 및 실시간 통신 라이브러리