STOMP 이론
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 등등)