Backend/Socket

[Socket] 웹소켓 (WebSocket)

BenKangKang 2024. 5. 28. 05:21

웹소켓(WebSocket)?

- 양방향 통신 웹소켓은 웹 브라우저와 서버 간의 양방향 통신을 가능하게 하기 위해 설계된 프로토콜

 

과정

1. 핸드셰이크(Handshake)

- 웹소켓 연결은 표준 HTTP(S) 요청을 통해 초기화됨.

- 클라이언트가 서버에 웹소켓 연결을 요청하고, 서버가 이를 수락하면 HTTP 연결이 웹소켓 연결로 업그레이드됨.

  - 클라이언트가 서버에 보낸 HTTP 요청에는 Upgrade: websocket 헤더가 포함

  - 서버가 이를 수락하면 응답에 101 Switching Protocols 상태 코드와 함께 웹소켓 프로토콜로의 업그레이드를 명시

// 클라이언트 요청 예시
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

// 서버 응답 예시
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

2. 지속적인 연결(Persistent Connection)

- HTTP 요청-응답 모델과 달리, 웹소켓은 연결이 수립된 후 지속적인 연결 상태를 유지.

- 이를 통해 클라이언트와 서버는 언제든지 서로에게 메시지를 보낼 수 있음.

- 연결이 열린 상태에서는 클라이언트와 서버 모두가 데이터를 전송할 수 있으며, 이로 인해 양방향 통신이 가능.

3. 양방향 데이터 전송(Bi-Directional Data Transfer)

- 웹소켓 프로토콜은 양방향 데이터 프레임을 정의.

- 클라이언트와 서버는 각각 독립적으로 데이터를 전송할 수 있으며, 이는 풀 듀플렉스 통신을 허용.

- 클라이언트가 서버로 데이터를 전송하고, 서버는 이를 처리한 후 클라이언트에게 응답을 보낼 수 있음.

- 이 과정은 연속적으로 이루어지며, 양방향 통신을 실현.

 

좋은 자료

- https://ko.javascript.info/websocket