message queue
분산 시스템이나 애플리케이션 간의 비동기 통신을 지원하는 시스템으로 각 모듈은 메시지를 생성(produce)하고 소비(consume)하는 구조를 통해 데이터를 주고 받는다
-> 시스템 간의 결합도를 낮추고 확장성을 높이는 데 유용한 방식이다
메시지 큐와 이벤트 소싱의 차이
특징 | 메시지 큐 | 이벤트 소싱 |
---|---|---|
목적 | 서비스 간 데이터 전달 | 시스템 상태 복원 및 이벤트 관리(저장, 추적, 집계, 조회 등) |
저장소 | 큐(일시적 저장 | 이벤트 스토어(영구 저장) |
처리 방식 | 비동기 메시지 전달 및 소비 | 이벤트 재생을 통해 상태 복원 |
사용 사례 | 비동기 작업, 분산 시스템 | 도메인 모델 상태 관리, 시스템 상태 복원 |
메시지 큐 사용자 분류
생산자(producer): 메시지를 생성하고 큐에 넣는 역할
소비자(consumer): 큐에서 메시지를 꺼내 처리하는 역할
브로커(broker): 메시지를 큐에 저장하고 전달을 관리하는 시스템
메시지 큐 구성 요소
큐
특정 작업이나 데이터를 전달하기 위해 사용한다
fifo 방식으로 메시지를 저장한다
토픽
메시지를 여러 소비자에게 전달하는 발행-구독(pub-sub) 모델에서 사용한다
생산자는 특정 주제에 메시지를 발행하고 구독자는 해당 주제를 구독하여 메시지를 수신한다
브로커
메시지를 관리하고 전달하는 시스템
dql(dead letter queue)
처리되지 못한 메시지를 저장하는 큐
실패한 메시지의 재처리 및 분석에 사용된다
메시지 큐 동작 원리
메시지 생성
생산자가 특정 주제(topic)나 큐(queue)에 메시지를 보낸다
메시지 큐 저장
브로커가 메시지를 큐에 저장하며 수신자가 처리할 때까지 유지한다
메시지 소비
소비자가 필요할 때 큐에서 메시지를 가져가 처리한다
기본적으로 메시지가 처리되면 큐에서 제거된다
확인(acknowledgement)
소비자는 메시지를 정상적으로 처리한 후 브로커에 확인 응답을 보낸다
만약 실패하면 메시지는 재처리(retry) 또는 죽은 편지 큐(dead letter queue)로 이동한다
메시지 큐 종류
apache kafka
분산 메시징 플랫폼으로 대량의 메시지 스트림을 처리하는 데 적합하다
실시간 로그 처리, 데이터 스트리밍
rabbitmq
amqp 기반의 메시지 브로커로 다양한 메시징 패턴(라우팅, pub/sub, 요청 응답 등)을 지원한다
이벤트 기반 시스템, 비동기 작업 처리
amazon sqs (simple queue service)
aws에서 제공하는 완전 관리형 메시지 큐 서비스
서버리스 메시지 큐
activemq
오픈 소스 메시지 브로커
다양한 메시징 프로토콜 지원(amqp, stomp, mqtt 등)
redis streams
레디스에서 제공하는 메시지 스트림 기능
캐싱과 스트리밍 데이터를 동시에 처리
메시지 큐 활용 사례
이벤트 기반 아키텍처
서비스 간 이벤트 전달 및 비동기 처리
e.g 회원가입 시 이메일 전송 등
비동기 작업 처리
백그라운드 작업을 비동기로 처리
e.g 이미지 처리, 데이터 분석 등
msa 통신
마이크로서비스 간 느슨한 결합 유지
e.g 주문 서비스와 결제 서비스 간 메시지 전달
실시간 데이터 스트리밍
데이터 스트림을 분석하거나 로깅
e.g 실시간 트래픽 분석