WebSocket은 하나의 지속 연결 위에서 클라이언트와 서버가 양방향으로 자유롭게 메시지를 주고받을 수 있게 하는 프로토콜입니다.
HTTP 요청-응답의 한계를 벗어나, 서버가 먼저 데이터를 밀어 넣을 수 있어 채팅·실시간 협업·게임·라이브 시세 같은 실시간 애플리케이션에 적합합니다.
연결은 HTTP로 시작합니다. 클라이언트가 `Upgrade: websocket` 헤더로 업그레이드를 요청하면 서버가 `101 Switching Protocols`로 응답하고, 이 순간부터 같은 TCP 연결이 HTTP를 벗어나 전이중(full-duplex) WebSocket 프레임 통신으로 전환됩니다. 이후에는 요청마다 헤더를 반복하지 않아 오버헤드가 작고, 지연이 낮은 실시간 메시징이 가능합니다. URL 스킴은 `ws://`(평문)·`wss://`(TLS)를 씁니다.
SSE와의 비교가 흔한 결정 포인트입니다. SSE는 서버→클라이언트 '단방향' 텍스트 스트림으로 일반 HTTP 위에서 동작해 구현·프록시·재연결이 단순합니다. WebSocket은 '양방향'에 이진 데이터도 다루지만 자체 프로토콜이라 인프라·인증·재연결·상태 관리가 더 복잡합니다. 따라서 서버 알림·실시간 피드처럼 단방향이면 SSE가, 채팅·협업 편집처럼 클라이언트도 활발히 보내야 하면 WebSocket이 적합합니다. 운영상 로드 밸런서·프록시가 오래 유지되는 연결과 업그레이드를 지원해야 하고, 하트비트(ping/pong)로 죽은 연결을 감지합니다.