WebSocket은 서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술이다. Real-time web application 구현을 위해 널리 사용되고 있다.
(SNS, 멀티플레이어 게임, 구글Doc, 증권거래, 화상채팅 등)
웹애플리케이션에서 기존의 서버와 클라이언트 간의 통신은 대부분 HTTP를 통해 이루어졌으며, HTTP는 Request/Response 기반의 Stateless protocol이다.
서버와 클라이언트 간의 Socket Connection 같은 영구적인 연결이 되어있지 않고 클라이언트 쪽에서 Request를 할 때만 서버가 Response를 하는 방식으로 통신이 진행되는 단방향 통신이다.
이 경우 서버쪽 데이터가 업데이트 되더라도 클라이언트 쪽에서 화면을 Refresh 하지 않는다면 변경된 업데이트가 적용되지 않는 문제가 발생한다.
이런 문제는 일반적인 웹애플리케이션에서는 기존에 임시방편의 Long Poilling 이라던가 Ajax를 사용해서 어느 정도 해결이 가능했지만, 데이터의 빠른 업데이트가 중요한 요소 중에 하나인 애플리케이션에서는 실시간 업데이트가 아주 중요하기 때문에 Web Socket이 사용된다.
Web Socket은 Stateful protocol 이기 때문에 클라이언트와 한 번 연결이 되면 계속 같은 라인을 사용해서 통신하기 때문에 HTTP 사용시 필요없이 발생되는 HTTP와 TCP 연결 트래픽을 피할 수 있다.
또한 Web Socket은 HTTP와 같은 포트(80)을 사용하기에 기업용 애플리케이션에 적용할 때 방화벽 설정을 다시 하지 않아도 되는 장점이 있다.
서버와 클라이언트 같의 Web Socket 연결은 HTTP 프로토콜을 통해 이루어진다.
연결이 정상적으로 이루어진다면 서버와 클라이언트 간에 Web Socket 연결이 이루어지고 일정 시간이 지나면 HTTP 연결은 자동으로 끊어진다.
결정적인 차이는 프로토콜이다. Web Socket 프로토콜은 접속 확립에 HTTP를 사용하지만, 이후 통신은 Web Socket 독자적인 프로토콜로 이루어진다. 또한 Header가 상당히 작아 Overhead가 적은 특징이 있다.