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

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

시스템 구성도

                                ┌──────────────────────────────────────────────────┐
                                │                    NCP Cloud                      │
                                │  ┌──────────────────────────────────────────────┐│
┌──────────┐    ┌──────────┐   │  │                NKS Cluster                   ││
│  Client  │───▶│ NCP ALB  │───│─▶│  ┌──────────────────────────────────────┐    ││
└──────────┘    └──────────┘   │  │  │          Namespace: qgx              │    ││
                                │  │  │  ┌───────┐ ┌────────┐ ┌──────────┐  │    ││
                                │  │  │  │ front │ │  back  │ │ingestion │  │    ││
                                │  │  │  │:31080 │ │:31090  │ │ :31101   │  │    ││
                                │  │  │  └───────┘ └───┬────┘ └────┬─────┘  │    ││
                                │  │  │                │           │        │    ││
                                │  │  │           ┌────▼───┐  ┌───▼────┐   │    ││
                                │  │  │           │ MySQL  │  │ Kafka  │   │    ││
                                │  │  │           └────────┘  └───┬────┘   │    ││
                                │  │  │                           │        │    ││
                                │  │  │  ┌───────────┐  ┌────────▼──┐     │    ││
                                │  │  │  │  qgx-ai   │  │ processor │     │    ││
                                │  │  │  │  :31070   │  │  :31102   │     │    ││
                                │  │  │  └───────────┘  └───────────┘     │    ││
                                │  │  └──────────────────────────────────────┘    ││
                                │  │  ┌──────────────────────────────────────┐    ││
                                │  │  │       Namespace: monitoring          │    ││
                                │  │  │  Prometheus │ Thanos │ Loki │ Alloy │    ││
                                │  │  │          Grafana │ Memcached         │    ││
                                │  │  └──────────────────────────────────────┘    ││
                                │  └──────────────────────────────────────────────┘│
                                └──────────────────────────────────────────────────┘

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

기술 스택

분류 기술
Cloud / K8s NCP NKS (관리형 Kubernetes)
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 (NCP 관리형), OpenSearch 2.11 (NCP SES)
스토리지 NCP Object Storage (Loki/Thanos), NKS 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, GPT-4, LangChain AI/ML 서비스 1-3 (HPA)
AI Web React, Vite, Nginx AI 챗봇 웹 UI 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
사용자 ──HTTP──▶ ai-web ──REST/SSE──▶ ai-service ──▶ PostgreSQL + GPT-4

리소스 할당

서비스 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
AI Web 10m / 100m 32Mi / 128Mi
Admin Frontend 10m / 100m 32Mi / 128Mi
Admin Backend 50m / 1000m 512Mi / 1Gi
Kafka (x3) 500m / 2000m 1Gi / 2Gi

네트워크 구성

서비스 타입

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

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

네트워크 구조

External Traffic
┌──────────┐
│  Client  │
└────┬─────┘
     ▼
┌──────────┐    NodePort
│   ALB    │──────────────────┐
└──────────┘                  │
                              ▼
┌─────────────────────────────────────────────┐
│ K8s Cluster                                 │
│                                             │
│  NodePort Services (외부 접근)               │
│  front:31080  back:31090  ingestion:31101   │
│  admin-front:31180  admin-back:31190        │
│  ai:31070  ai-web:31071  processor:31102    │
│                                             │
│  ClusterIP Services (내부 전용)              │
│  *-preview (Blue-Green), kafka-headless     │
│  monitoring-* (Prometheus, Loki, Grafana)   │
│                                             │
│  LoadBalancer Services (직접 외부)           │
│  Kafka UI, Grafana, Vaultwarden            │
└─────────────────────────────────────────────┘

도메인 매핑

도메인 대상 용도
qgx.co.kr front:31080 사용자 웹
ai.qgx.co.kr ai-web:31071 AI 챗봇 웹

인프라 도구

도구 네임스페이스 역할
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은 메모리를 일정하게 유지하므로 비효율적