본문으로 건너뛰기

아키텍처 개요

Lumie 플랫폼은 OCI(Oracle Cloud Infrastructure) 위의 K3s 클러스터에서 운영됩니다. GitOps(ArgoCD), 자동화된 CI/CD(Tekton), 통합 관측성 스택을 중심으로 설계되었습니다.

클러스터 구성

K3s 클러스터는 마스터 노드 1대와 워커 노드 3대(worker-2, worker-3, worker-4)로 구성됩니다. worker-1은 2026-04에 제거되었습니다.

노드 역할

노드OCI 계정역할
마스터0214K8s Control Plane, Teleport Proxy HA
worker-20214애플리케이션 파드, Traefik Ingress (svclb DaemonSet)
worker-30213애플리케이션 파드, Traefik Ingress (svclb DaemonSet)
worker-40213애플리케이션 파드, Traefik Ingress (svclb DaemonSet)

마스터 노드는 Teleport가 443 포트를 점유하므로 Traefik svclb DaemonSet에서 제외됩니다.

NLB 구성

NLB예약 IP용도
애플리케이션 NLB168.107.42.253Cloudflare 프록시 경유 → Traefik (앱 트래픽)
Teleport NLB158.180.89.154Teleport Proxy HA (SSH/K8s API 접근)

dev.lumie-infra.comlumie-edu.com 계열은 Cloudflare 프록시(orange cloud)를 통해 168.107.42.253 NLB로 라우팅됩니다.

도메인 구성

도메인용도
lumie-edu.com서비스 메인 도메인 (프론트엔드, API)
lumie-infra.com인프라 도구 (Teleport, ArgoCD, Grafana 등)
zot.lumie-infra.com내부 컨테이너 이미지 레지스트리 (Zot)

전체 아키텍처

핵심 컴포넌트

Traefik Ingress

K3s에 내장된 Traefik이 외부 트래픽의 단일 진입점입니다. Kong을 대체하며 JWT/CORS는 Spring Security 애플리케이션 레벨에서 처리합니다.

  • StripPrefix Middleware: applications/lumie/backend/lumie-backend/manifests/strip-prefix.yaml
  • Ingress className: traefik
  • TLS: cert-manager + Let's Encrypt

ArgoCD (GitOps)

lumie-infra 레포지토리가 단일 진실 공급원입니다. 모든 K8s 리소스는 Git 커밋으로 관리되며 ArgoCD가 자동으로 동기화합니다.

lumie-infra/
├── applications/
│ ├── lumie/
│ │ └── backend/
│ │ └── lumie-backend/ ← 단일 백엔드 ArgoCD App
│ └── kustomization.yaml
├── bootstrap/ ← minio, zot, vault
└── networking/
└── traefik.md ← 현행 Ingress 설정

Tekton CI/CD

백엔드 전체가 단일 lumie-springboot-build-deploy 파이프라인으로 통합되었습니다(타임아웃 45분). 워커 서비스(grading, report, analysis, chatbot)는 lumie-worker 레포에서 경로 기반 CEL 필터로 개별 처리됩니다.

파이프라인대상트리거
lumie-springboot-build-deploylumie-backend 레포 전체Push to main
lumie-worker-{서비스명}각 워커 서비스 경로경로 기반 CEL 필터

HashiCorp Vault

애플리케이션 시크릿을 중앙에서 관리합니다. External Secrets Operator가 Vault에서 K8s Secret으로 동기화합니다.

주요 시크릿 경로:

storage/postgresql → DB 자격증명, PgBouncer userlist
platform/rabbitmq → RabbitMQ 비밀번호
platform/redis → Redis 비밀번호
security/jwt → JWT secret key
bootstrap/minio → MinIO access/secret key
applications/ai-svc → DeepSeek API key

관측성 스택

컴포넌트역할
OpenTelemetry Collector메트릭·트레이스·로그 수집 에이전트
Prometheus메트릭 수집 및 알림 규칙
Thanos장기 메트릭 저장 (MinIO 백엔드)
Grafana대시보드 및 시각화
Loki로그 집계
Tempo분산 트레이싱
Alertmanager알림 라우팅 (Slack, PagerDuty 등)

보안 레이어

컴포넌트역할
TraefikTLS 종단, 외부 트래픽 제어
Spring SecurityJWT 검증, CORS, 인가
Vault시크릿 중앙 관리
cert-managerTLS 인증서 자동 발급/갱신
KyvernoK8s 정책 엔진 (이미지 정책, 레이블 강제 등)
Falco런타임 이상 행위 감지
Trivy컨테이너 이미지 취약점 스캔
KeycloakSSO / OAuth2 Provider

스토리지

컴포넌트용도
MinIO파일 저장소, Thanos 메트릭 백엔드, Velero 백업 대상
VeleroK8s 리소스 및 PVC 정기 백업
Zot내부 OCI 컨테이너 이미지 레지스트리

네임스페이스 구성

네임스페이스용도
lumie-backend백엔드 모놀리스 (3 replicas)
lumie-frontendNext.js 프론트엔드
lumie-workerFastAPI 워커 서비스 4종
lumie-dev개발 환경 (dev-workspace, pgbouncer, rabbitmq-dev, lumie-dev-db)
lumie-infraArgoCD, Tekton, Vault, Keycloak, Zot 등 인프라
monitoringPrometheus, Grafana, Loki, Tempo, Alertmanager
kube-systemTraefik, cert-manager, Kyverno 등