개발일기

STOMP 뿌셔버리기 본문

photocard backend server 개발일기

STOMP 뿌셔버리기

한둥둥 2024. 7. 13. 22:02

🤔 STOMP란? 

- Simple Test Oriented Messaging Protocol 의 약자로, 웹소켓의 서브 프로토콜입니다. 

- 클라이언트와 서버 간 전송할 메시지의 유형, 형식, 내용들을 정의한 규칙(Frame) 

- 웹 소켓과 같은 양방향 네트워크 프로토콜 기반으로 동작 

- STOMP는 브로커와 연결된 클라이언트 간에 메시지를 교환 하는 방식으로 동작 

 

❓어떤 장점이 있지?

spring boot에서 사용할 시 장점:)

1. 메세징 프로톨과 메세징 형식을 개발할 필요가 없다.

2. STOMP 클라이언트는 Java클라이언트를 포함해서 사용할 수 있다. 

3. 메시지 브로커를 사용하면 구독을 관리하고 메시지를 broadcast하는데 사용할 수 있다. 

 

 

 

웹소켓과는 다르게 다음 특징을 가지고 있다. 

🧐 규격화된 형식(Frame)

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

COMMAND 
header1:value1
header2:value2

Body^@

 

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

 

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

 

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

 

header이후에는 Payload(Body)가 존재한다. 

페이로드(Payload)는 전송되는 데이터를 의미한다. 

Payload(데이터)는 Body에 위치하는데, 끝은 NULL 문자로 설정한다. 

 

📖 STOMP Command 리스트 

클라이언트 프레임

- SEND

- SUBSCRIBE

- UNSUBSCRIBE

- BEGIN

- COMMIT

- ABORT

- ACK

- NACK

- DISCONNECT

 

서버 프레임

-  MESSAGE

- RECEIPT

- ERROR

 

📄command

클라이언트는 메세지를 전송하기 위해 send, subscribe 등의 명령을 사용할 수 있다. 

또한 요청 Frame에 메시지는 무엇이고, 누가 받아서 처리할지에 대한 Header정보가 포함돼 있다.

 

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

 

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

 

🫡 Pub-sub 구조

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

 

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

 

STOMP 위에 그림과 같이 수행된다. 

단순하게 메시지를 바로 보내면 StompBrokerRelay로, 다른 처리가 필요하다면 (DB 저장, JWT 검증) SimpAnnotationMethod를 거쳐 서버에서 작업을 처리한 뒤에 메시지 브로커를 통해 header에 있는 destination으로 구독하고 있는 모든 클라이어튼에게 메시지를 보낸다. 

 

🤗 STMOP의 장점

웹소켓에 비해 핸들러, 형식, 프로토콜을 지정할 필요가 없어 간편하다. 

메시지 브로커를 사용할 수 있다. 외부 메세지 브로커를 사용하면 세션 수용 크기, 메세지 유실, 모니터링등 다양한 기능을 사용할 수 있다. 

 

참고 문서 :)

https://velog.io/@qkrqudcks7/STOMP%EB%9E%80

 

STOMP란?

websocket 위에서 동작하는 문자 기반 메세징 프로토콜로써 클라이언트와 서버가 전송할 메세지의 유형, 형식, 내용들을 정의하는 매커니즘이다.TCP와 웹소켓과 같은 신뢰할 수 있는 양방향 스트리

velog.io

https://growth-coder.tistory.com/157

 

[Spring][WebSocket] 스프링 STOMP와 웹 소켓 개념 및 사용법 (Web Socket with STOMP) (1)

클라이언트와 서버가 통신할 때 HTTP 통신을 주로 사용한다. HTTP 통신은 다음과 같은 특징이 있다. 비연결성 (connectionless) : 연결을 맺고 요청을 하고 응답을 받으면 연결을 끊어버린다. 무상태성 (

growth-coder.tistory.com

https://jinn-blog.tistory.com/152

 

Spring STOMP

1. STOMP 개요 1.1. STOMP란? STOMP(Simple/Streaming Text Oriented Messaging Protocol) 텍스트 기반의 메세지 프로토콜이다. STOMP는 클라이언트와 서버 간 전송할 메시지의 유형, 형식, 내용들을 정의한 규칙(FRAME)으

jinn-blog.tistory.com