HTTP는 「요청 → 응답」 구조로, 서버가 먼저 클라이언트에 데이터를 보낼 수 없습니다.
실시간 채팅·알림·주식 시세 같은 「푸시」가 필요할 때 WebSocket을 씁니다.
한 번 연결해 두면 양방향으로 자유롭게 메시지를 주고받습니다.
프로토콜 흐름.
처음에 HTTP로 「Upgrade: websocket」 헤더로 요청 → 서버가 101 Switching Protocols 응답 → 그 후로는 TCP 연결 위에서 양방향 메시지.
ws://(평문)나 wss://(TLS)로 식별.
FastAPI 예시.
@app.websocket("/ws") async def ws(websocket: WebSocket): await websocket.accept(); while True: data = await websocket.receive_text(); await websocket.send_text(f"echo: {data}").
클라이언트와 메시지 핑퐁.
Django는 channels 패키지가 WebSocket 지원.
ASGI 기반으로 동작하며, 그룹·채널 추상화로 「채팅방의 모든 사용자에게 메시지 보내기」가 쉽습니다.
사용 사례 — 실시간 채팅(슬랙·디스코드), 라이브 시세(주식·코인), 협업 도구(구글 닥스 동시 편집), 멀티플레이어 게임, 실시간 알림.
폴링·롱폴링보다 효율적이지만 「상시 연결」이라 서버 자원 관리가 더 까다롭습니다.
한 줄 요약
WebSocket은 한 번 연결로 양방향 메시지를 주고받는 프로토콜입니다.
HTTP의 단방향 한계를 넘어 실시간 채팅·시세·알림에 사용합니다.
더 알아볼 것
- Server-Sent Events vs WebSocket
- Django Channels
- socket.io — 폴백 포함된 라이브러리