웹소켓은 HTTP와 같은 OSI 모델의 7계층에 위치하는 프로토콜이며, 4계층의 TCP에 의존한다.
HTTP 프로토콜에서 http
를 이용하는 것처럼
웹소켓에서는 ws
를 이용한다.
보안을 강화한 https
와 같이 wss
를 사용할 수 있다.
Handshake는 한 번의 HTTP 요청과 HTTP 응답으로 이루어진다.
핸드쉐이크가 끝나면 HTTP 프로토콜을 웹소켓 프로토콜로 변환하여 통신을 하는 구조이다.
핸드쉐이크는 먼저 클라이언트가 HTTP로 웹소켓 연결 요청을 하면서 시작된다.
웹소켓 연결 요청에는 Connection:Upgrade
와 Upgrade:websockert
헤더를 통해 웹소켓 요청임을 표시한다.
프로그램 구현에 많은 복잡성을 만들 수 있다.
웹 소켓은 HTTP와 다르게 Stateful protocol이기 때문에 서버와 클라이언트 간의 연결을 항상 유지해야 한다. 비정상적으로 연결이 끊어졌을 때 적절하게 대응해야한다.
서버와 클라이언트 간의 Socket 연결을 유지하는 것 자체가 비용이 든다.
특히 트래픽 양이 많은 서버의 경우 CPU에 큰 부담을 줄 수 있다.
오래된 버전의 웹 브라우저에서는 지원하지 않는다.
https://tecoble.techcourse.co.kr/post/2020-09-20-websocket/
https://choseongho93.tistory.com/266