Stomp 스프링

Ena JJJ·2023년 2월 5일
0

Spring

목록 보기
28/44

Stomp

Simple Text Oriented Messaging Protocol은 메세징 전송을 효율적으로 하기 위해 탄생한 프로토콜이고, 기본적으로 pub/sub 구조로 되어있어 메세지를 전송하고 메세지를 받아 처리하는 부분이 확실히 정해져 있기 때문에 개발자 입장에서 명확하게 인지하고 개발할 수 있는 이점이 있다. 한 줄로 정의하자면, Stomp 프로토콜은 WebSocket 위에서 동작하는 프로토콜로써 클라이언트와 서버가 전송할 메세지의 유형, 형식, 내용들을 정의하는 매커니즘이다.

또한 STOMP를 이용하면 메세제의 헤더에 값을 줄 수 있어 헤더 값을 기반으로 통신 시 인증 처리를 구현하는 것도 가능하며 STOMP 스펙에 정의한 규칙만 잘 지키면 여러 언어 및 플랫폼 간 메세지를 상호 운영할 수 있다.


STOMP는 TCP 또는 WebSocket같은 양방향 네트워크 프로토콜 기반으로 동작한다. 이름에서 알 수 있듯, STOMP는 Text 지향 프로토콜이나, Message Payload에는 Text or Binart 데이터를 포함 할 수 있다.

위에서 언급한 pub/sub 란 메세지를 공급하는 주체와 소비하는 주체를 분리해 제공하는 메세징 방법이다.

Spring에서 지원하는 STOMP를 사용하면 SpringWebSocket 어플리케이션은 STOMP Broker로 동작하게 된다

STOMP를 이용하면 WebSocket만 사용할 때보다 더 다채로운 모델링을 할 수 있다.

  • Messaging Protocol을 만들고 메세지 형식을 커스터마이징 할 필요가 없다

  • RabbitMQ, ActiveMQ 같은 Message Broker를 이용해, Subsriptioin(구독)을 관리하고 메세지를 브로드캐스팅 할 수 있다.

  • WebSocket 기반으로 각 Connection(연결)마다 WebSocketHandler를 구현하는 것 보다 @Controller 된 객체를 이용해 조직적으로 관리할 수 있다.
    - 즉, 메세지는 STOMP의 'destination' 헤더를 기반으로 @Controller객체의 @MethodMapping 메서드로 라우팅 된다.

  • STOMP의 'destionation' 및 Message Type을 기반으로 메세지를 보호하기 위해 Spring Security를 사용할 수 있다.

🔥 spring boot에서 사용할 시 장점

  • 메세징 프로토콜과 메세징 형식을 개발할 필요가 없다.
  • STOMP 클라이언트는 Java 클라이언트를 포함해서 사용할 수 있다.
  • 메세지 브로커를 사용하면 구독을 관리하고 메세지를 broadcast하는데 사용할 수 있다.

📝 command

클라이언트는 메세지를 전송하기 위해 send, subscribe 등의 명령을 사용할 수 있다.
또한 요청 Frame에 메세지는 무엇이고, 누가 받아서 처리할지에 대한 Header 정보가 포함되어 있다.

이런 명령어들은 'destination' 헤더를 요구하는데 이것을 어디에 전송할지, 혹은 어디에서 메세지를 구독할 것인지를 나타낸다.

위와 같은 과정을 통해 STOMP는 publish-subscribe 메커니즘을 제공한다. 즉 Broker를 통해 타 사용자들에게 메세지를 보내거나 서버가 특정 작업을 수행하도록 메세지를 보낼 수 있게 된다.

💡 SEND

  • destination의 메세징 시스템으로 메세지를 보낸다
  • 필수 헤더는 'destination' 하나이다.
  • body는 보내고자 하는 메세지이다. 만약 body가 있으면 content-length와 content-type 헤더는 필수다.

💡 SUBSCRIBE

  • 주어진 destination에 등록하기 위해 사용된다.
  • send와 마찬가지로 'destination'헤더가 필수이다.
  • 가입된 대상에서 수신된 모든 메세지는 이후 MESSAGE frame으로써 서버에서 클라이언트로 전달된다.

0개의 댓글