Infra

메시지 브로커(Message Broker)

baek-dev 2025. 3. 15. 19:08

⚡ 1. 메시지 브로커(Message Broker)란?

메시지 브로커(Message Broker)서로 다른 시스템 간의 메시지를 비동기적으로 송수신할 수 있도록 중간에서 관리하는 소프트웨어입니다.

 

메시지 브로커의 주요 역할

비동기 메시지 처리 → 발신자(Sender)와 수신자(Receiver)가 동시에 실행되지 않아도 메시지를 처리 가능

시스템 간 결합도(Dependency) 감소 → 직접 호출 대신 메시지 큐를 사용하여 서비스 간 느슨한 결합(Loosely Coupled) 가능

트래픽 관리 → 서비스가 과부하를 받지 않도록 메시지를 저장하고 순차적으로 전달

메시지 보장(Message Durability) → 메시지가 손실되지 않도록 안전하게 보관

확장성(Scalability) → 여러 개의 서비스가 동시에 메시지를 처리 가능 (수평 확장 가능)

 

메시지 브로커의 주요 사용 사례

1. 마이크로서비스 간 통신

2. 이벤트 기반 아키텍처(Event-Driven Architecture)

3. 실시간 데이터 스트리밍 및 로깅(Kafka, RabbitMQ 등 활용)

4. 비동기 작업 처리 (ex: 이메일 발송, 파일 변환, 데이터 처리 등)

 

🚀 즉, 메시지 브로커는 시스템 간 효율적인 메시지 전달을 위해 꼭 필요한 구성 요소!

 

⚡ 2. 메시지 브로커의 동작 방식

메시지 브로커는 발행(Publish) → 전송(Queue) → 구독(Subscribe) 또는 소비(Consume) 방식으로 동작합니다.

 

메시지 브로커의 기본 개념

[Producer] → (Message Broker) → [Queue or Topic] → [Consumer]

 

메시지 브로커의 두 가지 주요 패턴

패턴 설명
큐(Queue) 기반 (Point-to-Point) 메시지가 한 번만 소비됨 (RabbitMQ, ActiveMQ)
퍼블리시/구독(Pub/Sub) 기반 여러 구독자(Subscriber)가 메시지를 받을 수 있음 (Kafka, Redis Pub/Sub)

 

⚡ 3. 대표적인 메시지 브로커 비교

메시지 브로커 특징 사용 사례
RabbitMQ 경량 메시지 브로커, AMQP 지원 마이크로서비스, 이벤트 기반 시스템
Apache Kafka 분산 메시지 스트리밍 플랫폼, 높은 처리량 대규모 로그 처리, 데이터 스트리밍
ActiveMQ Java 기반 메시지 브로커, JMS(Java Message Service) 지원 엔터프라이즈 시스템
Redis Pub/Sub 인메모리 기반 메시지 브로커, 빠른 속도 실시간 알림, 채팅 서비스
AWS SQS/SNS AWS 클라우드 네이티브 서비스 클라우드 환경에서 확장 가능한 메시징

🚀 즉, 사용 목적에 따라 적절한 메시지 브로커를 선택해야 함!

 

⚡ 4. Java & Spring Boot에서 메시지 브로커 사용 방법

Java에서는 RabbitMQ, Kafka, ActiveMQ, Redis Pub/Sub 등을 Spring Boot와 함께 사용할 수 있습니다.

 

✅ 1) RabbitMQ 예제 (Spring Boot)

 

RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 지원하는 메시지 브로커로, 마이크로서비스에서 자주 사용됩니다.

 

📌 RabbitMQ 의존성 추가 (Maven)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

 

📌 RabbitMQ 설정 (application.yml)

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

 

📌 메시지 발행 (Producer)

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;

@Service
public class RabbitMQProducer {
    private final RabbitTemplate rabbitTemplate;

    public RabbitMQProducer(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend("myQueue", message);
        System.out.println("Sent message: " + message);
    }
}

 

📌 메시지 소비 (Consumer)

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

@Service
public class RabbitMQConsumer {
    @RabbitListener(queues = "myQueue")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

실행하면 메시지가 myQueue를 통해 전송되고, 소비자가 메시지를 받아 출력함!

 

✅ 2) Kafka 예제 (Spring Boot)

 

Kafka는 대규모 데이터 스트리밍 및 이벤트 처리에 적합한 메시지 브로커입니다.

 

📌 Kafka 의존성 추가 (Maven)

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

 

📌 Kafka 설정 (application.yml)

spring:
  kafka:
    bootstrap-servers: localhost:9092

 

📌 메시지 발행 (Producer)

import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;

@Service
public class KafkaProducer {
    private final KafkaTemplate<String, String> kafkaTemplate;

    public KafkaProducer(KafkaTemplate<String, String> kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }

    public void sendMessage(String message) {
        kafkaTemplate.send("myTopic", message);
        System.out.println("Sent message: " + message);
    }
}

 

📌 메시지 소비 (Consumer)

import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;

@Service
public class KafkaConsumer {
    @KafkaListener(topics = "myTopic", groupId = "myGroup")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

Kafka를 활용하면 대량의 메시지를 빠르게 처리할 수 있음!

 

⚡ 5. 메시지 브로커 선택 가이드

사용 목적 추천 메시지 브로커
마이크로서비스 간 통신 RabbitMQ, ActiveMQ
이벤트 스트리밍 Kafka
실시간 알림, 채팅 Redis Pub/Sub
AWS 환경에서 메시징 AWS SQS, SNS
기업용 엔터프라이즈 시스템 ActiveMQ

🚀 즉, 메시지의 특성과 목적에 따라 적절한 메시지 브로커를 선택해야 함!

 

⚡ 6. 결론

메시지 브로커는 시스템 간 비동기 메시지 처리를 가능하게 하는 핵심 기술

RabbitMQ, Kafka, ActiveMQ, Redis 등 다양한 메시지 브로커가 존재하며, 목적에 따라 선택해야 함

Spring Boot에서 쉽게 RabbitMQ, Kafka와 통합 가능

메시지 브로커를 활용하면 마이크로서비스 아키텍처를 더 효율적으로 운영 가능

 

🚀 메시지 브로커를 도입하면 시스템의 확장성과 성능이 크게 향상됩니다!

 

 

 

 

출처 : ChatGPT

'Infra' 카테고리의 다른 글

Micrometer  (1) 2025.04.10
Prometheus  (0) 2025.04.09
Grafana  (0) 2025.04.08
리버스 프록시  (1) 2025.04.03
Kafka 카프카  (1) 2025.02.02