[DevOps] 클라우드 네이티브 플랫폼 구축기

클라우드 네이티브 플랫폼 아키텍처

시스템 구성도

                                ┌────────────────────────────────────────┐
                                │              Cloud Platform            │
                                │  ┌──────────────────────────────────┐  │
┌──────────┐    ┌──────────┐   │  │          K8s Cluster             │  │
│  Client  │───▶│   ALB    │───│─▶│  ┌──────────────────────────┐    │  │
└──────────┘    └──────────┘   │  │  │    App Namespace         │    │  │
                                │  │  │  ┌───────┐ ┌────────┐   │    │  │
                                │  │  │  │ front │ │  back  │   │    │  │
                                │  │  │  └───────┘ └───┬────┘   │    │  │
                                │  │  │                │        │    │  │
                                │  │  │           ┌────▼───┐    │    │  │
                                │  │  │           │ MySQL  │    │    │  │
                                │  │  │           └────────┘    │    │  │
                                │  │  │  ingestion ──▶ Kafka    │    │  │
                                │  │  │                  │      │    │  │
                                │  │  │  ai-service  processor  │    │  │
                                │  │  └──────────────────────────┘    │  │
                                │  │  ┌──────────────────────────┐    │  │
                                │  │  │  Monitoring Namespace    │    │  │
                                │  │  │  Prometheus │ Thanos     │    │  │
                                │  │  │  Loki │ Alloy │ Grafana  │    │  │
                                │  │  └──────────────────────────┘    │  │
                                │  └──────────────────────────────────┘  │
                                └────────────────────────────────────────┘

MySQL, OpenSearch는 클라우드 관리형 서비스 (클러스터 외부, VPC 내부 통신)

기술 스택

분류 기술
Cloud / K8s 관리형 Kubernetes Service
GitOps ArgoCD (App of Apps 패턴)
배포 전략 Argo Rollouts (Blue-Green + K6 Smoke Test)
패키지 관리 Helm v3
CI GitHub Actions → GHCR
설정 관리 ConfigMap + SealedSecrets (별도 레포, Multiple Sources)
모니터링 Prometheus + Thanos, Loki + Alloy, Grafana
메시지 큐 Apache Kafka (KRaft, 3-node)
DB MySQL 8.3 (관리형), OpenSearch 2.11 (관리형)
스토리지 Object Storage (Loki/Thanos), Block Storage (Prometheus/Kafka)

애플리케이션 서비스 구성

서비스 기술 스택 역할 Replicas
Frontend React 18, Vite, Nginx 사용자 웹 UI 2-5 (HPA)
Backend API Spring Boot 3.2, Java 21 메인 API (멀티테넌트) 2-5 (HPA)
Data Ingestion Netty 4.1, Java 21 실시간 데이터 수집 → Kafka 2-5 (HPA)
Message Processor Spring Boot 3.2, Kafka Consumer 메시지 처리 → OpenSearch 2-5 (HPA)
AI Service Python, LLM, LangChain AI/ML 서비스 1-3 (HPA)
Admin Frontend React 19, Vite, Nginx 관리자 웹 UI 2 (고정)
Admin Backend Spring Boot 3.2, Java 21 관리자 API 2 (고정)

인프라 서비스

서비스 기술 스택 역할
Kafka Apache Kafka 3.9.0 (KRaft) 메시지 큐 (3-node StatefulSet)

데이터 흐름

외부 데이터 ──TCP──▶ ingestion ──Kafka──▶ processor ──▶ MySQL + OpenSearch
사용자 ──HTTP──▶ frontend ──REST──▶ backend ──▶ MySQL
관리자 ──HTTP──▶ admin-frontend ──REST──▶ admin-backend ──▶ MySQL

리소스 할당

서비스 CPU (req/limit) Memory (req/limit)
Frontend 10m / 100m 32Mi / 128Mi
Backend API 100m / 2000m 768Mi / 1536Mi
Data Ingestion 200m / 2000m 512Mi / 1Gi
Message Processor 100m / 2000m 768Mi / 1536Mi
AI Service 500m / 6000m 2304Mi / 6Gi
Admin Frontend 10m / 100m 32Mi / 128Mi
Admin Backend 50m / 1000m 512Mi / 1Gi
Kafka (x3) 500m / 2000m 1Gi / 2Gi

네트워크 구성

서비스 타입

타입 용도 대상
NodePort ALB → 서비스 라우팅 애플리케이션 7개
ClusterIP 내부 통신, Blue-Green Preview Kafka headless, 모니터링, Preview 서비스
LoadBalancer 직접 외부 노출 Grafana, Kafka UI, 비밀번호 관리

Kubernetes Ingress 미사용 — Cloud ALB가 각 서비스의 NodePort로 직접 라우팅.

네트워크 구조

External Traffic
┌──────────┐
│  Client  │
└────┬─────┘
     ▼
┌──────────┐    NodePort
│   ALB    │──────────────────┐
└──────────┘                  │
                              ▼
┌─────────────────────────────────────────────┐
│ K8s Cluster                                 │
│                                             │
│  NodePort Services (외부 접근)               │
│  frontend  backend  ingestion               │
│  admin-frontend  admin-backend              │
│  ai-service  processor                      │
│                                             │
│  ClusterIP Services (내부 전용)              │
│  *-preview (Blue-Green), kafka-headless     │
│  monitoring-* (Prometheus, Loki, Grafana)   │
│                                             │
│  LoadBalancer Services (직접 외부)           │
│  Kafka UI, Grafana, Vaultwarden            │
└─────────────────────────────────────────────┘

인프라 도구

도구 네임스페이스 역할
Sealed Secrets kube-system SealedSecret → Secret 자동 복호화
Vaultwarden tools 팀 비밀번호 관리

HPA (Horizontal Pod Autoscaler)

모든 주요 서비스에 CPU 기반 HPA 적용. scaleTargetRef는 Rollout 리소스 대상.

  • 일반 서비스: CPU 70%, min 2 / max 5
  • AI Service: CPU 60%, min 1 / max 3
  • Admin 서비스: HPA 미적용, 고정 2 replicas
  • Memory HPA 제거 — JVM은 메모리를 일정하게 유지하므로 비효율적