STOMP(스트리밍 텍스트 지향 메시지 프로토콜) 이해하기

SEUNGJUN·2024년 3월 29일

Chat

목록 보기
4/4

STOMP(스트리밍 텍스트 지향 메시지 프로토콜)은 웹 애플리케이션과 메시지 브로커(RabbitMQ, Apache Kafka 등) 간의 상호 작용을 위한 간단하고 유연한 메시징 프로토콜이다. 이 프로토콜은 HTTP와 같은 웹 통신 프로토콜 위에서 작동하며, 주로 웹 소켓과 함께 사용되 실시간 통신을 지원한다.

WebSocket과 STOMP

1. WebSocket

  • 웹 기반의 양방향 통신을 가능하게 하는 프로토콜
  • 클라이언트와 서버 간의 TCP 연결을 설정하고 유지하며, 이를 통해 양방향 메시지를 교환한다.
  • WebSocket은 웹 애플리케이션에서 실시간 기능을 구현하는 데 사용된다.

2. STOMP (Streaming Text Oriented Messaging Protocol)

  • WebSocket과 함께 사용되는 메시징 프로토콜이다.
  • STOMP는 텍스트 기반의 프로토콜로, 메시지 브로커와 클라이언트 간의 상호작용을 가능하게 한다.
  • 메시지 브로커와 클라이언트 간의 통신을 지원하여, 메시지 큐, 토픽 등의 메시징 패턴을 구현할 수 있다.
  • WebSocket은 프로토콜 수준의 저수준 통신을 지원하는 반면, STOMP는 메시지 브로커를 통해 메시지의 중재 및 처리를 지원하는 더 고수준의 메시징 프로토콜 이다.

왜 STOMP를 사용할까?

웹소켓(WebSocket)은 TCP 기반의 양방향 통신을 지원하는 프로토콜이다. 웹소켓을 사용하면 클라이언트와 서버 간에 실시간으로 데이터를 주고 받을 수 있다. 그러나 웹소켓 자체는 데이터를 어떻게 구조화 하고 전송할지에 대한 규약을 정의하지 않는다.

1. 웹소켓만을 사용한 예제

클라이언트 --> "Hello, Server!" --> 서버
서버 --> "Hi, Client!" --> 클라이언트

2. 웹소켓과 STOMP를 함께 사용한 예제

클라이언트 --> SEND /app/message {"content":"Hello, Server!"} --> 서버
서버 --> RECEIPT /app/message/1234 --> 클라이언트
서버 --> MESSAGE /topic/messages {"content":"Hi, Client!"} --> 클라이언트

위 예제에서 볼수 있듯, STOMP를 사용하면 클라이언트와 서버 간의 메시지를 보내고 받는 방식이 명확해진다. 클라이언트는 SEND 명령어를 사용하여 메시지를 보내고, 서버는 MESSAGE 명령어를 사용하여 클라이언트에게 메시지를 전달한다. 이렇게 구조화된 메시지 프로토콜을 사용하면 클라이언트와 서버 간의 통신을 더 쉽게 이해하고 구현하게 해준다.

발행/구독(Publish/Subscribe) 모델

STOMP에서는 클라이언트가 특정 주제(topic)나 큐(queue)에 대해 구독(subscribe)을 요청할 수 있다. 이 후 메시지 브로커는 해당 주제나 큐에 새로운 메시지가 발행(publish)되면 해당 클라이언트에게 메시지를 전송한다.

단순히 WebSocket만 사용해서 통신을 하게 될경우 모든 메시지가 서버를 거치지 않고 클라이언트 간에 직접 전달되므로, 서버에서 메시지의 라우팅이나 관리가 어렵다. 또한 새로운 클라이언트가 접속하거나 연결이 끊길 때마다 모든 클라이언트에게 이벤트를 수신하도록 설정을 해야한다.

  • 발행(Publish): 발행자(Publisher)가 메시지를 생성하고 즉정 주제(Topic)나 큐(Queue)에 해당 메시지를 발행한다.
  • 구독(Subscribe): 구독자(Subscriber)는 특정 주제나 큐에 대해 구독을 요청하고, 해당 주제나 큐에 발행된 메시지를 수신한다.

< 채팅방에서 메시지를 구독하는 클라이언트가 접근 했을때 >

1. 클라이언트는 채팅방에 메시지를 구독하고 싶음을 메시지 브로커에게 알림.

2. 메시지 브로커는 클라이언트의 구독 요청을 받고, 해당 채팅방에 대한 구독을 등록한다.

3. 채팅방에서 새로운 메시지가 발생하면, 메시지 브로커는 해당 메시지를 해당 채팅방에 구독한 모든 클라이언트에게 전달한다.

4. 클라이언트는 메시지 브로커로부터 수신된 메시지를 받아서 화면에 표시하거나 처리한다.

이런 방식으로 메시지 브로커는 Pub/Sub 패턴을 사용하여 클라이언트 간의 효율적인 메시지 교환을 담당한다. 클라이언트는 특정 채널 또는 주제에 대해 구독하고, 해당 주제에 대한 메시지를 전송하는 발행자가 메시지를 보내면 메시지 브로커를 통해 메시지를 받는다.

profile
RECORD DEVELOPER

0개의 댓글