웹 소켓이란?
HTML5 표준 기술로, HTTP 환경에서 클라이언트와 서버 사이에 하나의 TCP 연결을 통해 실시간으로 전이중 통신을 가능하게 하는 프로토콜이다.
여기서 전이중 통신이란, 일방적인 송신 또는 수신만이 가능한 단방향 통신과 달리 가정에서의 전화와 같이 양방향으로 송신과 수신이 가능한 것을 말한다.
양방향 통신이 아닌 단방향 통신의 예로는 텔레비전 방송, 라디오를 들 수 있는데, 데이터를 수신만 할 수 있고, TV나 라디오를 통해 데이터를 보낼 수 없다.
웹 소켓 기술이 없었을 땐?
- Polling이나 Long polling 등의 방식으로 실시간은 아니지만 그에 준하는 만큼 구현하여 해결했음
지금의 웹 소켓의 등장으로 클라이언트와 서버간의 실시간 통신이 가능하게 되었다.
웹 소켓의 탄생 배경
초기 웹의 탄생 목적은 문서 전달과 하이퍼링크를 통한 문서 연결이였다.
웹을 위한 HTTP 프로토콜은 이러한 목적에 매우 부합하는 모델이다.
하지만 시대가 변하고 환경이 발전할 수록 웹에게 동적인 표현과 뛰어난 상호작용이 요구되었고 이로 인해 여러 새로운 기술이 탄생되었다.
그 중 실시간 양방향 통신을 위한 스펙이 웹소켓이다.
웹 소켓의 동작 방식
웹 소켓은 전이중 통신이므로, 연속적인 데이터 전송의 신뢰성을 보장하기 위해 Handshake 과정을 진행한다.
기존의 다른 TCP 기반의 프로토콜은 TCP Layer에서의 Handshake를 통해 연결을 수립하는 반면, 웹 소켓은 HTTP 요청을 기반으로 Handshake 과정을 거쳐 연결을 수립하게 된다.
웹 소켓은 연결을 수립하기 위해 Upgrade 헤더와 Connection 헤더를 포함하는 HTTP 요청을 보낸다.

통상적인 상태 코드 200 대신, 웹 소켓 서버의 응답은 다음과 같음

101 Switching Protocols
: HandSahke 요청 내용을 기반으로 다음부터 WebSocket으로 통신할 수 있다.Sec-WebSocket-Accpet
: 보안을 위한 응답 키Handshake 과정을 통해 연결이 수립되면 응용 프로그램 계층 프로토콜이 HTTP에서 웹 소켓으로 업그레이드가 된다.
업그레이드가 되면 HTTP는 사용되지 않고, 웹 소켓 연결이 닫힐 때 까지 두 끝 점에서 웹 소켓 프로토콜을 사용하여 데이터를 주고받게 된다.
웹 소켓 연결은 주로 새로고침이나 창 닫기 등의 이벤트 발생 시 닫히게 된다.
웹 소켓 vs HTTP
웹 소켓이 HTTP 요청으로 시작되며 HTTP에서 동작하지만, 두 프로토콜은 분명히 다르게 동작한다.
- HTTP : 클라이언트와 서버간 접속을 유지하지 않으며 요청과 응답 형태로 단방향 통신만 가능하다. 따라서 서버에서 클라이언트로의 요청은 불가능하다. 또한 요청-응답이 완료되면 수립했던 연결이 닫힌다. 웹 소켓은 클라이언트와 서버간 접속이 유지되며 요청과 응답 개념이 아닌 서로 데이터를 주고 받는 형식이다.
- REST한 방식의 HTTP 통신에서는 많은 URI와 Http Method를 통해 웹 어플리케이션과 상호작용하지만, 웹 소켓은 초기 연결 수립을 위한 오직 하나의 URL만 존재하며, 모든 메시지는 초기에 연결된 TCP 연결로만 통신한다.