WebSocket
- Socket Connection을 유지한 채로 실시간으로 양방향 통신 혹은 데이터 전송이 가능한 프로토콜이다.
- 채팅 어플리케이션, SNS, 구글 Docs 등 많은 분야에서 사용되고 있다.
HTTTP와의 차이
- HTTP는 단방향 통신이였다. 클라이언트에서 서버로 Request를 보내면 서버는 클라이언트로 Response를 보내는 방식으로 동작한다. 또한 HTTP는 기본적으로 무상태(Stateless)이므로 상태를 저장하지 않는다.
- 하지만 웹소켓은 양방향 통신으로 연결이 이루어지면 클라이언트가 요청하지 않아도 서버에서 일방적으로 클라이언트로 데이터를 보낼 수 있다.
- 웹소켓은 HTTP와 다르게 상태(Stateful) 프로토콜이다. 즉, 클라이언트와 서버가 한 번 연결되면 같은 연결을 이용해 통신하므로 TCP 커넥션 비용을 아낄 수 있다.
- Connection을 유지하고 있는 동안 request-response 방식의 통신이 아닌 양방향의 실시간 데이터 통신이 가능하다.
WebSocket의 동작 방식
- WebSocket은 HTTP 포트 80, HTTPS포트 443 위에서 동작한다.
- 즉, 최초 접속시에는 HTTP 프로토콜을 이용한 핸드셰이킹을 통하여 연결을 맺는다. 이때 HTTP 업그레이드 헤더를 사용하여 HTTP 프로토콜에서 WebSocket 프로토콜로 변경한다.
- 이후 연결이 맺어지면 어느 한쪽이 연결을 끊지 않는 이상 영구적인(persistent) 동일한 채널이 맺어지고, HTTP 프로토콜이 WebSocket 프로토콜로 변경된다.
- 이때 데이터를 암호화하기 위해 WSS 프로토콜 등을 이용할 수도 있다.