웹소켓(WebSocket)은 서버와 클라이언트가 동시에 데이터를 주고받을 수 있는 기술입니다.
전화 통화 방식과 매우 비슷한 구조를 가집니다.
| 단계 | 설명 |
|---|---|
| 연결(Handshake) | 전화를 거는 과정 ("여보세요? 들리세요?") |
| 유지 | 연결된 상태를 계속 유지 |
| 자유로운 대화 | 요청 없이도 서로 말을 건넬 수 있음 |
한 번 연결되면 끊기 전까지 계속 유지되고, 양방향으로 실시간 통신이 가능하다.
WebSocket은 기존 HTTP 요청을 기반으로 프로토콜을 업그레이드하여 실시간 양방향 통신을 수행하는 기술입니다.
HTTP를 대체하는 것이 아니라 HTTP에서 출발하여 WebSocket으로 변경(Upgrade) 되는 개념입니다.
| 프로토콜 | 설명 |
|---|---|
ws:// | 기본 WebSocket 연결 |
wss:// | HTTPS처럼 SSL 보안 적용된 WebSocket |
초기 요청은 HTTP GET 으로 전송됩니다.
📌 Client
GET /chat HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: (랜덤 키)
Sec-WebSocket-Version: 13
📌 Server
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: (계산된 응답 키)
➡ 의미:
"HTTP로 만나서 WebSocket으로 대화하자" 라는 합의 완료.
HTTP → WebSocket 으로 변경되고 연결이 유지됩니다.
🔹 HTTP
🔹 WebSocket
| HTTP Polling | WebSocket |
|---|---|
| 계속 요청 필요 | 요청 없이 push 가능 |
| 지연 발생 가능 | 지연 최소화 |
| 불필요한 트래픽 | 효율적 |
| 서버 먼저 전송 불가 | 서버 → 클라이언트 가능 |
📌 주요 사용 사례
WebSocket은 TCP 위에서 동작합니다.
TCP는 인터넷의 안전하고 정확한 배송 서비스라고 할 수 있습니다.
| 기능 | 설명 |
|---|---|
| 신뢰성 | 패킷이 제대로 갔는지 ACK 확인 |
| 순서 보장 | 순서가 바뀌어도 원래대로 정렬 |
| 연결 지향 | 통신 전 반드시 연결 수립 |
| 단계 | 메시지 | 의미 |
|---|---|---|
| 1 | SYN | 접속 요청 |
| 2 | SYN + ACK | 요청 수락 + 서버도 요청 |
| 3 | ACK | 최종 수락 |
➡ 이후 데이터 전송이 시작됩니다.
| 항목 | WebSocket | TCP |
|---|---|---|
| 레이어 | 응용 계층 | 전송 계층 |
| 역할 | 실시간 통신 | 안정적 데이터 전달 |
| 기반 | TCP 기반 | 원천 기술 |
📌 WebSocket이 실시간 통신을 효율적으로 수행할 수 있는 이유
→ TCP가 순서 보장 + 신뢰성 + 연결 유지를 제공하기 때문입니다.
| 기존 방식 (HTTP Polling) | WebSocket |
|---|---|
| 지속적인 요청 발생 | 연결 유지 |
| 지연 발생 | 지연 최소 |
| 서버 Push 불가 | 서버 Push 가능 |
| 트래픽 낭비 | 효율적 통신 |