웹 브라우저와 서버 간의 양방향 통신을 가능하게 하는 프로토콜이다. 기존의 HTTP 기반 통신 방식(예: AJAX, REST API)은 클라이언트가 요청해야만 서버가 응답하는 단방향 통신이지만, 웹 소켓은 한 번 연결을 맺으면 서버와 클라이언트가 서로 자유롭게 데이터를 주고받을 수 있는 실시간 양방향 통신을 지원한다.
✅ 풀 듀플렉스(Full Duplex) 통신
→ 서버와 클라이언트가 동시에 데이터를 주고받을 수 있음.
✅ 오버헤드 감소
→ HTTP 요청-응답 방식에서는 데이터를 주고받을 때마다 새로운 요청을 보내야 하지만, 웹 소켓은 한 번 연결되면 계속 유지되므로 불필요한 헤더 정보가 없어 네트워크 비용이 적음.
✅ 낮은 지연 시간(Latency)
→ 웹 소켓은 연결을 유지한 상태에서 데이터를 보내므로, 일반 HTTP 요청보다 훨씬 빠르게 데이터를 주고받을 수 있음.
✅ 실시간성(Real-time)
→ 채팅, 온라인 게임, 실시간 알림, 주식 거래, IoT 등에서 실시간 데이터 전송이 필요한 경우에 사용됨.
웹 소켓은 기본적으로 핸드셰이크(Handshake) 과정을 거쳐 연결을 설정한 후, 지속적으로 데이터를 주고받는다.
웹 소켓은 HTTP 프로토콜을 이용해 연결을 시작하지만, 핸드셰이크가 완료되면 TCP 기반의 웹 소켓 연결로 전환된다.
Upgrade: websocket 헤더를 포함하여 웹 소켓 연결 요청을 보냄. 101 Switching Protocols 응답을 보냄. close() 메서드를 호출하여 정상적으로 종료하거나, 네트워크 단절로 인해 강제 종료될 수도 있음. | 비교 항목 | HTTP 요청-응답 방식 | WebSocket |
|---|---|---|
| 통신 방식 | 단방향 (Request-Response) | 양방향 (Full Duplex) |
| 연결 유지 | 요청할 때마다 새 연결 | 한 번 연결 후 유지 |
| 속도 | 요청 시마다 대기 시간 발생 | 실시간 처리 가능 |
| 오버헤드 | 헤더 포함 요청 전송 | 초기 핸드셰이크 후 오버헤드 적음 |
| 사용 예시 | REST API, 폼 제출 | 채팅, 실시간 알림, 게임, IoT |