STOMP 파헤치기

soluinoon·2023년 7월 4일
0

채팅 구현기

목록 보기
1/2

개요

프로젝트들에서 자주 사용한 STOMP 프로토콜에 대해서 조금 더 깊게 정리하고자 작성하게 됐습니다.

STOMP란 무엇인가?

Simple Text Oriented Messaging Protocol의 약자로, 웹소켓의 서브 프로토콜 입니다.
웹소켓과는 다르게 다음과 같은 특징을 가집니다.

규격화된 형식 (Frame)

웹소켓은 Text와 Binary 형식의 타입을 정하긴 하지만, 어떤 규격도 정해져 있지 않습니다. 하지만 STOMP는 다음과 같은 형식을 따라갑니다.

COMMAND
header1:value1
header2:value2

Body^@

아래는 실제 제 프로젝트에서 사용되고 있는 STOMP의 예시입니다.

예시에서는 COMMAND는 ERROR로, header에는 에러 코드와 에러 메세지, 바디 길이 등이 담겨있고 body에는 error라는 메세지가 담겨있는걸 확인할 수 있습니다.

STOMP COMMAND 리스트

여담으로, STOMP의 커맨드 목록은 다음과 같습니다.

클라이언트 프레임

  • SEND
  • SUBSCRIBE
  • UNSUBSCRIBE
  • BEGIN
  • COMMIT
  • ABORT
  • ACK
  • NACK
  • DISCONNECT

서버 프레임

  • MESSAGE
  • RECEIPT
  • ERROR

더 자세한 사항은 링크를 참고해주세요.

pub-sub 구조

STOMP는 Message Broker를 이용하여 구독-발행의 효율적인 구조로 동작합니다.


pub-sub 구조는 publisher가 보낸 메세지를 subject를 구독하고 있는 subscriber 모두에게 보내는 방식 입니다.


STOMP도 동일하게 그림과 같이 수행됩니다.
단순하게 메세지를 바로 보낸다면 StompBrokerRelay로, 다른 처리가 필요하다면 (DB 저장, JWT 검증) SimpAnnotationMethod를 거쳐 서버에서 작업을 처리한 뒤에 메세지 브로커를 통해 header에 있는 destination으로 구독하고 있는 모든 클라이언트에게 메세지를 보냅니다.

STOMP의 장점

따라서 STOMP는 다음과 같은 장점을 가집니다.

  • 웹소켓에 비해 핸들러, 형식, 프로토콜을 지정할 필요가 없어 간편하다.
  • 메세지 브로커를 사용할 수 있다. 외부 메세지 브로커를 사용하면 세션 수용 크기, 메세지 유실, 모니터링 등 다양한 기능을 사용할 수 있다.

추가

제 프로젝트에서 사용했던 코드와 STOMP 테스트 툴이 궁금하시다면? 제가 작성했던 apic 사용해보기를 참고해주세요.

마치며

긴 글 읽어주셔서 감사합니다.
다음엔 메세지 큐와 메세지 브로커에 대해 다뤄보겠습니다.

References

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

profile
수박개 입니다.

0개의 댓글