RabbitMQ
목적
RabbitMQ는 Lumie의 이벤트 버스입니다. 플랫폼은 RabbitMQ Cluster Operator와 Messaging Topology Operator를 설치하고, platform/rabbitmq에서 공유 exchange와 queue를 정의하며, 이를 소비하는 애플리케이션은 각자의 애플리케이션 디렉터리에서 사용자 자격 증명과 권한을 소유합니다.
이 페이지는 큐 topology, 브로커 인증, 서비스별 자격 증명, 워커 및 백엔드 메시징 경계를 변경하는 개발자를 위한 레퍼런스 문서입니다. 큐 깊이 기준 autoscaling은 KEDA를 참고하세요.
소스 경로
| 경로 | 역할 |
|---|---|
lumie-infra/platform/rabbitmq-operator/argocd.yaml | RabbitMQ Cluster Operator와 Messaging Topology Operator 설치 |
lumie-infra/platform/rabbitmq-operator/helm-values.yaml | operator 이미지 소스와 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.yaml | lumie-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.yaml | lumie-worker의 워커 사용자와 범위 제한 권한 |
퍼블릭 표면
| 표면 | 네임스페이스 | 비고 |
|---|---|---|
| RabbitMQ operator | rabbitmq-system | 클러스터 및 topology CRD 설치 |
| 프로덕션 브로커 | lumie-event | 백엔드와 워커 트래픽을 위한 중앙 브로커 |
| 개발 브로커 | lumie-dev | 공유 dev 환경용 별도 브로커와 앱 사용자 |
| 공유 exchange | lumie.commands, lumie.dlx | Topology Operator Exchange CR로 선언 |
| 공유 queue | grading.omr-request, grading.omr-callback, report.generation-request, report.generation-callback, DLQ | Topology Operator Queue CR로 선언 |
런타임 흐름
공유 토폴로지 계약
| 리소스 | 활성 계약 |
|---|---|
lumie.commands | 요청 및 콜백 라우팅용 direct exchange |
lumie.dlx | dead letter용 topic exchange |
grading.omr-request | quorum queue, TTL 600000, DLX lumie.dlx |
report.generation-request | quorum queue, TTL 1800000, DLX lumie.dlx |
grading.omr-callback | quorum queue, TTL 600000, DLX lumie.dlx |
report.generation-callback | quorum queue, TTL 1800000, DLX lumie.dlx |
work-queue-config policy | 요청 및 콜백 queue에 delivery-limit: 5와 TTL 강제 |
브로커는 platform/rabbitmq/base/podmonitor.yaml을 통해 오브젝트별 메트릭을 노출하며, 이는 큐별 alerting과 KEDA 점검에 필요합니다.
소유권 경계
| 책임 | 소유자 |
|---|---|
| Operator 설치와 CRD | platform/rabbitmq-operator/** |
| 공유 exchange, queue, binding, 기본 브로커 구성 | platform/rabbitmq/base/** |
| 네임스페이스 연결과 cluster-reference 조정 | platform/rabbitmq/overlays/{prod,dev} |
| 소비자별 사용자 자격 증명과 permission regex | applications/lumie/** 아래 애플리케이션별 매니페스트 |
이 워커 권한 발췌가 핵심 최소 권한 불변식입니다.
permissions:
configure: '^grading\..*$'
write: '^(grading\..*|lumie\..*)$'
read: '^grading\..*$'
백엔드는 흐름을 오케스트레이션하고 management API를 사용할 수 있으므로 더 넓은 접근 권한을 유지합니다.
오버레이 동작과 드리프트
기본 레이어와 overlay는 같은 최종 브로커 계약을 설 명하지 않습니다.
| 소스 | 주장 |
|---|---|
platform/rabbitmq/base/rabbitmq-cluster.yaml와 configmap.yaml | 아직 definitions 파일 경로와 ConfigMap 기반 사용자 정의 포함 |
platform/rabbitmq/overlays/prod/kustomization.yaml | definitions 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