카테고리 없음

WebSocket

sihanni 2024. 11. 12. 02:32
먼저 읽기 좋은글

https://sihanni.tistory.com/115

 

HTTP, REST, RESTful API

같이 읽으면 좋은 글https://sihanni.tistory.com/88 캐시 확인 -> 캐시가 없다면 dns에서 IP 질의 or 캐시에 있다면 -> 브라우저와 서버가 TCP 연결 -> HTTP 요청과 응답 -> " data-og-host="sihanni.tistory.com" data-og-sourc

sihanni.tistory.com

 

주요 키워드
실시간, 양방향 통신, 짧은 대기시간, 지속적인 연결, ws, wss, 
1. 웹소켓의 개념
웹 애플리케이션에서 양방향 통신을 가능하게 하는 프로토콜
웹소켓과 HTTP 프로토콜 모두 OSI 모델 7계층에 위치하여 TCP 연결을 기반으로 한다.
웹소켓은 HTTP 포트(40), *HTTPS 포트(443) 위에서 동작하며, HTTP 업그레이드 헤더를 사용하여 HTTP 프로토콜에서 웹소켓 프로토콜로 변경한다.
단방향 방식인 HTTP와 달리 웹소켓은 양방향 통신을 가능하게 하여 서버와 클라이언트의 지속적인 연결을 유지할 수 있다.

 

2. 웹소켓 동작 원리

 

HTTP 프로토콜을 기반으로 하고, 웹소켓 핸드셰이크 이후에는 웹소켓 프로토콜로 전환되어 양방향 통신을 유지한다.

1개의 지속적 연결을 통해 데이터를 실시간으로 송수신하게 한다.

 

웹소켓 연결 과정

 

핸드쉐이크 단계

 

1. 클라이언트 요청

클라이언트는 웹소켓 연결을 요청할 때 HTTP GET 요청을 보내면서 Upgrade 헤더를 추가하여 웹소켓 프로토콜로 전환을 요청

브라우저에서 HTTP 통신을 통해 서버에 소켓 통신이 가능한지 요청을 보낸다.

이 때 헤더에는 Upgrade, Connection, Websocket 관련 정보가 포함되어있는 것을 확인할 수 있다.

 2. 서버 응답

서버는 이를 받아들이면 101 Switching Protocols 상태 코드와 함께 웹소켓 연결을 수락하는 응답을 반환한다.

서버에서는 웹 소켓 통신이 가능하다면 웹 소켓 통신이 가능하다고 HTTP status code 101로 프로토콜 변경을 응답한다.

이때 서버는 클라이언트에서 받은 Sec-WebSocket-Key에 문자를 더해 암호화한 Sec-WebSocket-Accept 를 클라이언트에 응답한다.

 

 3. 연결 성립


서버와 클라이언트가 웹소켓 프로토콜로 전환되면, 연결이 성립되고 이후 데이터 전송은 웹소켓 프로토콜(ws, wss)을 사용하여 이루어 진다. 데이터는 프레임 형태로 전송되며, 클라이언트와 서버가 언제든지 데이터를 주고받을 수 있다.

 

웹소켓 메시지 프레임

웹소켓에서 데이터를 전송할 때 프레임이라는 단위로 데이터를 송수신하는데, 각 프레임은 다음과 같은 정보를 포함한다.

  • Opcode : 오퍼코드, 메시지의 종류를 나타낸다 (텍스트 메시지, 바이너리 메시지 등)
  • Payload 데이터 : 실제 전송할 데이터 본문
  • Mask : 클라이언트가 전송하는 메시지에는 마스크를 적용하여 보안상의 이유로 메시지를 변환한다.

 

3. 웹소켓의 특징

  • 양방향 통신
  • 지속적 연결
  • 낮은 대기 시간
  • 헤더가 적다 ( 초기 핸드쉐이크 이후 추가적인 헤더 없이 데이터를 전송하므로 )

4. 사용 사례

  • 실시간 채팅 앱
  • 게임
  • 주식 거래
  • 실시간 알림 시스템
  • 실시간 데이터 스트리밍

5. 단점

  • 중요한 데이터 전송은 wss://를 사용하자
  • 웹소켓 연결은 서버와 지속적으로 연결을 유지하기 때문에, 많은 수의 동시 연결을 처리하는데 부담이 있을 수 있다.
    로드 밸런싱, 분산 서버 구조 등을 고려할 필요가 있다.
  • 연결이 끊기거나 네트워크 장애가 발생했을 때 재연결 로직이나 연결 유효성 검사가 필요하다.

6. 결론

웹소켓을 사용하면 서버와 클라이언트 간에 지속적인 연결을 유지하면서 데이터를 즉시 전달할 수 있어 대기 시간을 최소화하고 성능을 최적화할 수 있다.