스프링부트 1:1 메세지 기능 WebSocket / STOMP / SockJS 에 대하여 (1/2)

조정우·2025년 4월 17일
0

오늘의 기능 : 스프링부트에서 1:1 메세지 기능구현 하기에
WebSocket / STOMP / SockJS 에 대한 용어 정리

✅ WebSocket

  • 실시간 서비스인 채팅 , 주식등 구현하기에 적합한 기술
  • 서버와 클라이언트간에 연결을 유지하여 언제든 앙뱡항 통신 또는 데이터 가능하게 하는 컴퓨터 통신 프로토콜

웹소켓을 사용하는 이유?
실시간 채팅앱과 같은 기능을 구현하기 위해서는 클라언트에서 계속해서 HTTP 프로토콜을 통해 서버에 요청하는 것은 비효율적이다

WebSocket는 HTTP를 통해 최초 연결이 되며 , 이후 일정 시간이 지나면 HTTP 연결은 자동으로 끊어지고 webSocket connection은 유지된다
HTTP는 stateless하기 때문에 서버에 변경사항이 생겨도 클라이언트에서 요청을 하지 않으면 변경사항이 적용되지 않지만, WebSocket은 지속적으로 connection을 유지하기 때문에 실시간으로 변경사항이 적용된다.

근데 그러면 Ajax Json 쓰면 되잖아? 라고 하실수 있는데 Ajax도 결국 HTTP를 사용하기 때문에 여전히 문제가 되며, 웹 소켓을 통해 이를 해결할 수 있다.
**즉, 매번 데이터를 가져오기위해 url을 요청하는 것은 번거로운데 이를 해결 해준다


✅ STOMP

  • 메세지 전송을 효율적으로 하기 위해 탄생한 프로토콜
  • pub/sub 기반으로 동작하여 메세지 송수신에 대한 처리를 @MessageMapping 등의 어노테이션으로만으로 효율적으로 해결이 가능하다.
  • pub/sub 기반 동작 -> 메세지를 송신하고 수신하는 부분이 확실하게 구분되어 있어 개발자 입장에서 명확하게 인지 하고 개발이 가능하다.

✅ SOckJS

WebSocket 단점

  • WebSocket은 FireFox, Chrome, Edge, Whale 브라우저에서는 정상 작동 하지만, 모바일 Chrome이나 Internet Explorer에서는 동작하지 않는 이슈가 있다.
  • Server-Client 중간에 위치한 Proxy가 특정 Header를 인식 못한다거나, 임의로 Connection을 종료시킬 수도 있음.

WebSocket가 구현이 되지 않는 환경에서도 작동할수 있도록 WebSocket Emulation 기술을 제공하는 JavaScript 라이브러리가 바로 SockJS 이다


✅ 간단하게 기본 개념 정리

  • WebSocket : 브라우저와 서버가 지속적으로 연결되어, 실시간 양방향 통신 가능하게 해주는 프로토콜
  • STOMP WebSocket : 위에서 동작하는 메시징 프로토콜 (채팅방 구독, 1:1 메시지 등 편리하게 구현 가능)
  • SockJS : WebSocket이 안 되는 환경에서도 동작하도록 자동 fallback 기능 제공
  • Spring WebSocket : Spring에서 WebSocket + STOMP를 쉽게 사용할 수 있게 해주는 라이브러리

전체 구조 흐름 요약
[클라이언트(브라우저)]
⇅ WebSocket 연결 (STOMP + SockJS)
[Spring Boot 서버]
⇅ 메시지 전달 및 처리
[DB 또는 메모리 저장소]

profile
)개발( 마구잡이로 글쓰기

0개의 댓글