Web

웹 소켓이란?

JUNGKEUNG 2021. 7. 4. 22:03

웹 소켓(Websocket)이란


두 프로그램 간의 메시지를 교환하기 위한 통신 방법 중 하나이며 현재 인터넷 환경(HTML5)에서 많이 사용된다.

 

Websocket API를 통해 서버로 메세지를 보내고, 요청 없이 응답을 받아오는 것이 가능하다. 현재 API는 W3C에서 관장하고 있으며 프로토콜은 IETF에서 관리하고 있다. 별도의 포트를 사용하지 않고 HTTP와 같은 80번 포트를 사용하고 있는데, 이 때문에 client인 웹 브라우저뿐만 아니라 Web Server도 기능을 지원하고 있어야만 한다.

 

 

 

웹소켓을 사용하는 이유


웹 어플리케이션에서 기존의 서버와 클라이언트 간의 통신은 대부분 HTTP를 통해 이루어 졌으며 HTTP Request/response기반의 Stateless protocol이다. 즉, 서버와 클라이언트 간의 Socket connection같은 영구적인 연결이 되어있지 않고 클라이언트 쪽에서 필요할 때 Request를 할 때만 서버가 Response를 하는 방식으로 통신이 진행되는 일방향 통신이다.  이럴 경우 서버 쪽 데이터가 업데이트 되더라도 클라이언트 쪽에는 화면은 Refresh하지 않는 한 변경된 데이터가 업데이트 되지 않는 문제가 발생한다.

이런 문제는 일반적인 웹 어플리케이션에선 기존의 있던 임시방편인 Long polling이라던가 Ajax를 사용해도 어느 정도 해결이 가능하지만 데이터의 빠른 업데이트가 중요한 어플리케이션에서는 실시간 업데이트가 필요하기 때문에 Web Socket이  사용되고 있다.

Web Socket은 Stateful protocol이기 때문에 클라이언트와 한 번 연결이 되면 계속 같은 라인을 사용해서 통신하기 때문에 HTTP 사용 시 필요 없이 발생되는 HTTP와 TCP연결 트래픽을 피할 수 있다. 마지막으로  Web Socket은 HTTP와 같은 포트(80)을 사용하기에 기업용 어플리케이션에 적용할 때 방화벽은 재설정 하지 않아도 되는 장점이 있다.



 

 

웹 소켓의 특징


1. 양방향 통신(Full - Duplex)

  • 데이터 송수신을 동시에 처리할 수 있는 통신 방법
  • 클라이언트와 서버가 서로에게 원할 때 데이터를 주고 받을 수 있다.
  • 통상적인 Http 통신은 Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신

2. 실시간 네트워킹 (Real Time-Networking)

  • 웹 환경에서 연속된 데이터를 빠르게 노출ex) 채팅, 주식, 비디오 데이터(youtube)
  • 여러 단말기에 빠르게 데이터를 교환

3. 웹 소켓 작동 원리

서버에 클라이언트 간의 WebSoket연결은 HTTP프로토콜을 통해 이루어진다. 만약 연결이 정상적으로 이루어 진다면 서버와 클라이언트 간에 WebSoket연결이 이루어지고 일정 시간이 지나면 HTTP연결은 자동으로 끊긴다.

 

 

 

비슷한 기술


Polling

  • 서버로 일정 주기 요청 송신
  • real-time 통신에서는 언제 통신이 발생할지 예측이 불가능 불필요한 request와 connection을 생성
  • Real-time 통신이라고 부르기 애매할 정도의 실시간성

Long Polling

  • 서버에 요청 보내고 이벤트가 생겨 응답 받을 때 까지 연결 종료X응답 받으면 끊고 다시 재요청
  • 많은 양의 메세지가 쏟아질 경우 Polling과 같다

Streaming

  • 서버에 요청 보내고 끊기지 않은 연결상태에서 끊임없이 데이터 수신 클라이언트에서 서버로의 데이터 송신이 어렵다.

 

 

 

참고 자료


https://oizys.tistory.com/39

https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/174379/web-socket%EC%9D%B4%EB%9E%80

'Web' 카테고리의 다른 글

XML & JSON & YAML  (0) 2021.10.30
[생활코딩] Home Server 강의 정리  (0) 2021.10.30
웹 브라우저의 요청 흐름  (0) 2021.07.04
TCP UDP 란?  (0) 2021.07.03
OAuth란?  (0) 2021.06.18