Message Queue

Jeongbeen Lee·2025년 2월 17일

TechTalk

목록 보기
4/4

메시지 큐(Message Queue)란?

메시지 큐는 생산자(Producer)가 보낸 메시지를 중간 브로커(Queue)가 보관하고, 소비자(Consumer)가 이를 꺼내 처리하는 비동기 통신 방식을 제공하는 시스템이다.
이를 통해 서비스 간 결합도를 낮추고, 비동기 방식으로 확장성과 성능을 높일 수 있다.

✅ 메시지 큐의 핵심 개념

  1. Producer (생산자): 메시지를 생성하여 큐에 전달하는 역할
  2. Queue (메시지 브로커): 메시지를 보관하고 소비자가 처리할 때까지 유지
  3. Consumer (소비자): 큐에서 메시지를 가져와 처리하는 역할
  4. Exchange & Routing (라우팅): 특정 조건에 따라 메시지를 적절한 큐로 전달 (RabbitMQ 등)

메시지 큐를 사용하는 이유

1. 비동기 처리

  • 요청을 즉시 처리하지 않고 큐에 저장 후, 소비자가 나중에 처리할 수 있도록 함

2. 서비스 간 결합도 감소

  • 직접적인 HTTP 호출 대신 메시지 큐를 사용하면, 서비스 간 의존도를 낮출 수 있음
  • 한 서비스가 다운되어도 메시지는 큐에 저장되어 나중에 처리 가능

3. 확장성 및 트래픽 조절

  • 트래픽이 몰리는 경우에도 메시지가 큐에서 대기 가능
  • 다수의 소비자가 병렬로 메시지를 처리하여 부하를 분산할 수 있음

4. 장애 복구 및 내구성

  • 서비스가 일시적으로 중단되더라도, 메시지는 큐에 저장되어 데이터 손실 방지
  • 메시지 재처리 기능을 제공하는 브로커(RabbitMQ, Kafka 등) 활용 가능

주요 메시지 브로커

RabbitMQ

  • AMQP (Advanced Message Queuing Protocol) 기반
  • 라우팅, 메시지 TTL, 지연 메시지(Delay Queue) 등 다양한 기능 제공
  • 사용 사례: 이메일 전송, 로그 처리, 알림 시스템

Apache Kafka

  • 대량 데이터 스트리밍을 위한 분산 메시지 브로커
  • Publish-Subscribe(구독) 방식을 활용하여 대규모 이벤트 처리 가능
  • 사용 사례: 실시간 로그 수집, 이벤트 스트리밍, 모니터링 시스템

Redis (Pub/Sub)

  • 빠른 속도를 위한 인메모리 메시지 큐
  • RabbitMQ, Kafka보다 기능은 단순하지만 성능이 뛰어남
  • 사용 사례: 실시간 채팅, 캐싱 기반 이벤트 처리

메시지 큐 간단한 구현 예제 (Spring Boot + RabbitMQ)

// Producer (메시지 전송)
@RestController
@RequestMapping("/api")
public class MessageProducer {
    private final RabbitTemplate rabbitTemplate;

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

    @PostMapping("/send")
    public String sendMessage(@RequestParam String message) {
        rabbitTemplate.convertAndSend("myQueue", message);
        return "Message sent!";
    }
}
// Consumer (메시지 소비)
@Component
public class MessageConsumer {
    @RabbitListener(queues = "myQueue")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

메시지 큐는 MSA 환경에서 서비스 간 결합도를 줄이고, 확장성과 성능을 높이는 핵심 요소이며 비동기 처리, 장애 복구, 트래픽 관리 등 다양한 이점을 제공한다.

📌 요약

  • 메시지 큐는 MSA의 서비스 간 비동기 통신을 담당
  • RabbitMQ(AMQP), Kafka(스트리밍), Redis(Pub/Sub) 등 다양한 메시지 브로커가 존재
  • 주요 활용 사례: 이메일 인증, 로그 스트리밍, 주문 처리 시스템 등

0개의 댓글