학습 상태에 따라 업데이트는 수시로 변경될 수 있습니다.
메시지 지향 미들웨어 (Message Oriented Middleware) 란,
메시지
: 구조화된 데이터로 이루어진 통신의 단위메시지 지향
: 시스템 간 통신이 주로 메시지(데이터)를 기반으로 이루어지는 아키텍처를 의미미들웨어
: 애플리케이션들을 연결해 서로 데이터를 교환할 수 있게 해주는 소프트웨어즉, 어플리케이션들의 메시지를 중간에서 관리해주는 (기능을 지원하는) 시스템이다.
메세지를 통해 여러 분산되어 있는 시스템간의 Connector 역할로 결합성을 낮추고, 이들이 서로 실시간 비동기식 데이터를 교환할 수 있도록 하는 소프트웨어이다.
MOM은 다양한 메시지 지향 아키텍처를 지원하며, (ex. 메시지 큐, 토픽, 발행-구독) 여러 시스템 간에 안정적이고 확장 가능한 통신을 가능하게 한다.
메시지 브로커 (Message Broker) 란?
Publisher(송신자)로부터 전달받은 Message(메세지)를 동일한 Topic의 Subscriber(수신자)로 전달해주는 중간 역할이다.
이때 메세지가 적재되는 공간을 Message Queue(메시지큐), 메시지의 그룹을 Topic(토픽) 이라고 한다.
어플리케이션으로부터 메시지를 받아 전달해주는 중간 매개체로서 메시지를 받아 해당 역할을 수행하는데 초점이 있다.
메시지 큐(Message Queue) 는,
프로세스나 프로그램 간에 데이터를 교환하기 위한 통신 방법 중 하나이다.
주로 메시지 지향 미들웨어를 기반으로 구현되며, 메시지를 안전하게 보관하고 전달하는 역할을 한다.
이 시스템에서 메시지는 메시지 저장소 역할인 큐(Queue)에 FIFO 형태로 저장 및 전달된다.
일반적으로는 우리는 간단한 서버(클라이언트-서버
) 구조에서 사용자가 요청을 하면 서버는 그에 대한 처리를 한 후 클라이언트에게 응답을 하는 직접적인 통신 방식으로 처리하였다.
이렇게 작은 규모의 응용 프로그램에서는 간단한 HTTP 통신이나 RESTful API 등을 사용하여 통신하는 것으로 충분할 수 있다. 메시지 큐의 경우 비동기적인 특성을 가지고 있어 응답 시간이 상대적으로 길어질 수 있고, 시스템 구조가 더 복잡해지며 추가적인 오버헤드가 발생할 수 있기 때문이다.
반대로 분산된 시스템의 경우, 메시지 큐의 비동기 통신 지원으로 송신자(Producer)와 수신자(Consumer)가 독립적으로 작동할 수 있다는 점에서 보다 적합할 수 있다.
또한 수평 및 수직 확장이 용이하다는 점에서 대규모 데이터를 처리해야하는 시스템에 보다 적합하다.
위와 같은 메시지 큐는 다음과 같은 종류들과 특징을 지니고 있다.
모두 MOM의 개념과 프로토콜을 활용한 다양한 구현체이다.
(단, 기능이나 내부적으로 동작하는 방식 등은 차이점이 존재한다.)
Apache Kafka
RabbitMQ
Redis (Pub/Sub 및 Streams)
Amazon SQS
때문에, 메시지 큐를 적용하려면 다양한 메시지 큐 중에서 서비스, 시스템 목적에 맞는 것을 선정해야한다. (실무라면 실제 데이터 유입량과 실시간성, 영속성 등을 따져보고 결정해야한다.)
메시지 (Message)
여기서 메시지란? 정보 또는 데이터의 작은 단위로서 다양한 형태의 정보를 포함할 수 있는 구조체이다. (ex. JSON, XML ..) 일반적으로는 페이로드(payload)로 실제 데이터를 포함하며, 메타데이터(헤더)도 추가로 가질 수 있다.
실시간 비동기 데이터 교환으로 분산 시스템 간 결합도를 낮추되 확장성과 유연성을 키우고 싶다면 메시지 큐를 고려하자. 단, 시스템 복잡도가 높아질 수 있고, 비동기 교환이므로 서비스의 특징(데이터 유입량, 실시간 성)등을 잘 고려하여 메시지 큐를 선택하자.
[참고]
https://tecoble.techcourse.co.kr/post/2021-09-19-message-queue/
https://velog.io/@spamdong/%EB%A9%94%EC%84%B8%EC%A7%80-%EC%A7%80%ED%96%A5-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4MOM
https://dev-jwblog.tistory.com/140