Web Socket

곽태민·2023년 3월 24일
0

TIL

목록 보기
59/64

Web Socket


💡 웹 소켓 (Web Socket)은 두 프로그램 간의 메시지 교환을 위한 통신 방법 중 하나며, 현재 인터넷 환경에서 많이 사용되고 웹 소켓을 지원하는 브라우저의 경우에는 웹 소켓 프로토콜을 지원한다. 웹 소켓은 W3C와 IETF에 의해 자리잡은 표준 프로토콜 중 하나이다.

❗️ 특징

  • 양방향 통신 (Full - Duplex)
    • 데이터 송수신을 동시에 처리할 수 있는 통신 방법
    • 클라이언트서버가 서로에게 원할 때 데이터를 주고 받을 수 있다.
    • 통상적인 HTTP 통신은 Client가 요청을 보내는 경우에만 Server가 응답을 하는 단방향 통신이다.
  • 실시간 네트워킹 (Real Time - Networking)
    • 웹 환경에서 연속된 데이터를 빠르게 노출 ex) 채팅, 주식, 비디오 데이터

❓ 동작 방법

웹 소켓도 HandShaking이 필요하며, Socket 프로토콜이 아니라 HTTP or HTTPS 프로톨로 이루어진다.

웹 소켓 요청

  • HTTP 버전 = 1.1 이상.
  • 무조건 GET Method.
  • Upgade 정보는 서버, 전송, 프로토콜 연결에서 다른 프로토콜로 Upgrade or Update하기 위한 규칙.
  • Sec-WebSocket-Key는 클라이언트가 요청하는 서브 프로토콜을 의미.

웹 소켓 응답

101 Switching ProtocolsResponse로 오면 웹소켓이 연결된 것이다.

  • Sec-WebSocket-Accept는 요청에서의 Key값을 계산한 값으로 신원 인증에 필요한 데이터이다.
  • HandShake가 완료되면 프로토콜이 ws로 변경된다.
  • wss와 같이 데이터 보안을 위하여 SSL을 적용한 프로토콜로 변경된다.
  • 요약 정리
    • Message : 여러 Frame이 모여서 구서하는 하나의 논리적 메시지 단위
    • Frame : Communication에서 가장 작은 단위의 데이터, 작은 헤더 + Payload로 구성
    • WebSocket 통신에 사용되는 데이터 : UTF8 인코딩
    • 0x00 → 보낼 데이터 → 0xff 구성으로 진행

‼️ 웹 소켓 프로토콜의 특징

  • 최초 접속에만 HTTP 프로토콜 위에서 HandShaking을 하기 때문에 HTTP Header를 사용한다.
  • 웹 소켓을 위한 별도의 Port는 없으며, 기존 Port를 사용한다.
  • 프레임으로 구성된 메시지라는 논리적 단위로 송수신을 한다.
  • 메시지에 포함될 수 있는 교환 가능한 메시지는 Text & Binary 뿐이다.

🤔 웹 소켓의 한계

  • HTML5 이후에 나온 기술 웹 소켓은 HTML5 이후에 나왔으며, HTML5 이전의 기술로 구현이 된 서비스에는 Socket.io, SockJS와 같은 HTML5 이전의 기술로 구현된 서비스에서 웹 소켓처럼 사용할 수 있도록 도와주는 기술이다. 그래서 JS를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있고 WebSocket, FlashSocket, AJAX Long Polling 등등을 하나의 API로 추상화한 것이다.

    즉, 브라우저와 웹 서버의 종류와 버전을 파악하여 가장 적합한 기술을 선택해서 사용하는 방식이다.

  • WebSocket은 문자열들만 주고 받을 수 있고 그 외는 X 주고 받은 문자열의 해독은 오로지 앱에 맡긴다. HTTP는 형식을 정해두어 모두가 약속을 따르기만 하면 해석 할 수 있어도 WebSocket은 형식이 정해져 있지 않아 앱에서 쉽게 해석이 힘들다. 그래서 WebSocket 방식은 sub-protocols를 사용하여 주고 받는 메시지의 형태를 약속하는 경우가 많다. sub-protocol로 자주 사용하는 것은 STOMO다.
profile
Node.js 백엔드 개발자입니다!

0개의 댓글