어 나 갱수.

[Web] 웹 소켓(Web Socket)이란? 😙 본문

네트워크

[Web] 웹 소켓(Web Socket)이란? 😙

김경수 2023. 10. 1. 20:16
728x90

웹 소켓(Web Socket) 프로토콜이란?

웹 소켓은 클라이언트와 서버를 연결시켜놓고 실시간으로 통신이 가능하게 하는 첨단 통신 프로토콜이다.

쉽게 말하면 웹 소켓은 Socket Connection을 유지한 채로 실시간으로 양방향 통신 혹은 데이터 전송이 가능한 프로토콜이다.

 

오늘날 채팅 어플리케이션에서 많이 사용되는 프로토콜이다.

 

웹 소켓의 특징

웹 소켓의 가장 큰 장점이라고 말할 수 있는 특징 중 하나는 양방향 통신이라는 것이다.

기존의 HTTP통신은 클라이언트에서 서버로 Request를 보내면 서버에서 클라이언트로 Response를 보내는 단방향 통신이지만, 

웹 소켓의 경우 클라이언트에서 서버로 별도의 Request를 보내지 않아도 저절로 서버에서 Response를 보낼 수 있습니다.

 

또 실시간 네트워킹이라는 특징은 웹 환경에서 빠르게 변하는 연속된 데이터를 빠르게 노출시킬 수 있습니다.

 

웹 소켓의 동작

웹 소켓은 HTTP 포트 80, HTTPS 포트 443 위에서 동작한다.

웹 소켓은 TCP연결처럼 HandShake로 클라이언트와 서버가 통신을 맺는다. 

웹 소켓의 동작은 크게 3가지로 나눌 수 있습니다.

위 이미지의 빨간 색 박스에 해당하는 Opening Handshake

위 이미지의 노란 색 박스에 해당하는 Data transfer
위 이미지의 보라 색 박스에 해당하는 Closing Handshake

 

Handshake

Opening Handshake와 Closing Handshake는 일반적인 HTTP TCP 통신에서 볼 수 있는 방법이다.

즉 처음에 접속할때는 HTTP TCP 통신 방법으로 접속하고, 그 이후에 웹 소켓 프로토콜로 변경된다.

 

Data Transfer

Opening Handshake에서 연결에 대한 승인이 나면 웹 소켓 프로토콜에서는 Data Transfer이 진행된다. 

여기서 데이터는 메시지 라는 단위로 전달된다.

 

기본적으로 웹 소켓 API는 아주 간단한 기능들만 제공하기 때문에 대부분의 경우 SockJS나 Socket.IO 같은 오픈 라이브러리를 많이 사용하며 메시지 포맷 또한 STOMP라는 프로토콜을 많이 사용합니다.

 

웹 소켓의 문제점??

프로그램을 구현할때 조금 복잡합니다. 웹 소켓은 HTTP프로토콜과 달리 Stateful 프로토콜이기 때문에 서버와 클라이언트가 항상 연결을 맺고 있어야 합니다. 그래서 중간에 통신의 문제로 연결이 끊어지면 문제가 발생하니 이러한 문제가 발생할 때마다 적절하게 대응해야 합니다.

 

서버와 클라이언트가 Socket프로토콜로 연결을 맺고 있는 것만으로도 많은 비용이 듭니다. 특히 트래픽이 많이 발생하는 서버에 경우 

CPU에 많은 부담이 생길 수 있습니다.

728x90