Programming/Web

Web Socket 웹 소켓 개념 정리 (HTTP, Ajax)

Jan92 2021. 8. 26. 21:19

 

Web Socket 이전

 

웹 소켓이 나오기 전에 통신은 HTTP 통신, Ajax 통신을 사용했습니다.

이 두 가지 통신 방법은 HTTP를 기반으로 이루어졌으며 HTTP는 Request, Response 기반의 Stateless Protocol입니다.

stateless protocol은 클라이언트가 서버에 요청을 보내야만 응답을 얻을 수 있는 단방향 통신인데요.

이 경우 서버에 변경사항이 발생했을 때 서버는 클라이언트에 변경사항을 알릴 방법이 없다는 문제가 발생하게 됩니다.

 

이러한 문제를 해결하기 위해 요청을 보내지 않아도 서버에서 응답을 줄 수 있는 기술인 '웹 소켓 (Web Socket)'이 HTML5의 표준 기술로 개발되었습니다.

 

 

 

Web Socket 웹 소캣 개념 정리

 

웹 소켓(Web Socket)은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 양방향 컴퓨터 통신 프로토콜입니다. 서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술으로 Web Socket API를 통해 서버로 메시지를 보내고, 요청 없이 응답을 받아오는 것이 가능합니다. 현재 API는 W3C에서, 프로토콜은 IETF에서 관리하고 있습니다.

 

실시간 채팅, 게임, 주식 거래, 화상 채팅 등 Real-time Web Application 구현을 위해 사용됩니다.

웹 소켓의 프로토콜 표시는 ws (Web Socket), wss (Web Socket Secure)입니다.

 

Web Socket은 Stateful Protocol 이기 때문에 클라이언트와 한 번 연결되면 계속 같은 라인을 사용해서 통신할 수 있습니다.

또한 HTTP와 같은 포트 (80)을 사용하기 때문에 기업용 어플리케이션에 적용할 때 방화벽 관련된 설정을 따로 하지 않아도 된다는 장점이 있습니다.

 

 

  • 양방향 통신 (Full-Duplex)
    데이터 송수신을 동시에 처리할 수 있는 통신 방법으로 클라이언트와 서버가 서로에게 원할 때 데이터를 주고받습니다.
    (통상적인 HTTP 통신은 클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신)
  • 실시간 네트워킹 (Real Time-Networking)
    웹 환경에서 연속된 데이터를 빠르게 노출합니다. 여러 단말기에 데이터를 빠르게 교환합니다.

 

 

 

웹 소켓의 단점

  • 프로그램 구현에 보다 많은 복잡성을 초례합니다.
  • 웹 소켓은 HTTP와 다르게 Stateful Protocol의 특성 때문에 항상 클라이언트와 서버 간의 연결을 유지해야 하며, 비정상적으로 연결이 끊어졌을 경우에 대한 대응이 필요합니다.
  • 서버와 클라이언트 간의 Socket 연결을 유지하는 것 자체가 자원이 소모됩니다.
    (특히 트래픽 양이 많은 서버의 경우)
  • HTML5의 기술이기 때문에 이전 버전의 웹 브라우저에서 지원이 되지 않는다는 단점이 있습니다.

 

* 마지막 문제를 해결하기 위해 나온 기술 중 하나가 node.js 기반으로 만들어진 Socket.io라는 프레임워크입니다. 웹페이지가 열리는 브라우저가 웹 소켓을 지원하면 웹 소켓 방식으로 동작하고, 지원하지 않는다면 일반 HTTP를 이용하여 실시간 통신을 흉내 내는 것입니다.

 

 

 

 

웹 소켓 이전의 비슷한 기술들

 

Polling

: 클라이언트가 일정한 주기로 요청을 보내는 방식, 구현하기는 쉬우나 클라이언트가 계속 요청을 보내야 하기 때문에 불필요한 자원이 들고 서버에 부담이 생깁니다. (변경사항이 없는데도 계속 요청하고 응답받아야 하는 자원 낭비가 발생) 

 

 

Long Polling

: 클라이언트가 요청을 보내는 것은 동일하지만 Polling의 단점을 해소하기 위해 이벤트 내용이 있을 때까지 서버에서 조금 더 대기를 하여 이벤트가 발생했을 때 응답하는 방식입니다. Polling에 비해 요청량이 줄어들어 서버의 부담은 작아지지만, 결국 많은 양의 요청이 들어오면 Polling과 동일해집니다.

 

 

Streaming

: 서버에 요청을 보내고 끊기지 않은 연결 상태에서 끊임없이 데이터를 수신하는 방법입니다. 이벤트의 빈도수가 높을 경우는 Polling, Long Polling 보다 훨씬 효율적이지만 연결에 대한 유효성 관리라는 부담이 발생합니다. 또한 클라이언트에서 서버로의 데이터 송신이 어렵다는 단점이 있습니다.

 

 

* 위 세 가지 방식을 Commet이라고 통칭하며, HTTP를 통해 통신하기 때문에 request, response 모두 헤더가 불필요하게 크다는 공통적인 단점이 있습니다. (오버 헤드) 

 

 

 

 

 

 

참고 자료

https://kyleyj.tistory.com/59
https://kellis.tistory.com/61
https://oizys.tistory.com/39 

 

 

시작 전 함께 보면 좋은 글

 

(Web) HTTP 통신의 개념과 예제

HTTP (Hyper Text Transfer Protocol)란, 브라우저와 서버가 통신할 수 있도록 만들어주는 여러 프로토콜 가운데 한 종류로 웹 브라우저와 웹 서버 사이에 HTML(웹 문서를 만들기 위한 언어) 문서를 주고받

wildeveloperetrain.tistory.com

 

 

비동기 통신 Ajax 개념 (Asynchronous Javascript And Xml)

비동기 통신 Ajax 개념 (Asynchronus Javascript And Xml) ajax는 javascript의 라이브러리로, 클라이언트와 서버 간에 XML 데이터를 주고받는 비동기 통신입니다. (reload 없이 데이터를 불러오는 방식) HTTP 프..

wildeveloperetrain.tistory.com