개발 일기

[Computer Network] 실시간 웹 통신 - 4. STOMP(Simple/Stream Text Oriented Message Protocol) 본문

Computer Science/Computer Network

[Computer Network] 실시간 웹 통신 - 4. STOMP(Simple/Stream Text Oriented Message Protocol)

개발 일기장 주인 2024. 10. 9. 22:12

이전 게시글에서 WebSocket은 한계로 인해 STOMP의 필요성을 알게되었고 해당 프로토콜에 대한 추가적인 이해가 필요하다고 판단하게 되어 정리하게 됐다.


STOMP(Simple/Stream Text Oriented Message Protocol)

  • WebSocket과 같은 실시간 메시지 전송 프로토콜에서 사용하는 텍스트(문자) 기반의 메시징 프로토콜
  • WebSocket은 기본적으로 단순히 데이터를 주고받는 통신 방식일 뿐, 그 안에 담기는 메시지의 형식에 대한 정의가 없기 때문에, 메시지를 주고받는 양측이 어떤 형식으로 통신할지를 정해야한다.
     이때 STOMP와 같은 서브 프로토콜을 사용하면 메시지 형식과 관련된 표준화된 규약으로 사용한다.
  • 주로 메시지 브로커와 클라이언트 간의 통신을 위한 프로토콜로 사용
  • Publish/Subscribe 구조
  • Spring WebSocket의 STOMP를 사용하면 Message Broker 없이도 간단한 채팅 기능을 구현할 수 있다고 한다.

STOMP 동작 흐름


프레임 기반 메시징

STOMP는 프레임(Frame)이라는 단위로 메시지를 전송한다.

각 프레임은 특정한 구조로 이루어져 있으며, 기본적으로 Command(명령), Header(헤더), Body(본문)으로 구성된다.

  • Command는 메시지의 종류를 나타내며, SEND, SUBSCRIBE, CONNECT 등의 명령어가 사용된다.
    • SEND: 메시지를 특정 대상(destination)에게 보내는 명령.
    • SUBSCRIBE: 특정 주제(topic)를 구독하여 그 주제에 대한 메시지를 받는 명령.
    • CONNECT: 서버에 연결을 시도하는 명령, 클라이언트가 서버와 세션을 맺을 때 사용.
  • Header는 메타데이터를 담으며, 메시지를 어느 주제로 보낼지(destination), 수신자의 정보, 메시지의 우선순위 등이 포함된다.
  • Body는 실제 메시지의 데이터를 담고 있는다.  텍스트나 바이너리 데이터를 포함

Pub/Sub 모델

STOMP는 Publish/Subscribe 모델을 지원한다.

이는 발행자(Publisher)와 구독자(Subscriber)가 분리된 형태로, 발행자는 특정 주제(Topic)에 메시지를 발행하고, 구독자는 그 주제를 구독함으로써 메시지를 받을 수 있다.

이 방식은 다수의 클라이언트가 동일한 주제를 구독하여 실시간으로 메시지를 받을 수 있도록 해준다.


 

메시지 브로커와의 상호작용

  • STOMP는 메시지 브로커와 클라이언트 간의 통신을 지원한다.
  • 메시지 브로커는 STOMP 프로토콜에 따라 메시지를 수신하고, 구독자에게 메시지를 전달하는 중간 시스템으로브로커는 여러 클라이언트 간에 메시지를 중계하고, 클라이언트 간의 메시지 전달을 관리한다.

메세지 브로커에 대해서 다음 게시글에서 구체적으로 다루겠다.