- 문제
- 채팅 기능을 구현하기 위해 웹소켓 통신이 필요했으나, 프론트엔드에서는 Socket.io를 사용하여 연습한 결과 Spring과의 호환성 문제가 발생했다.
- 원인
- Socket.io는 node.js에 종속적이며, 웹페이지가 열리는 브라우저가 WebSocket을 지원하지 않는 경우에도 HTTP를 이용하여 WebSocket을 모방하는 방식으로 통신을 지원한다. 이로 인해 Socket.io는 다른 백엔드 프레임워크인 Spring과의 호환성에 제약을 가지게 된다.
- 해결방안
- socket.io 대안 탐색 : SockJS
- 백엔드에서 Spring을 사용하는 경우에는 Socket.io 대신 다른 라이브러리를 고려해야 한다.
- 예를 들어, Spring에서 제공하는 솔루션 중 하나인 SockJS를 고려할 수 있다.
SockJS는 웹소켓을 지원하지 않는 브라우저에 대한 *대체 방법을 제공하며, 클라이언트와 서버 간 통신을 가능하게 한다.
⇒ *대체 방법 : WebSocket을 지원하지 않는 경우에는 폴백(fallback) 메커니즘을 사용하여
다양한 트랜스포트(예: HTTP long polling)를 통해 통신
- STOMP 프로토콜 사용
- 또 다른 대안으로는 STOMP 프로토콜을 고려할 수 있다. STOMP는 단순하고 텍스트 지향적인 메시징 프로토콜로, Spring과 호환되며 구독 방식을 통해 효과적인 통신을 제공한다. STOMP는 가벼우면서 많은 사용자들이 선호하는 프로토콜이다.
- JavaScript에서 사용할 수 있도록 지원하는 라이브러리인 StompJS 라이브러리를 사용하였다.
- 최종 선택
- SockJS를 통해 실시간 통신을 구현하면서, StompJS를 사용하여 메시징 서비스와 통합하는 방식을 사용했다.
참고
https://yoon-dumbo.tistory.com/entry/WebSoket-stompJSReact-채팅
https://velog.io/@ek2356/Stompjs-와-SockJS
https://jinn-blog.tistory.com/152
https://yoo-dev.tistory.com/51