프로젝트들에서 자주 사용한 STOMP 프로토콜에 대해서 조금 더 깊게 정리하고자 작성하게 됐습니다.
Simple Text Oriented Messaging Protocol
의 약자로, 웹소켓의 서브 프로토콜 입니다.
웹소켓과는 다르게 다음과 같은 특징을 가집니다.
웹소켓은 Text와 Binary 형식의 타입을 정하긴 하지만, 어떤 규격도 정해져 있지 않습니다. 하지만 STOMP는 다음과 같은 형식을 따라갑니다.
COMMAND
header1:value1
header2:value2
Body^@
아래는 실제 제 프로젝트에서 사용되고 있는 STOMP의 예시입니다.
예시에서는 COMMAND는 ERROR로, header에는 에러 코드와 에러 메세지, 바디 길이 등이 담겨있고 body에는 error라는 메세지가 담겨있는걸 확인할 수 있습니다.
여담으로, STOMP의 커맨드 목록은 다음과 같습니다.
클라이언트 프레임
서버 프레임
더 자세한 사항은 링크를 참고해주세요.
STOMP는 Message Broker를 이용하여 구독-발행의 효율적인 구조로 동작합니다.
pub-sub 구조는 publisher가 보낸 메세지를 subject를 구독하고 있는 subscriber 모두에게 보내는 방식 입니다.
STOMP도 동일하게 그림과 같이 수행됩니다.
단순하게 메세지를 바로 보낸다면 StompBrokerRelay
로, 다른 처리가 필요하다면 (DB 저장, JWT 검증) SimpAnnotationMethod
를 거쳐 서버에서 작업을 처리한 뒤에 메세지 브로커를 통해 header에 있는 destination으로 구독하고 있는 모든 클라이언트에게 메세지를 보냅니다.
따라서 STOMP는 다음과 같은 장점을 가집니다.
제 프로젝트에서 사용했던 코드와 STOMP 테스트 툴이 궁금하시다면? 제가 작성했던 apic 사용해보기를 참고해주세요.
긴 글 읽어주셔서 감사합니다.
다음엔 메세지 큐와 메세지 브로커에 대해 다뤄보겠습니다.
https://tecoble.techcourse.co.kr/post/2021-09-05-web-socket-practice/
https://velog.io/@msung99/%EC%9B%B9%EC%86%8C%EC%BC%93%EA%B3%BC-STOMP%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%ED%86%B5%EC%8B%A0-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
http://stomp.github.io/
https://trans.yonghochoi.com/translations/nats_publish_subscribe.ko.html