STOMP is the Simple(Streaming) Text Orientated Messaging Protocol
STOMP란 TCP나 웹소켓같은 양방향 네트워크 프로토콜 위에서 동작하는 텍스트 기반 메세징 프로토콜로, 클라이언트와 서버가 통신에 사용하는 메세지의 유형, 형식, 내용등을 정의한다.
웹소켓을 사용하면 서버와 클라이언트가 실시간으로 메세지를 주고받을 수 있지만, 웹소켓은 메세지의 형식까지는 정의하고있지 않기 때문에 STOMP를 사용하여 메세지의 형식을 지정하는 방식으로 웹소켓의 단점을 보완할 수 있다.
STOMP를 사용하는 서버와 클라이언트는 메세지브로커를 통한 pub/sub방식으로 메세지를 주고받는다.
Pub/Sub모델이란 비동기 메세지를 교환하는 메세징 패러다임의 일종으로, Publisher가 특정 주소에 메세지를 발행하면 해당 주소를 구독하고 있는 Subscriber가 이 메세지를 수신하는 방식이다.
Message Broker는 Pub/Sub모델에서 Publisher가 발행한 메세지를 Subscriber에게 전달해주는 주체로서, 상용 제품으로는 RabbitMQ, Kafka, Amazon SQS등이 있다.
Subscriber들은 특정 topic을 구독하고, Publisher가 해당 topic으로 메세지를 발행하면 메세지 브로커를 통해 그 topic을 구독한 Subscriber들에게 메세지가 전달된다.
COMMAND
header1:value1
header2:value2
body^@
STOMP는 Command, Header, Body라는 정해진 구조를 가지고 있다.
STOMP메세지의 각 커맨드는 다음과 같은 용도로 사용된다.
SUBSCRIBE
destination:/topic/room/1
id:sub-1
^@
SEND
destination: /topic/room/1
content-type: application/json
{"roomId":1, "content": "Hi"}
MESSAGE
subscription:0
message-id:1
destination:/topic/room/1
content-type:application/json
{"roomId":1, "content":"memberA join the room1"}
나는 이 프로토콜의 우아함과 효율성을 높이 평가합니다. fnf STOMP의 텍스트 기반 접근 방식은 다양한 네트워크 프로토콜을 통한 메시징을 단순화합니다.
개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.