"시스템 간 통신을 더 안전하고 유연하게 만들어주는 중간 다리"
복잡한 시스템이 많아진 현대 소프트웨어 아키텍처에서
서로 다른 애플리케이션, 서버, 서비스가 데이터를 주고받는 일은 필수입니다.
하지만 직접 네트워크 연결을 맺어 통신을 한다면?
- 네트워크 불안정에 취약
- 한쪽이 죽으면 전체가 멈춤
- 버전이 다르면 호환성 문제
이런 문제를 해결하기 위해 등장한 게 바로
메시지 지향 미들웨어(Message-Oriented Middleware, MOM) 입니다.
메시지 지향 미들웨어(MOM)란?
MOM은 서로 다른 시스템끼리 메시지를 안전하게 주고받도록 중개해주는 소프트웨어 계층입니다.
한마디로, 메시지를 "중간에서 대신 받아주고", "필요할 때 꺼내서 처리"할 수 있게 해줍니다.
보통 이런 기능을 합니다
- 송신자(Sender)로부터 메시지를 받아
- 안전하게 저장하고
- 수신자(Receiver)가 준비되었을 때 전달
왜 필요한가?
- 직접 연결의 복잡성 제거
- 네트워크 장애 시에도 데이터 손실 방지
- 비동기 통신 가능
- 스케일아웃(확장성) 쉽게 지원
MOM의 주요 개념
메시지 (Message)
- 통신하고자 하는 데이터 조각
- 보통 "헤더 + 바디" 구조를 가짐
- 헤더(Header): 메타정보 (타입, 라우팅 정보 등)
- 바디(Body): 실제 데이터 (JSON, XML, 바이너리 등)
브로커 (Broker)
- 메시지를 중간에 받아서 관리하는 서버
- 큐잉(Queueing), 전달, 라우팅 등을 담당
- 예: RabbitMQ, Kafka
프로듀서(Producer)와 컨슈머(Consumer)
- Producer: 메시지를 보내는 쪽 (생산자)
- Consumer: 메시지를 받는 쪽 (소비자)
메시지 전달 모델
MOM은 두 가지 주요 모델을 지원합니다.
큐(Queue) 모델
- 생산자가 메시지를 큐에 넣고
- 소비자가 하나씩 꺼내서 처리
- 메시지는 한 번만 소비됨
비유:
줄 서 있는 사람(메시지)이 하나씩 차례로 서비스를 받는다.
퍼블리시/서브스크라이브(Pub/Sub) 모델
- 생산자가 메시지를 발행(Publish)
- 여러 구독자(Subscriber)가 메시지를 받아봄
- 하나의 메시지가 여러 수신자에게 복제되어 전달
비유:
방송국이 송출하면 많은 사람들이 동시에 방송을 듣는 것.
MOM 사용 시 얻는 이점
이점 | 설명 |
비동기 처리 | 송신자는 수신자가 즉시 응답하지 않아도 됨 |
장애 허용성 | 네트워크 오류, 서버 중단에도 메시지가 보존됨 |
부하 분산 | 여러 소비자가 메시지를 분산 처리 가능 |
시스템 디커플링 | 시스템 간 직접 통신 대신 느슨한 연결 구조 |
대표적인 MOM 시스템
RabbitMQ
- 가장 많이 쓰이는 오픈소스 메시지 브로커
- AMQP 프로토콜 기반
- 다양한 라우팅, 큐잉 기능 제공
- 특징: 신뢰성 높은 메시지 보장, 복잡한 라우팅 가능
간단한 Producer 코드 (Node.js 예시)
const amqp = require('amqplib');
async function sendMessage() {
const conn = await amqp.connect('amqp://localhost');
const ch = await conn.createChannel();
const queue = 'hello';
await ch.assertQueue(queue, { durable: false });
ch.sendToQueue(queue, Buffer.from('Hello World!'));
console.log("메시지 전송 완료");
setTimeout(() => {
conn.close();
}, 500);
}
sendMessage();
Kafka
- 초고성능, 초대용량 메시지 스트리밍 플랫폼
- LinkedIn이 개발
- "메시지 로그(Message Log)" 기반
- 퍼블리시/서브스크라이브(Pub/Sub) 구조에 최적화
Kafka는 대량 데이터 처리, 분석, 스트림 처리에 주로 사용합니다.
아키텍처 예시
RabbitMQ를 활용한 쇼핑몰 주문 시스템
[Order Service] ---> [RabbitMQ] ---> [Inventory Service]
[Payment Service]
[Notification Service]
- 주문이 들어오면 RabbitMQ에 메시지를 넣음
- 재고, 결제, 알림 등은 각각 필요할 때 메시지를 소비함
- 시스템 간 결합도는 최소화됨
Kafka를 활용한 실시간 로그 분석 시스템
[Web Server] ---> [Kafka Topic: Logs] ---> [Log Processor] ---> [ElasticSearch]
- 웹 서버는 모든 로그를 Kafka에 발행
- 실시간으로 분석 및 검색 가능
언제 MOM을 도입해야 할까?
- 서비스 간 비동기 통신이 필요한 경우
- 시스템이 높은 트래픽/대용량 데이터를 다루는 경우
- 구성 요소 간 독립성과 유연성을 높이고 싶은 경우
- 오프라인 처리 (장애 발생 시 재처리)가 필요한 경우
단점
- 시스템 복잡도가 증가할 수 있음 (운영, 모니터링 필요)
- 설정과 튜닝이 필요
정리
항목 | 요약 |
MOM 정의 | 시스템 간 메시지를 중개하는 미들웨어 |
주요 모델 | 큐 모델(1:1), 퍼블리시/서브스크라이브 모델(1:N) |
대표 제품 | RabbitMQ(전통적 큐), Kafka(대규모 스트리밍) |
도입 장점 | 비동기, 확장성, 장애 내성, 시스템 디커플링 |
주의사항 | 운영 복잡성, 모니터링 필요 |
728x90