목차
- 미들웨어란?
- MOM 이란?
- MOM 구성요소
- MOM vs without MOM
- Messaging 의 2가지 방식
- PTP Messaging
- Pub/Sub Messaging
- Message Broker
- 대표적인 MOM 솔루션
오늘은 요즘 많은 분야에서 채택되어 사용되고 있는 Message Oriented Middleware 에 대해서 알아보려 한다.
Message Oriented Middleware, MOM 이란 하나의 소프트웨어나 솔루션 보다는 더 상위 개념으로 아키텍처 패턴이나 프로그래밍 기법에 해당한다고 생각한다.
물론 MOM을 위키피디아에서는 응용 소프트웨어 간의 데이터 통신을 위한 소프트웨어라고 부르지만 우리는 조금 더 큰 개념에서 이해해보자.
이런 MOM 을 이해하기 위해서는 우선 Middleware에 대한 이해가 선행되어야 한다.
간단하게 미들웨어가 무엇인지 알아보도록 하자.
Middleware, 미들웨어 란?
미들웨어는 단어 뜻 그대로 중간에 존재하는 제품을 의미한다.
미들웨어는 처음 들어보았을 수도 있고 이미 익숙할 수도 있지만 우리는 이미 미들웨어를 사용하고 있을 수도 있다.
백엔드 개발을 해보았다면 데이터베이스를 사용해 데이터의 영속성을 관리했을 것이다.
이 데이터베이스의 ODBC, JDBC 등등 이 바로 미들웨어의 한 종류라고 볼 수 있다.
데이터베이스는 데이터베이스 벤더에서 제공하는 클라이언트에서 원격으로 DB와 연결하기 위한 미들웨어라고 하는데, 우리가 알고 있는 가장 유명한 미들웨어는 앞에서 이야기했던 것 처럼 JDBC가 있다.
Java로 예를 들어 보자.
우리는 JDBC 프로그래밍을 하면서 혹은 JPA 프로그래밍을 하면서 SQL을 직접 혹은 간접적으로 (객체 타입으로) 짜더라도 JDBC Template 이 알아서 DB에 맞게 변환을 시켜주는데, 이 때 사용되는 것이 바로 미들웨어인 JDBC 이다.
우리는 실제 SQL 에 관련된 세팅을 직접 하지 않더라도 어느정도 미들웨어가 이를 해결해주어 편리하게 사용할 수 있게 되는 것이다.
일단 이 미들웨어에 대해서 먼저 우리끼리 정의를 하고 넘어가자
미들웨어는 소프트웨어와 소프트웨어 사이의 중간에 위치해서 이 둘 소프트웨어를 쉽게 통합하기 위해 조정과 중개를 하는 소프트웨어다!
Message Oriented Middleware, MOM 이란?
메시지 기반 미들웨어, Message Oriented Middleware는 미들웨어 종류 중 하나로 비동기 메시지 전달에 기초한 미들웨어이다.
MOM은 대부분 Message Queue 를 기반으로 메시지를 전달하며 Microservice와 같은 분산 환경에서 메시지를 주고받으면서 데이터를 교환할 수 있도록 해준다.
모든 MOM이 Message Queue 를 기반으로 동작하는 것은 아니다. 우리가 가장 많이 사용하는 MOM 솔루션인 RabbitMQ나 Kafka가 Message queue를 사용하지 다른 MOM 에서는 브로드캐스트 형식이나 멀티 캐스트 형식의 메시지 시스템도 있다.
MOM 구성 요소
MOM의 구성 요소는 총 4가지가 존재한다고 할 수 있다.
- 데이터에 해당하는 메시지
- 메시지를 보내는 Sender, 발신자
- 메시지를 받는 Receiver, 수신자
- 메시지를 관리하는 메시지 Provider 메시지 제공자
Sender와 Receiver는 각각 메시지를 송, 수신하는 주체가 된다.
이들은 직접적으로 Provider인 MOM에 연결되어 각각의 필요한 작업을 수행한다.
그리고 송신 주체에게 받은 데이터를 Provider가 지정한 destination 에 저장해서 요청이 발생할 때까지 보관하게 된다.
MOM vs without MOM
만약 MOM이 없다면 어떻게 될까?
일반적인 상황에서 MOM의 필요성은 크게 두드러지지 않지만 분산 환경에서 그 존재감을 확인할 수 있다.
보통 마이크로서비스의 인스턴스가 확장이 되면 분산 시스템 및 데이터의 동기화에 대한 이슈가 발생하게 되고 해당 이슈가 발생하는 애플리케이션으로 데이터를 요청하였을 때, 동일한 연산을 수행하더라도 무결하지 않은 데이터를 받을 가능성이 커진다.
자세한 이야기는 MSA의 핵심 구성 요소 - Message Queueing에서 확인할 수 있다.
MOM이 메시지를 전달하는 방식
MOM에서 메시지를 전달하는 방식에는 크게 2 가지 방식이 존재한다.
- Point To Point Messaging
- Publish-Subscribe Messaging
Point To Point Messaging
지점 간 메시징 이라고 하는 Point-To-Point 메시징 모델은 위에서 봤던 그림을 그대로 이해하면 된다.
메시지를 생성하는 생성자(sender)는 메시지를 생성하고 메시지 큐로 전송한다.
메시지 큐는 메시지를 저장하고 수신자(receiver)가 사용하기 전 까지 데이터를 보관하여 수신자에게 메시지를 전송하게 된다.
Publish-Subscribe Messaging
게시-구독 메시지라고 하는 Pub/Sub Messaging 모델은 메시지를 생산하는 게시자 (publisher)와 메시지를 소비하는 구독자 (subscriber)라고 하며, 둘 간의 메시지 교환을 위해 토픽 (topic)을 이용하게 된다.
게시자가 토픽에 대한 메시지를 생성하면 구독자는 구독 중인 토픽에서 메시지를 소비할 수 있다.
대표적인 비동기 메시징 모델이다.
지점 간 메시징과 대비되는 개념은 바로 구독 중인 모든 수신자가 해당 메시지를 이용할 수있다는 것이다.
Message Broker 란?
메시지 브로커는 MOM과 대조되는 개념이 아니라 MOM 내에 존재하는 Message Provider 를 의미한다.
Message Provider가 어떤 방식으로 메시지를 제공하는지에 따라서 Broker의 스펙과 방식이 달라지며 앞에서 본 2가지 메시지 전달 방식이 바로 Message Broker 에 대한 전달 방식이라고 할 수 있다.
IBM 에서는 Message Broker를 다음과 같이 정의하고 있다.
Message brokers are an inter-application communication technology to help build a common integration mechanism to support cloud native, microservices-based, serverless and hybrid cloud architectures.
메시지 브로커(Message Broker)는 클라우드 네이티브, 마이크로서비스 기반, 서버리스 및 하이브리드 클라우드 아키텍처를 지원하는 공통 통합 메커니즘을 구축하는 데 도움이 되는 애플리케이션 간 통신 기술입니다.
Message Broker 는 메시지를 생성하는 송신자와 메시지를 받는 수신자에 의해서 동작하게 되며, 송신자가 Message Queue에 데이터를 차례로 넣으면 수신자가 해당 Message를 차례대로 이용하게 되는 Store-And-Forward 방식이다.
대표적인 Message Broker 솔루션
우리는 이 Message Broker를 이용해서 MOM을 구축하게 될 것인데, 대표적으로는 다음과 같은 메시지 브로커가 존재한다
- AWS의 Simple Queue Servier, SQS
- Apache의 Kafka
- Mozila의 RabbitMQ
'MessageBroker' 카테고리의 다른 글
Redis가 싱글스레드임에도 높은 성능을 보장하는이유 (0) | 2024.11.30 |
---|---|
실습으로 배우는 선착순 이벤트 시스템 - review (1) | 2023.10.02 |
Kafka Connect Source,Sink 통해 다른시스템과 데이터 주고받기 (0) | 2023.06.22 |
Spring Cloud Bus란 무엇인가? (0) | 2023.06.16 |
RabbitMq 설치하는방법 (0) | 2023.06.16 |