🔌 웹소켓이란?
📖 정의
WebSocket은 클라이언트와 서버 간의 양방향 실시간 통신을 가능하게 하는 프로토콜입니다. HTTP와 달리 한 번 연결되면 지속적으로 연결을 유지하며, 서버에서 클라이언트로 먼저 데이터를 보낼 수 있습니다(push). 채팅, 실시간 알림, 게임, 협업 도구 등에 사용됩니다.
🎯 비유로 이해하기
전화 vs 우편
HTTP (우편)
├─ 편지 보내기 (요청)
├─ 답장 받기 (응답)
├─ 다시 편지 쓰기 (요청)
└─ 매번 새로운 편지 필요 (오버헤드)
WebSocket (전화)
├─ 한 번 전화 연결
├─ 계속 대화 가능
├─ 양쪽 모두 먼저 말할 수 있음
└─ 끊기 전까지 연결 유지
택배 vs 직통 파이프
HTTP
┌─────────┐ 요청 ┌─────────┐
│클라이언트│ ──────────→ │ 서버 │
└─────────┘ └─────────┘
┌─────────┐ 응답 ┌─────────┐
│클라이언트│ ←────────── │ 서버 │
└─────────┘ └─────────┘
매번 새 연결!
WebSocket
┌─────────┐ ┌─────────┐
│클라이언트│ ←─────────→ │ 서버 │
└─────────┘ 지속 연결 └─────────┘
↕ 양방향
⚙️ 작동 원리
1. WebSocket 연결 과정
1. HTTP로 핸드셰이크 요청
GET /chat HTTP/1.1
Upgrade: websocket
Connection: Upgrade
2. 서버 승인
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
3. WebSocket 연결 수립
↕ 양방향 통신 시작
4. 데이터 전송
메시지 ←→ 메시지 ←→ 메시지
5. 연결 종료
close() 호출
2. HTTP vs WebSocket
HTTP (단방향, 요청-응답)
클라이언트 → 서버: 요청
클라이언트 ← 서버: 응답
[연결 종료]
WebSocket (양방향, 지속)
클라이언트 ↔ 서버
- 서버가 먼저 메시지 전송 가능
- 연결 유지
- 실시간 통신