WebSocket은 클라이언트와 서버 간 양방향 실시간 통신을 가능하게 하는 프로토콜이다. HTTP와 달리 연결을 유지하며, 서버가 클라이언트에 데이터를 먼저 푸시할 수 있다.
HTTP vs WebSocket
HTTP (요청-응답):
클라이언트 → 요청 → 서버 → 응답 → 연결 종료
서버가 먼저 데이터 전송 불가
WebSocket (양방향):
클라이언트 ←→ 서버 (연결 유지, 언제든지 양방향 전송)
연결 수립 (핸드셰이크)
HTTP Upgrade 요청:
GET /chat HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
서버 응답:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Sec-WebSocket-Accept: ...
코드 예시
javascript
// 클라이언트 (브라우저)
const ws = new WebSocket('wss://example.com/chat');
ws.onopen = () => ws.send('Hello Server!');
ws.onmessage = (event) => console.log(event.data);
ws.onclose = () => console.log('연결 종료');
// 서버 (Node.js, ws 라이브러리)
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
ws.on('message', (data) => {
// 모든 클라이언트에 브로드캐스트
wss.clients.forEach(client => {
if (client.readyState === WebSocket.OPEN)
client.send(data);
});
});
});
활용 사례
- •채팅 앱, 실시간 협업
- •실시간 주식/암호화폐 시세
- •온라인 게임
- •라이브 알림
관련 개념
- •HTTP/HTTPS — WebSocket 핸드셰이크 기반
- •TCP/IP — WebSocket의 전송 계층
참고문헌