웹소켓(WebSocket) 연결이 맺어질 때의 절차는 HTTP를 이용한 핸드셰이크를 통해 시작되고, 이후에는 양방향 실시간 통신이 가능한 TCP 연결로 전환됩니다. 다음은 그 과정을 단계별로 설명한 내용입니다:
---
✅ 1. 클라이언트의 연결 요청 (HTTP 핸드셰이크)
클라이언트(보통 브라우저)는 HTTP 프로토콜을 통해 WebSocket 연결 요청을 서버에 보냅니다.
요청에는 다음과 같은 특별한 헤더들이 포함됩니다:
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
주요 헤더 설명:
Upgrade: websocket: HTTP에서 WebSocket으로 프로토콜 변경 요청
Connection: Upgrade: 연결을 업그레이드하겠다는 의미
Sec-WebSocket-Key: 클라이언트가 제공하는 임의의 문자열 (서버가 응답할 때 사용)
Sec-WebSocket-Version: 사용하는 WebSocket 프로토콜 버전 (보통 13)
---
✅ 2. 서버의 응답 (핸드셰이크 수락)
서버는 위 요청을 확인한 후, 조건이 맞으면 다음과 같이 응답하여 WebSocket 업그레이드를 승인합니다:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Accept는 클라이언트의 Sec-WebSocket-Key를 기반으로 서버가 생성한 응답값 (SHA-1 해시 + Base64 인코딩)
---
✅ 3. WebSocket 연결 수립
위 응답까지 성공하면 HTTP에서 WebSocket 연결로 업그레이드됩니다.
이후부터는 프레임 단위의 양방향 통신이 가능해지며, 클라이언트와 서버는 실시간으로 메시지를 주고받을 수 있습니다.
---
✅ 4. 양방향 통신 시작
텍스트, 바이너리 데이터 등 다양한 형식의 메시지를 주고받을 수 있습니다.
연결은 닫을 때까지 지속되며, 하나의 TCP 연결 위에서 실시간으로 동작합니다.
---
✅ 요약
단계 설명
1 클라이언트가 HTTP 요청으로 Upgrade: websocket 핸드셰이크 시도
2 서버가 101 Switching Protocols로 응답하여 업그레이드 승인
3 WebSocket 프로토콜로 전환 후 연결 수립
4 양방향 통신 시작 (실시간 메시지 전송 가능)
'Spring & Backend' 카테고리의 다른 글
| 타입스크립트의 infer 키워드에 대해서 설명해주세요. (0) | 2025.07.09 |
|---|---|
| @OneToOne 연관관계에서 Lazy Loading을 설정할 때 주의할 점은 무엇일까요? (4) | 2025.07.09 |
| BFF(Backend For Frontend)란 무엇인가요? (0) | 2025.07.08 |
| Infrastructure as Code(IaC)에 대해 설명해 주세요. (0) | 2025.07.08 |
| 네트워크에서 회선 교환 방식과 패킷 교환 방식은 어떤 차이점 있나요? (0) | 2025.07.04 |
