1. WebSocket의 등장 배경
- 초기(HTTP)
- URL을 통해 서버에 요청하기 때문에, 아이디 중복 확인과 같은 유효성 검사를 할 때에도 새로운 페이지를 요청하는 문제 有
- 중기(Ajax)
- XMLHttpRequest 객체를 이용하여 클라이언트에서 서버로 요청
- 페이지 요청이 아닌 데이터 요청이기 때문에 부분적으로 정보를 갱신할 수 있게 됨
- 하지만, Ajax도 결국 HTTP를 이용하기 때문에 요청을 보내야 응답이 오는 단점 有
- 이러한 환경에서 WebSocket이 나오게 되었음
2. WebSocket의 개념
- Transport Protocol의 일종으로, 단순한 API로 구성되어있어 WebSocket을 이용하면 하나의 HTTP 접속으로 양방향 메시지를 자유롭게 주고받을 수 있음
- 기존에는 클라이언트의 요청이 없다면 서버로부터 응답을 받을 수 없었지만, WebSocket을 통해 브라우저는 서버가 직접 보내는 데이터를 받을 수 있고, 사용자가 다른 웹사이트로 이동하지 않아도 최신 데이터가 적용된 웹을 볼 수 있게 됨
- 이러한 특징 덕분에 WebSocket은 채팅이나 게임, 실시간 주식차트와 같은 프로그램에 주로 사용됨
3. WebSocket의 작동 원리
- HTTP를 통해 서버와 클라이언트 간 WebSocket 연결을 하고, 연결이 정상적으로 이루어진다면 TCP/IP 기반으로 통신, 일정 시간이 지나면 HTTP 연결은 자동으로 끊어지게 됨
- 기본적으로 WebSocket API는 간단한 기능들을 제공하며, 대부분의 경우 SockJS나 Socket.IO 같은 오픈 소스 라이브러리나 STOMP 같은 메시지 포맷을 사용함
4. WebSocket의 문제점
- HTTP와 달리 Stateful Protocol이기 때문에 서버와 클라이언트 간의 연결을 항상 유지해야하며, 비정상적으로 연결이 끊어지는 경우를 대응해야함 (프로그램 구현의 복잡성 증대)
- 서버와 클라이언트간의 트래픽양이 많은 경우 Socket 연결을 유지하는데 CPU에 큰 부담이 될 수 있음
- 오래된 버전의 웹 브라우저에서는 지원하지 않음
5. WebSocket의 사용 예시
- FaceBook과 같은 SNS
- LOL과 같은 멀티플레이어 게임
- 위치 기반 App
- 증권 거래 정보 사이트 및 App
- 화상 채팅 App
- Google Docs와 같이 여러 명이 동시에 접속 및 수정할 수 있는 Tool