웹 소켓 vs HTTP
양방향 통신을 가능하게 하는 통신 프로토콜입니다.
HTTP 프로토콜의 한계를 극복하기 위해 등장했으며, 기존에도 자주 사용되는 HTTP 프로토콜은 클라리언트에서 서버로 요청을 보내고 서버는 그에 대한 응답을 보내는 단방향 통신 방식입니다.
HTTP 방식은 실시간 통신이나 푸시 알림 등 양방향 통신에는 적합하지 않아, Socket을 사용하여 처리합니다.
주로 서버가 클라이언트에게 비동기 메시지를 보낼 때 널리 사용하는 기술입니다.
웹 소켓 연결은 처음에는 HTTP 연결이지만, 특정 핸드셰이크 절차를 거쳐 웹 소켓 연결로 업그레이드 됩니다.
웹 소켓의 특징
✔️ 양방향 통신
간단히, 데이터 송수신을 동시에 할 수 있는 방법입니다. 일반 HTTP 통신은 Client가 요청을 보내는 경우에만 Server가 응답을 하는 단방향 통신입니다.
✔️ 실시간 네트워킹
채팅, 주식과 같은 연속된 데이터를 빠르게 노출해 줍니다.
웹 소켓 이전, Poling 방식 이해하기
일정한 주기로 서버에 요청을 보내는 방법으로, setTimeout, setInterval 등으로 일정 주기마다 서버에 요청을 보냅니다.
불필요한 Request와 Connection을 생성하여 서버에 부담을 주게 되며, 요청 주기가 짧을수록 부하가 커집니다.
'일정 주기마다' 요청을 보내는 것이기 때문에 실시간이라고 보기에 애매하며, 실제로 실시간 서비스는 아니라고 할 수 있습니다.
또한, HTTP 통신을 하기 때문에 Request, Response 헤더가 불필요하게 사용됩니다.
Long Poling 이해
Poling과 비슷하게 일정 주기마다 요청을 보내지만, 서버가 응답을 바로 전달하지 않고 앞에 붙은 Long과 같이 길게 텀을 가집니다.
요청을 보냈을 때, 서버가 응답을 바로 보내지 않고 특정 이벤트나 타임아웃이 발생했을 때 응답을 전달합니다.
(응답을 받은 클라이언트는 다시 서버에게 데이터를 요청합니다.)
불필요한 요청을 보내지 않아 Polling 보다 좋아 보이지만, Long Polling 도 동시 다발적인 요청과 응답이 생기면 부하가 발생할 수 있습니다. 또한, HTTP 통신을 하기 때문에 Request, Response 헤더가 불필요하게 사용됩니다.
웹 소켓 동작 과정
1 단계 :
처음에 HTTP 연결로 되어 있던 방식에서 특정 핸드셰이크 방식을 거쳐 웹 소켓 연결로 업그레이드 됩니다.
2 단계 :
1단계에서 웹 소켓으로 프로토콜이 업그레이드되고 나고 나면, 데이터 전달이 진행됩니다.
여기서 데이터는 메시지라는 단위로 전달됩니다.
메시지
여러 프레임(frame)이 모여서 구성되는 하나의 논리적인 메시지 단위
프레임
통신에서 가장 작은 단위의 데이터.
패킷은 전 네트워크 통신 과정에서 가장 작은 단위의 데이터를 뜻하고, 프레임은 데이터 링크계층(이더넷)에서 주고받는 가장 작은 단위를 의미합니다. (작은 헤더 + payload로 구성)
3 단계 :
통신을 마치면, Close 신호를 전달하여 클라이언트와 서버의 연결 관계를 제거합니다.
웹소켓과 폴링의 주요 차이점
- 폴링은 클라이언트가 정기적으로 서버에 데이터를 요청하고 응답을 받는 반면, 웹소켓은 클라이언트와 서버 간에 지속적인 연결을 유지하고 언제든지 데이터를 주고받을 수 있습니다.
- 폴링은 추가적인 네트워크 및 서버 부하를 초래할 수 있으며, 실시간 통신에 적합하지 않습니다. 웹소켓은 이러한 문제를 해결하고 효율적인 양방향 통신을 제공합니다.
이러한 이유로 웹소켓은 실시간 채팅 애플리케이션, 주식 시세 업데이트, 온라인 게임 등과 같은 실시간 기능이 필요한 웹 애플리케이션에서 널리 사용됩니다.
'CS > Network' 카테고리의 다른 글
[Network] HTTP 프로토콜 버전 이해 - HTTP/1.0, HTTP/1.1, HTTP/2.0, HTTP/3.0, and QUIC (0) | 2024.06.18 |
---|---|
[Nework] TCP/IP 모델 4계층 이해하기 - Internet Protocol Stack (0) | 2024.06.18 |
[Network] OSI 7 계층, 네트워크 통신 이해하기 - Server CS OSI 7 계층 (1) | 2024.04.25 |
[Network] 포워드 프록시(Forward Proxy)와 리버스 프록시(Reverse Proxy)란 무엇인가, 쉽게 이해하기 (0) | 2023.10.11 |
[Server] WAS란 무엇인가, 웹 서버와 WAS(Web Application Server) 차이 이해하기 (0) | 2023.10.11 |