네트워크 - Web Socket

Web Socket

웹 소켓 Web Socket

웹 소켓이란 두 프로그램 간의 메시지를 교환하기 위한 통신 방법 중 하나, 현재 HTML5 에서 많이 사용하는 방식이다.

WebSocket 프로토콜은 Text, Binary 두 가지 유형의 메세지를 정의하고 있지만 그 메세지의 내용까지는 정의하고 있지 않는다.

특징

  1. 양방향 통신 (Full-Duplex)
    • 데이터 송수신을 동시에 처리할 수 있는 통신 방법
    • 클라이언트와 서버가 서로에게 원할 때 데이터를 주고 받을 수 있다.
    • Http 통신은 Client 가 요청을 보내고 Server 가 요청에 대해 응답을 보내주는 단방향 통신
  2. 실시간 네트워킹
    • 웹 환경에서 연속된 데이터를 빠르게 노출할 수 있다.

Web Socket 이전 기술

위 기술들은 HTTP 위에서 동작하므로 Request, Response 둘다 Header 가 불필요하게 크다.

  • Polling
    • 서버로 일정 주기로 요청을 송신하는 방식이다.
    • Real-time 통신에서는 언제 통신이 발생할지 예측이 불가능 하므로 주기적으로 Request 와 Connection을 생성한다.
      • 불필요한 Request 와 Connection 을 위한 자원 Loss 가 발생
  • Long Polling
    • 서버에서 요청을 보내고 이벤트가 생겨 응답 받을 때 까지 연결을 종료하지 않는다. 응답을 받으면 귾고 다시 재요청을 한다.
    • 많은 양의 메시지가 쏟아질 경우 Polling 과 같다.
  • Streaming
    • 서버에 요청을 보내고 끊기지 않는 연결 상태에서 끊임 없이 데이터를 수신한다.
    • 클라이언트에서 서버로의 데이터 송신이 어렵다.

Web Socket 핸드 쉐이킹

  • HTTP, HTTPS 를 이용해 HandShaking 이 일어난다.
  • 핸드 쉐이킹이 완료 되면 HTTP, HTTPS 에서 ws, wss 로 프로토콜이 변경된다.
  • Close Frame 을 받게 되면 Connection 이 종료된다.

한계

  • HTML5 이전에 구현된 서비스에서는 Web Socket 을 사용할 수 없다.
  • Socket.io, SockJS 와 같은 기술을 통해 웹 소켓 처럼 사용할 수 있다.
  • 문자열들을 주고 받을 수 있게만 하는 역할
    • 문자열의 해독은 온전히 어플리케이션에서 처리해야 한다.
    • HTTP 는 형식을 정해 뒀기 때문에 형식에 맞춰 해석할 수 있다.
    • Web Socket은 형식이 정해져 있지 않아 어플리케이션에서 쉽게 해석하기 힘들다.
    • sub-protocols 을 이용해 주고 받는 메시지 형태를 약속한다.(ex. STOMP)
      • 채팅 통신을 위한 형식을 정의
      • HTTP 와 유사하게 간단히 정의 돼 해석하기 편한 프로토콜
      • Web Socket 위에서 사용된다.
Share