CodingDreamTree 2022. 1. 9. 21:33

STOMP 란 ? 

Simple (or Streaming) Text Orientated Messaging Protocol의 약자로 WebSocket위에 존재하는 프로토콜이다.

Websocket과 비교해서 SpringMVC가 HTTP에 프로그래밍 모델을 제공하는 것처럼 Application수준의 사용을 위한       

프로그래밍 모델을 제공한다.

     

이게 무슨 말이냐면 @MessageMapping 어노테이션을 통해 특정 요청에 대한 처리를 가능하게 한다는 것이다.

이것을 Spring MVC에 비유하자면  @RequestMapping을 통해 접속 URL에 따라클라이언트 요청을 처리하게

되는데,  STOMP도 이것을 가능하게 한다는 것이다.

     

     STOMP의 구조를 한번 알아보자

   

CLIENT1이 /chatRoom/1을 가지고  SUBSCRIBE 을 신청하면 SERVER에서 해당 CLIENT를 해당 URL 속에

구독권을 발부 한다.   마찬가지로 CLIENT2도 같은 CONNECT URL이고 CLIENT3는 /chatRoom/2를 가지고

구독권을 발부 받는다. 

이 후,

CLIENT1가 메시지를 PUBLISH(출판) 하면 서버에서 받게 되고 , 이 후 SERVER에서 MESSAGE객체를 다시

해당 URL에 대한 구독권한이 있는 사람들에게 메시지를 전송한다. 이 과정에서는 보낸사람도 받게 되므로

별도의 처리가 필요하며, CLIENT3는 해당 URL에 구독권한이 없으므로 메시지를 전송 받지 못한다.

 

 STOMP는 이렇게 채팅방 구조를 가지는 통신에 매우 유용하다.

전송 가능한 메시지는 Text 와 Binary 메시지이며, 이전 메시지에 대한 기록은 따로 저장이 필요하다(휘발성)

그리고,  STOMP 기본 broker(메시지를 전달해주는 서버) 역할이 자바내에서 활동하기 때문에 서버 클러스터를

사용하는 경우는 외부 브로커를 사용하여야 한다. (RabbitMQ, ActiveMQ 등등)