"WebSocket 이 REST 의 대체 아냐. REST 가 잘 답 못 하는 specific 질문 하나에 대한 답: '양 측이 언제든 메시지 보내야.' 그 선이 어디 떨어지는지 알면 over-engineering 과 under-engineering 둘 다 피해."
REST 에서 WebSocket 까지 spectrum
가장 덜 real-time 에서 가장 real-time:
- REST request/response — Client 물음, server 답, 끝. CRUD 와 ad-hoc query 에 best.
- Polling — REST 반복. 견딜 만한 지연, 단순.
- Long-polling — Response 보유하는 REST. 낮은 지연, pending client 당 더 많은 server 비용.
- SSE — HTTP 위 one-way streaming. Server push; client 받음. AI token, 알림, real-time log.
- WebSocket — Full-duplex 영속 연결. 양 측이 서로 독립적으로 언제든 메시지 보냄.
각 step 이 capability 위해 단순함 trade. WebSocket 이 가장 capable AND 운영적으로 가장 비쌈 — 실제 필요할 때 선택.
WebSocket 선택 위한 테스트 셋
1. 양방향성. CLIENT 도 일반 request 넘어 real-time 으로 server 한테 메시지 push 필요? 채팅 "입력 중..." 표시, 멀티플레이어 게임 입력, 협업 커서 위치 — yes. AI 채팅 (user 가 메시지 하나 보내고, server 가 response stream, 반복) — no, SSE + 일반 POST 면 충분.
2. 지연 예산. 허용 end-to-end 지연이 ~100ms 아래? 트레이딩 플랫폼, 라이브 커서 추적 — yes. 대부분 채팅 UI — no, SSE + POST 가 괜찮.
3. 메시지 빈도. Client 당 초당 작은 메시지 많이 보내? 30Hz 게임 상태 update — yes. 분 당 몇 알림 — no, SSE 이김.
셋 다 NO 답할 수 있으면 REST + SSE 가 거의 항상 맞는 선택. 하나라도 YES 면 WebSocket 매력 시작.
WebSocket 이 HTTP 위 어떻게 setup
WebSocket 연결이 upgrade header 가진 일반 HTTP/1.1 request 로 시작. Server 가 의향 있으면 101 Switching Protocols 로 응답, 그 후 아래 TCP 연결이 WebSocket frame stream 됨:
GET /ws/chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
101 후, 양 측이 WebSocket frame 교환 — 작은 binary header + payload. 어느 측이 닫을 때까지 연결 열림.
흔한 하이브리드
많은 production 앱이 REST 와 WebSocket 둘 다 씀: 상태 관리와 query (login, history fetch, draft 저장) 엔 REST, live 채널 (채팅 메시지, live 편집, presence) 엔 WebSocket. 상태와 history 가 REST-접근 가능 resource 에 살고; WebSocket 이 그것들 mutate 하는 event 운반. 각 측이 REST view update; WebSocket 이 모든 듣는 사람한테 뭐 변했는지 announce.