본문 바로가기
우아한 테크톡

웹 소켓 (Web Socket)

by 전재경 2023. 1. 11.

웹 소켓 (Web Socket)

두 프로그램 간의 메세지를 교환하기 위한 통신 방법 중 하나.

웹 소켓의 특징

양방향 통신(Full-Duplex)

  • 데이터 송수신을 동시에 처리할 수 있는 통신
  • 클라이언트와 서버가 서로에게 원할 때 데이터를 주고 받을 수 있음
  • 통상적인 http 통신은 client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신

실시간 네트워킹(Real Time-Networking)

  • 웹 환경에서 연속된 데이터를 빠르게 노출
  • 채팅, 주식, 비디오 데이터
  • 여러 단말기에 빠르게 데이터를 교환

 

웹 소켓 이전에 비슷한 기술

1. Polling

서버로 일정 주기 요청 송신

2. Real-time

  • 통신에서는 언제 통신이 발생할지 예측이 불가능
  • 불필요한 request와 connection을 생성

3. Real-time

  • 통신이라고 부르기 애매할 정도의 실시간성

4. Long Polling

  • 서버에 요청 보내고 이벤트가 생겨 응답 받을때까지 연결 종료X
  • 응답 받으면 끊고 다시 재요청

5. Streaming

  • 서버에 요청 보내고 끊기지 않은 연결상태에서 끊임없이 데이터 수신
  • 클라이언트에서 서버로의 데이터 송신이 어렵다.

 

1. 웹 소켓 요청(Request) 시 동작 방법 - 핸드 쉐이킹

http(80) or https(443) → http(80) or https(443)

[1. GET / chat HTTP/1.1]

반드시 Get Method를 사용해야 하고, HTTP 버전은 1.1이상

[2. Host : server.example.com]

  • 웹소켓 서버의 주소

[3. Upgrade : websocket]

  • 현재 클라이언트, 서버, 전송 프로토콜 연결에서 다른 프로토콜로 업그레이드 또는 변경하기 위한 규칙

[4. Connection : Upgrade]

  • Upgrade 헤더 필드가 명시되었을 경우, 송신자는 반드시 Upgrade 옵션을 지정한 Connection 헤더 필드도 전송

[5. Sec-WebSocket-Key : dGhllHNgnXBSZSBub25jZQ ==]

  • 클라이언트와 서버간의 신원을 인증한다.

[6. Origin : http //example.com]

  • 클라이언트로 웹 브라우저를 사용하는 경우에 필수항목, 클라이언트 주소

[7. Sec-WebSocket-Protocol : chat, superchat]

  • 클라이언트가 요청하는 여러 서브프로토콜을 의미
  • 공백문자를 구분하며 순서에 따라 우선권 부여
  • 서버에서 여러 프로토콜 혹은 프로토콜 버전을 나워 서비스할 경우 필요한 정보

[8. Sec-WebSocket-Version: 13]

 

2. 웹 소켓 응답(Response) 시 동작 방법- 핸드 쉐이킹

(1) 101 Switching Protocols가 Response로 오면 웹소켓이 연결 ← HTTP/1.1 101 switching Protocols

(2) 클라이언트로부터 받은 Sec-WebSocket-Key를 사용하여 계산된 값
(클라이언트에서 계산한 값과 일치하지 않은 경우 연결 수립X)
↑ Sec-WebSocket-Key : s3pPLMBiTxaQ9kYGzzhZRbk+xOo

3. 웹 소켓 동작 방법 - 프레임

프레임 헤더 구조

opCode(operate Code)

Continue(0x0) : 전체 메세지의 일부임을 의미

  • Text(0x1) : 포함된 데이터가 UTF-8 텍스트라는 것을 의미
  • Binary(0x2) : 포함된 데이터가 이진 데이터라는 의미
  • close(0x8) : Close 핸드쉐이크를 시작한다는 의미

Length : 이 프레임에 포함된 데이터의 총 길이를 나타내는 단위

 

4. 웹 소켓 동작 방법 - 데이터 전송

Close Frame을 주고 받으면 연결 종료

 

5. 정리

브라우저가 웹서버에게 websocket 사용 가능 여부 확인 (with. magic key)

  1. 웹서버에서 브라우저에 웹 소켓 준비됐다고 하고 연결 시작.
  2. 0x00과 0xff 사이에 utf-8로 인코딩된 payload를 사이에 넣어서 데이터를 교환.
  3. 연결 종료 신호를 주고 받아서 연결 종료.

6. 웹 소켓 프로토콜 특징

  1. 최초 접속에서만 http 프로토콜 위에서 handshaking을 하기 때문에 http header를 사용한다.

웹소켓을 위한 별도의 포트는 없으며, 기존 포트(http-80, https-443)을 사용.

  1. 프레임으로 구성된 메세지라는 논리적 단위로 송수신.
  2. 메시지에 포함될 수 있는 교환 가능한 메세지는 텍스트와 바이너리

 

 

'우아한 테크톡' 카테고리의 다른 글

CI/CD와 무중단 배포  (0) 2023.01.13
Servlet vs Spring  (0) 2023.01.12
AOP와 Spring AOP  (0) 2023.01.11
Spring과 Spring Boot의 차이  (0) 2023.01.11
JVM Stack & Heap  (0) 2023.01.10

댓글