본문으로 건너뛰기

RabbitMQ

목적

RabbitMQ는 Lumie의 이벤트 버스입니다. 플랫폼은 RabbitMQ Cluster Operator와 Messaging Topology Operator를 설치하고, platform/rabbitmq에서 공유 exchange와 queue를 정의하며, 이를 소비하는 애플리케이션은 각자의 애플리케이션 디렉터리에서 사용자 자격 증명과 권한을 소유합니다.

이 페이지는 큐 topology, 브로커 인증, 서비스별 자격 증명, 워커 및 백엔드 메시징 경계를 변경하는 개발자를 위한 레퍼런스 문서입니다. 큐 깊이 기준 autoscaling은 KEDA를 참고하세요.

소스 경로

경로역할
lumie-infra/platform/rabbitmq-operator/argocd.yamlRabbitMQ Cluster Operator와 Messaging Topology Operator 설치
lumie-infra/platform/rabbitmq-operator/helm-values.yamloperator 이미지 소스와 topology-operator 활성화
lumie-infra/platform/rabbitmq/base/rabbitmq-cluster.yaml기본 RabbitmqCluster 사양과 브로커 구성
lumie-infra/platform/rabbitmq/base/topology/*.yaml공유 exchange, queue, binding, policy
lumie-infra/platform/rabbitmq/overlays/prod/kustomization.yamllumie-event 네임스페이스의 프로덕션 overlay
lumie-infra/platform/rabbitmq/overlays/dev/{kustomization.yaml,app-users.yaml}lumie-dev 네임스페이스의 개발 overlay
lumie-infra/applications/lumie/backend/manifests/rabbitmq-user.yaml소비자 네임스페이스의 백엔드 사용자와 권한
lumie-infra/applications/lumie/worker/{grading-svc,report-svc}/manifests/rabbitmq-user.yamllumie-worker의 워커 사용자와 범위 제한 권한

퍼블릭 표면

표면네임스페이스비고
RabbitMQ operatorrabbitmq-system클러스터 및 topology CRD 설치
프로덕션 브로커lumie-event백엔드와 워커 트래픽을 위한 중앙 브로커
개발 브로커lumie-dev공유 dev 환경용 별도 브로커와 앱 사용자
공유 exchangelumie.commands, lumie.dlxTopology Operator Exchange CR로 선언
공유 queuegrading.omr-request, grading.omr-callback, report.generation-request, report.generation-callback, DLQTopology Operator Queue CR로 선언

런타임 흐름

공유 토폴로지 계약

리소스활성 계약
lumie.commands요청 및 콜백 라우팅용 direct exchange
lumie.dlxdead letter용 topic exchange
grading.omr-requestquorum queue, TTL 600000, DLX lumie.dlx
report.generation-requestquorum queue, TTL 1800000, DLX lumie.dlx
grading.omr-callbackquorum queue, TTL 600000, DLX lumie.dlx
report.generation-callbackquorum queue, TTL 1800000, DLX lumie.dlx
work-queue-config policy요청 및 콜백 queue에 delivery-limit: 5와 TTL 강제

브로커는 platform/rabbitmq/base/podmonitor.yaml을 통해 오브젝트별 메트릭을 노출하며, 이는 큐별 alerting과 KEDA 점검에 필요합니다.

소유권 경계

책임소유자
Operator 설치와 CRDplatform/rabbitmq-operator/**
공유 exchange, queue, binding, 기본 브로커 구성platform/rabbitmq/base/**
네임스페이스 연결과 cluster-reference 조정platform/rabbitmq/overlays/{prod,dev}
소비자별 사용자 자격 증명과 permission regexapplications/lumie/** 아래 애플리케이션별 매니페스트

이 워커 권한 발췌가 핵심 최소 권한 불변식입니다.

permissions:
configure: '^grading\..*$'
write: '^(grading\..*|lumie\..*)$'
read: '^grading\..*$'

백엔드는 흐름을 오케스트레이션하고 management API를 사용할 수 있으므로 더 넓은 접근 권한을 유지합니다.

오버레이 동작과 드리프트

기본 레이어와 overlay는 같은 최종 브로커 계약을 설명하지 않습니다.

소스주장
platform/rabbitmq/base/rabbitmq-cluster.yamlconfigmap.yaml아직 definitions 파일 경로와 ConfigMap 기반 사용자 정의 포함
platform/rabbitmq/overlays/prod/kustomization.yamldefinitions ConfigMap을 삭제하고 load_definitions를 제거해, 프로덕션을 operator-native default-user + User CR 방식으로 전환
platform/rabbitmq/overlays/dev/kustomization.yaml같은 operator-native 패턴을 dev에도 적용하고 app-users.yaml에서 앱 사용자 생성

활성 계약은 overlay 동작으로 문서화하세요. 기본 definitions 리소스는 overlay가 의도적으로 제거하는 스테이징 아티팩트입니다.

라이브 클러스터에는 추가 운영 메모가 하나 있습니다. 2026년 6월 14일에 kubectl get rabbitmqcluster rabbitmq -n lumie-event -o yaml은 3노드에서 1노드로의 축소가 지원되지 않는다는 메시지와 함께 ReconcileSuccess=False를 보고했습니다. 이는 다른 desired-state 매니페스트가 아니라 라이브 상태 경고입니다.

검증

cd lumie-infra
rg -n "RabbitmqCluster|delivery-limit|grading\\.omr|report\\.generation|topology-allowed-namespaces|load_definitions" \
platform/rabbitmq platform/rabbitmq-operator applications/lumie
kubectl get rabbitmqclusters,users,permissions,queues,exchanges -A
kubectl get application rabbitmq rabbitmq-dev rabbitmq-operator -n argocd