Computer Science/Operating System

메시지 큐(Message Queue) 정리

guwon2 2025. 10. 19. 15:25

메시지 큐(Message Queue)

분산 시스템에서 애플리케이션 간 비동기 통신을 가능하게 하는 핵심 인프라


메시지 큐의 기본 원리

  • 비동기 처리: 요청을 큐에 넣어두고 나중에 처리할 수 있어, 요청과 처리 시점을 분리. 이를 통해 시스템은 응답 대기 시간 없이 즉시 다음 작업을 수행할 수 있다.
  • 낮은 결합도(Decoupling): 생산자(Producer)와 소비자(Consumer)가 서로의 상태나 속도에 관계없이 독립적으로 동작할 수 있다. 생산자는 메시지를 큐에 전송하기만 하면 되고, 소비자는 자신의 처리 속도에 맞춰 메시지를 가져간다.
  • 높은 안정성: 소비자가 일시적으로 장애가 발생하더라도 메시지는 큐에 안전하게 보관된다. 서비스가 복구되면 큐에 저장된 메시지부터 처리를 재개할 수 있어 데이터 손실을 최소화한다.

메시지 큐의 기본 구조는 생산자(Producer) → 메시지 브로커 → 소비자(Consumer)로 이루어진다.


메시지 큐의 주요 타입

  • Point-to-Point 방식: 단일 송신자가 메시지를 보내면 특정 소비자 하나만 받을 수 있다. 메시지가 소비되면 큐에서 제거되며, Task Queue와 같이 한 번에 하나의 소비자가 특정 메시지를 처리해야 하는 상황에 유용하다.
  • Publish-Subscribe 방식: 여러 송신자가 메시지를 생성하고, 이를 여러 수신자가 동시에 구독하여 처리하는 패턴이다. 실시간 스트리밍 애플리케이션, 이벤트 기반 아키텍처에서 주로 사용된다.

메시지 큐의 종류

Apache Kafka

  • 특징: 분산 로그 기반의 메시지 스트리밍 플랫폼. 대규모 데이터를 실시간으로 처리하는 데 최적화.
  • 동작 원리: Producer가 메시지를 Topic에 보내면, Broker가 메시지를 여러 Partition으로 분산 저장. Consumer는 Topic을 구독하여 Pull 방식으로 메시지를 가져옴. 메시지는 일정 기간 저장되어 여러 번 읽을 수 있음.
  • Offset: 각 파티션 내에서 메시지의 위치를 나타내는 순차적인 식별자. 장애 발생 시 마지막 Offset부터 재처리 가능.
  • 사용 시점:
    • 대용량 실시간 데이터 스트리밍
    • 이벤트 소싱 및 로그 수집
    • 데이터 파이프라인
    • 메시지 재처리(Offset 기반)

RabbitMQ

  • 특징: AMQP(Advanced Message Queuing Protocol) 기반, 고급 라우팅 기능 제공.
  • 동작 원리: Producer가 메시지를 Exchange에 전송하면, Exchange는 Routing Key와 Binding 패턴을 기반으로 적절한 Queue로 메시지를 전달. Consumer는 Queue를 모니터링하여 메시지를 받음.
  • Exchange 타입:
    • Direct: Routing Key가 정확히 일치하는 Queue로 메시지 전달
    • Fanout: 바인딩된 모든 Queue에 메시지 브로드캐스트
    • Topic: 패턴 매칭을 통한 유연한 라우팅
    • Headers: 메시지 헤더 속성을 기반으로 라우팅
  • 사용 시점:
    • 복잡한 라우팅 로직
    • 비동기 작업 처리(이메일, 이미지 처리 등)
    • 마이크로서비스 간 통신
    • 안정적인 메시지 전달(ACK/NACK)

Redis Pub/Sub & Streams

  • Pub/Sub: 실시간 메시징에 특화. Publisher가 채널에 메시지를 발행하면 해당 채널을 구독하는 모든 Subscriber에게 즉시 전달. 메시지는 저장되지 않음.
  • Streams: 메시지를 로그에 저장하여 영속성 제공. Consumer Group을 통해 여러 소비자가 작업을 분산 처리. 메시지는 명시적으로 삭제하거나 보존 정책에 의해 삭제될 때까지 유지.
  • 사용 시점:
    • 실시간 알림 및 채팅
    • 간단한 작업 큐
    • 실시간 로그 스트리밍
    • 경량 메시징(속도가 중요한 경우)

ActiveMQ

  • 특징: JMS(Java Message Service) 표준을 구현한 오픈소스 메시지 브로커. Queue와 Topic 두 가지 메시징 모델 지원, 다양한 프로토콜 지원.
  • 사용 시점:
    • 자바 기반 엔터프라이즈 애플리케이션
    • 다양한 프로토콜 지원이 필요한 경우
    • 중소규모 시스템

AWS SQS

  • 특징: 완전 관리형 분산 메시지 큐 서비스. 표준 큐(최소 1회 전달)와 FIFO 큐(정확히 1회 처리, 순서 보장) 제공.
  • 사용 시점:
    • AWS 생태계 통합
    • 운영 부담 최소화
    • 간단한 메시지 전달

메시지 큐 선택 기준

기준 Kafka RabbitMQ Redis ActiveMQ AWS SQS
처리량/확장성 매우 높음 중간~높음 높음(메모리) 중간 높음
메시지 영속성 디스크 기반 큐 기반 Streams만 지원 큐/토픽 기반 지원
라우팅 복잡도 토픽/파티션 Exchange 다양 단순 단순~중간 단순
운영 복잡도 높음 중간 낮음 낮음~중간 매우 낮음
주요 사용 사례 대용량 로그 비동기 작업 실시간 알림 JMS 연동 AWS 연동

사용 사례별 정리

  • 실시간 로그 수집 및 분석: Kafka + ELK 스택
  • 마이크로서비스 비동기 통신: RabbitMQ
  • 실시간 채팅 및 알림: Redis Pub/Sub
  • 배치 작업 및 이메일 발송: RabbitMQ
  • AWS 기반 서버리스: AWS SQS + Lambda