본문 바로가기

CS & ITS/CS

소켓(Socket)과 웹소켓(WebSocket) 차이점

더보기

소켓과 웹소켓의 차이점을 살펴보고 관련 기술 용어에 대해서 정리합니다.

소켓(Socket)이란?

네트워크 환경에서 두 노드 간의 양방향 통신을 위한 연결 지점을 의미합니다.

더보기

일반적으로 통신의 대상이 되는 노드는 프로그램을 지칭하며 앤드포인트(Endpoint)라고도 부릅니다.

  • 네트워크 통신을 위해서 앤드포인트 간에 소켓을 생성합니다.
  • 소켓은 앤드포인트 내 유일한 포트(Port) 번호와 매핑됩니다.
  • 앤드포인트 내 여러 개의 포트가 열려있더라도 포트 번호에 따라서 소켓을 특정 할 수 있습니다.

소켓을 구성하려면 TCP/IP 프로토콜 또는 웹소켓을 이용합니다.

소켓과 폴링(Polling)

소켓의 주요한 특징은 양방향 통신이라는 점입니다.

이를 기존의 HTTP 프로토콜에서 구현하기 위해서는 폴링(Polling)이라고 부르는 패턴으로 모킹하는 방법이 있습니다.

  • HTTP 서버는 클라이언트에 패킷을 보낼 수 없으므로 메시지 큐(Message queue)에 패킷을 저장합니다.
  • HTTP 클라이언트는 서버에 주기적으로 폴링 요청을 보냅니다.
  • HTTP 서버는 클라이언트의 폴링 요청에 대한 응답으로 메시지 큐에 쌓여있는 패킷을 전달합니다.

웹소켓(WebSocket)이란? 소켓과의 차이점

폴링을 사용한 양방향 통신 구현은 크게 두 가지 문제점을 갖습니다.

  • 별도의 메시지 큐를 생성하고 메모리/디스크 등에서 패킷을 저장/관리하기 위한 정책이 필요합니다.
  • 클라이언트의 폴링 요청이 시간적으로 최적화 되는 경우 반응성이 떨어집니다.

특히 반응성에 대한 문제는 폴링을 구현하는 개발자의 가장 큰 걱정입니다. 반응성을 높이려면 잦은 HTTP 통신으로 인해 성능상 대척점을 갖기 때문입니다.

이에 2011년 HTTP 레이어에서 동작하는 양방향 통신 소켓으로써 웹소켓(WebSocket)이 등장하며 RFC 6455로 표준화됩니다.

웹소켓의 등장으로 실시간 통신을 위한 TCP 포트(80)을 사용하면서도 HTTP 프로토콜과 호환되는 양방향 통신이 가능해집니다.

더보기

웹소켓은 HTML5에서 소개된 기술로, 웹 브라우저마다 이를 지원하는 버전이 상이합니다.

웹소켓의 프로토콜 표시는 WS(WebSocket) 또는 WSS(WebSocket Secure)입니다.

웹소켓은 사실 TCP 소켓과 완전히 구분되는 것은 아니며, TCP 소켓을 추상화한 기술입니다.

  소켓 웹소켓
통신 방향 IP와 포트를 통한 양방향 통신을 지원합니다.
프로토콜 레이어 TCP/IP 레이어(4계층)에서 동작합니다. HTTP 레이어(7계층)에서 동작합니다.
데이터 전송 양식 바이트  스트림을 사용해 데이터를 전송합니다. 메시지 형식의 데이터를 전송합니다.

롱 폴링(Long polling)

폴링 방식의 문제점 중 하나인 성능 저하를 튜닝하기 위한 기술입니다.

롱 폴링을 사용하면 클라이언트의 폴링 요청을 즉시 응답하지 않고, 웹 서버에서 새로운 패킷이 발생한 경우 응답합니다.

물론 롱 폴링 역시 HTTP 기반이기 때문에 타임아웃(Timeout)과 같은 한계를 갖고 있습니다.

정리 및 복습

  • 소켓(Socket)이란 네트워크 환경에서 두 개의 앤드포인트를 연결하는 지점입니다.
  • 일반적으로 소켓은 TCP/IP기반의 소켓을 의미하며 양방향/실시간 통신을 지원합니다.
  • HTTP에서 양방향 통신을 구현하려면 폴링(Polling) 패턴을 사용합니다.
  • 폴링 패턴의 성능상 문제를 해결하기 위한 방법 중 하나는 롱 폴링(Long polling)입니다.
  • HTTP에서 양방향/실시간 통신 구현을 위한 기술이 웹소켓(WebSocket)입니다.
  • 웹소켓은 TCP 포트(80)을 사용하는 동시에 기존 HTTP와 호환됩니다.