WebSocket은 클라이언트와 서버 사이에 지속적인 양방향 통신 채널을 제공하는 프로토콜입니다.
HTTP는 클라이언트가 요청해야만 서버가 응답할 수 있습니다. 서버가 먼저 데이터를 보낼 수 없습니다. 실시간 채팅, 주식 시세처럼 서버에서 먼저 데이터를 보내야 하는 상황에서는 HTTP만으로 해결하기 어렵습니다.
폴링(Polling) 방식으로 우회할 수 있지만, 주기적으로 요청을 보내 서버 부하가 크고 지연이 발생합니다.
연결 후에는 클라이언트와 서버 모두 언제든지 데이터를 보낼 수 있습니다.
한 번 연결되면 명시적으로 닫을 때까지 유지됩니다. 매 요청마다 연결을 새로 수립하는 오버헤드가 없습니다.
HTTP 헤더는 매 요청마다 전송되지만, WebSocket 프레임은 최소 2바이트의 헤더만 사용합니다. 데이터 전송 효율이 높습니다.
WebSocket은 HTTP 업그레이드 요청으로 시작합니다.
클라이언트 요청:
GET /chat HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
서버 응답:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: ...
101 Switching Protocols 응답 후 HTTP 프로토콜에서 WebSocket 프로토콜로 전환됩니다.
| 사례 | 이유 |
|---|---|
| 실시간 채팅 | 서버가 메시지 도착 시 즉시 전송 |
| 온라인 게임 | 낮은 지연, 양방향 통신 |
| 주식/코인 시세 | 서버 주도 실시간 업데이트 |
| 협업 도구 | 다수 사용자 동시 편집 동기화 |
| 항목 | WebSocket | SSE |
|---|---|---|
| 방향 | 양방향 | 서버 → 클라이언트 단방향 |
| 프로토콜 | ws:// / wss:// | HTTP |
| 재연결 | 수동 구현 | 자동 재연결 내장 |
| 브라우저 지원 | 매우 광범위 | IE 미지원 |
| 용도 | 채팅, 게임 | 알림, 피드 |
WebSocket도 TLS를 통해 암호화할 수 있습니다. ws://가 비암호화, wss://가 TLS 적용 버전입니다. 프로덕션 환경에서는 반드시 wss://를 사용해야 합니다.