STOMP란?

박병찬·2021년 10월 3일
1
post-thumbnail

📌 STOMP (Simple/Stream Text Oriented Message Protocol)

  • websocket 위에서 동작하는 문자 기반 메세징 프로토콜로써 클라이언트와 서버가 전송할 메세지의 유형, 형식, 내용들을 정의하는 매커니즘이다.
  • TCP와 웹소켓과 같은 신뢰할 수 있는 양방향 스트리밍 네트워크 프로토콜에서 사용할 수 있다.
  • 기본적으로 pub / sub 구조로 되어있어, 메세지를 전송하고 받아 처리하는 부분이 확실히 정해져있다.
  • http와 마찬가지로 frame을 사용해 전송하는 프로토콜이다.

🐛 예시

채팅방 생성: pub/sub 구현을 위한 Topic 생성

채팅방 입장: Topic 구독

채팅방에서 메세지 송수신: 해당 Topic으로 메세지 송신(pub), 수신(sub)

🔥 spring boot에서 사용할 시 장점

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

📝 command

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

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

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

📝 Frame


COMMAND 
header1:value1 
header2:value2 

Body^@

Frame은 명령(Command)과 추가적인 헤더(Header)와 추가적인 바디(Body)로 구성이 된다.

Frame은 몇 개의 텍스트 라인으로 지정된 구조인데 첫번째 라인은 텍스트(Command 명령어)이고 이후 key:value 형태로 header 정보를 포함한다.

header이후에 공백 줄을 하나 더 추가하는 것으로 header의 끝을 설정할 수 있다.

header이후에는 Payload(Body)가 존재한다.
페이로드(Payload)는 전송되는 데이터를 의미한다.
Payload(데이터)는 Body에 위치하는데, 끝은 NULL 문자로 설정한다.

destination

위 header로 메세지를 send하거나 subscribe 할 수 있다.
destination 정보는 stomp 서버 구현체마다 다르다.

💡 SEND

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

💡 SUBSCRIBE

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

0개의 댓글