스프링부트와 websocket을 활용한 작은 프로젝트로 채팅 시스템을 구현하는 중에 느낄 수 있었다.
웹 페이지를 새로고침하는 순간 기존에 맺어진 Websocket의 세션이 끊어진다는 것이었다. 이런 문제를 겪으면서 WebSocket의 단점을 정리하고 어떤 해결방안이 있는지 정리하기 위함이다.
브라우저 중 버전에 따라 지원을 안하는 경우도 있다.
WebSocket은 Stateless를 지향하는 일반 HTTP 와는 다르게 상태를 유지하는 Stateful 한 성격을 가지고 있어 서버와 클라이언트가 연결을 항상 유지해야 한다.
이는 1)연결을 유지해야하기 때문에 부하가 발생할 수 있고, 비정상적으로 연결이 끊어졌을 때(새로고침, 페이지 닫기 등) 적절한 대응이 필요하다.
때문에 프로그램 구현에 보다 많은 복잡성을 유발할 수 있다.
Sockjs는 Websocket Emulation을 지원하는 Javascript 라이브러리 이다.
Websocket Emulation 이란 Websocket을 지원하지 않거나 연결 실패로 연결이 되지 않는 경우 HTTP-Streaming, Long Polling 등의 기존 HTTP 기반의 다른 기술로 전환해 연결을 시도하는 방법이다.
이를 활용해 기존에 지원하지 않는 브라우저의 환경에서도 websocket 통신을 가능케 도와준다
이밖에도 websocket의 단점을 보완하기 위한 기술들이 있다면 공유부탁드립니다!