본문으로 건너뛰기

기술 스택

Lumie 플랫폼의 전체 기술 스택을 레이어별로 정리합니다.

GitOps 워크플로우

레이어별 기술 스택

백엔드

항목기술비고
언어Java 21Eclipse Temurin, Virtual Threads
프레임워크Spring Boot 3.4.13WebMVC
모듈화Spring Modulith 1.4.4JDBC outbox 이벤트 발행
빌드Gradle (Kotlin DSL)멀티 모듈
ORMSpring Data JPA / Hibernate멀티테넌트 스키마 분리
아키텍처모듈러 모놀리스libs/internal-api 인-프로세스 호출
보안Spring SecurityJWT 검증, CORS, 인가
메시징Spring AMQP (RabbitMQ)비동기 이벤트
캐시/세션Spring Data RedisRedis Sentinel
파일 저장AWS S3 SDKMinIO 엔드포인트
API 문서SpringDoc OpenAPI 2.7.0/v3/api-docs
스케줄러 잠금ShedLock 5.16.0멀티파드 안전 스케줄링
헬스 체크Spring ActuatorLiveness / Readiness
배포 단위lumie-backend.jarlumie-backend NS, 3 replicas

프론트엔드

항목기술비고
프레임워크Next.js 16.2 (App Router)로컬 npm run dev 전용, 클러스터 배포 금지
언어TypeScript 5strict mode
서버 상태TanStack Query (React Query)캐시, 낙관적 업데이트
클라이언트 상태Zustand전역 UI 상태
스키마 검증ZodForm 검증, API 타입 안전성
API 클라이언트orval (OpenAPI codegen)BE openapi.json → 타입 자동 생성
스타일Tailwind CSS커스텀 브레이크포인트 (smalltablet, tablet, desktop)
아키텍처Feature-Sliced Design (FSD)shared → entities → features → widgets → app

Worker 서비스

서비스기술역할
grading-svcFastAPI, Python 3.11, OpenCV, NumPyOMR 이미지 채점 (KEDA RabbitMQ 오토스케일링)
report-svcFastAPI, Python 3.11, Playwright성적표 PDF 생성
analysis-svcFastAPI, Python 3.11학습 데이터 LLM 코멘터리
chatbot-svcFastAPI, Python 3.11, LangGraph 0.3.5, Gemini 2.5 FlashAI 챗봇 (대화 그래프 + Postgres checkpoint)

데이터베이스 / 메시징

컴포넌트기술비고
주 데이터베이스PostgreSQL (CloudNativePG Operator)멀티테넌트 스키마 분리
커넥션 풀CNPG Pooler (PgBouncer 기반)CNPG operator-native Pooler CRD
캐시/세션Redis Sentinelmymaster
메시지 브로커RabbitMQ (RabbitMQ Operator)비동기 이벤트, topology User CR
오토스케일링KEDARabbitMQ 큐 길이 기반 파드 스케일링
파일 저장소MinIOS3 호환 오브젝트 스토리지

인프라 / 오케스트레이션

컴포넌트기술비고
컨테이너 오케스트레이션K3s1 master + 3 workers on OCI (0213/0214)
GitOpsArgoCDlumie-infra 레포 단일 진실 공급원
CI/CDTekton Pipelines단일 백엔드 파이프라인, worker 경로별 파이프라인
이미지 레지스트리Zotzot.lumie-infra.com, OCI 표준, CF proxy off
IngressTraefikK3s 내장, StripPrefix Middleware
TLScert-manager + Let's Encrypt자동 발급/갱신
시크릿 관리HashiCorp Vault + VSOVault Secrets Operator로 K8s Secret 동기화
접근 제어TeleportSSH, K8s API, 앱 접근 제어 (mTLS)
SSOKeycloakOAuth2 / OIDC Provider
백업VeleroPVC 정기 백업 (MinIO 대상)

관측성

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

보안

컴포넌트역할
TraefikTLS 종단, 외부 트래픽 제어
Spring SecurityJWT 검증, CORS, 애플리케이션 인가
HashiCorp Vault시크릿 중앙 관리
KyvernoK8s 정책 엔진
Falco런타임 이상 행위 탐지
Trivy컨테이너 이미지 취약점 스캔
cert-managerTLS 인증서 자동 관리

설계 원칙

1. Everything as Code

모든 인프라와 설정은 Git에서 관리됩니다.

  • 인프라: Kubernetes YAML (Kustomize)
  • 설정: common-values.yaml
  • 시크릿: External Secrets Operator (Vault 연동)
  • 모니터링: Prometheus Rules as Code

2. GitOps First

lumie-infra 레포지토리가 단일 진실 공급원입니다. 직접 kubectl apply를 사용하지 않으며, 모든 변경은 PR → merge → ArgoCD 자동 동기화 흐름을 따릅니다.

3. 멀티테넌시

PostgreSQL 스키마 기반 멀티테넌시를 사용합니다. 테넌트별 스키마가 격리되며 PgBouncer가 커넥션을 관리합니다.

4. 관측성 우선

모든 서비스는 OpenTelemetry SDK를 통해 트레이스를 내보냅니다. Spring Boot Actuator 엔드포인트로 Liveness/Readiness를 제공합니다.

기술 선택 배경

결정이유
마이크로서비스 → 모듈러 모놀리스10개 서비스 운영 복잡성 감소, 배포 단순화, in-process 호출로 gRPC 제거
Kong → TraefikK3s 내장 컴포넌트 활용, 별도 Kong 운영 비용 제거, JWT/CORS를 애플리케이션 레벨로 통합
10개 파이프라인 → 단일 파이프라인백엔드 전체가 하나의 JAR로 빌드되므로 파이프라인도 통합
gRPC → libs/internal-api모놀리스 내 in-process 호출로 네트워크 오버헤드 제거, protobuf 의존성 제거