[인프라] 메시지 지향 미들웨어 (MOM)

2025. 3. 24. 20:50·CS/인프라

"시스템 간 통신을 더 안전하고 유연하게 만들어주는 중간 다리"

 

복잡한 시스템이 많아진 현대 소프트웨어 아키텍처에서
서로 다른 애플리케이션, 서버, 서비스가 데이터를 주고받는 일은 필수입니다.

하지만 직접 네트워크 연결을 맺어 통신을 한다면?

  • 네트워크 불안정에 취약
  • 한쪽이 죽으면 전체가 멈춤
  • 버전이 다르면 호환성 문제

이런 문제를 해결하기 위해 등장한 게 바로
메시지 지향 미들웨어(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
'CS/인프라' 카테고리의 다른 글
  • [인프라] 오토 스케일링(Auto Scaling)
  • [인프라] 마이크로서비스 아키텍처(MSA)
츄핑
츄핑
    250x250
  • 츄핑
    개발로그
    츄핑
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS
        • 자료구조
        • 알고리즘
        • 운영체제
        • 네트워크
        • 데이터베이스
        • 인프라
        • Web
      • PS
        • 백준
      • JavaScript
        • React
        • Express
        • NestJS
        • TypeScript
        • Node.js
        • Electron
      • Java
        • Spring
      • Dart
        • Flutter
      • PHP
        • CodeIgniter
      • etc
        • 이산수학
        • 선형대수학
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
츄핑
[인프라] 메시지 지향 미들웨어 (MOM)
상단으로

티스토리툴바