message queue

메시지 큐와 이벤트 소싱의 차이

메시지 큐 사용자 분류

메시지 큐 구성 요소

메시지 큐 동작 원리

메시지 큐 종류

메시지 큐 활용 살계

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 실시간 트래픽 분석