Files
QuantEngineByItz/docs/archive/CICD_ANALYSIS_AND_ROADMAP.md
T
kjh2064 70824c2afb fix: security, data-integrity, and doc-drift findings from repo audit
Consolidates duplicate KIS API client implementations (governance tests
were exercising an unused class instead of the one actually running in
production), closes a SQL injection path in the DB admin page, fixes a
migration that used MySQL-only syntax and had never actually applied
(confirmed against production), resyncs docs/db/quantengine.dbml with
all migrations, and removes a duplicate OMS·WMS·ERP frontend tree in
favor of src/frontend/. Also corrects several unverifiable/inflated
claims in the OMS planning docs and realigns CI/CD and architecture
documentation with what's actually in the repo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 11:20:02 +09:00

8.0 KiB

ARCHIVED (2026-07-30): 2026-07-11 시점 build.yml/wbs_9_3_*.yml/merge-to-main.yml 등 이후 삭제된 워크플로우를 전제로 쓰였습니다. 현재 CI 구조는 ../CICD_PIPELINE.md를 참고하세요.

QuantEngine CI/CD 파이프라인 — 근본적 개선 분석 및 로드맵

작성일: 2026-07-11
분석 대상: 522 workflow runs (모두 실패 또는 skipped)
핵심 발견: 원론적 아키텍처 결함, 중복 빌드, 불명확한 실패 원인


📊 현재 상태 분석

1. Workflow 구조의 문제

Current (병렬 & 독립적):
  
  push → build.yml      → GitHub Release 발행 → 🔴 실패
       → ci.yml         → 30+ validators     → 🔴 실패
       → deploy-prod.yml → 배포                → 🔴 실패
       → wbs_9_3_*.yml  → 검증                → 🔴 실패
  
  문제점:
  - 세 workflow가 동시에 실행 (경합 위험)
  - build.yml과 deploy-prod.yml이 각각 독립적으로 빌드
  - 아티팩트 공유 메커니즘 없음
  - GitHub Release action 사용 (Gitea에서 미지원)
  - ci.yml의 30+ 단계 중 어느 것이 실패하는지 불명확

2. 실패 패턴 (최근 20개 run 분석)

build.yml:         18/20 실패 (90%)
ci.yml:            18/20 실패 (90%)
deploy-prod.yml:   18/20 실패 (90%)
wbs_9_3_*.yml:      5/5  실패 (100%)
validate-ui-*:      5/5  skipped (조건부 실행)

일관된 실패 = 시스템적 문제 (간헐적 flake 아님)

3. 주요 근본 원인

원인 영향 심각도
빌드 중복 CI runner 리소스 낭비, 시간 증가 🔴 High
Workflow 의존성 부재 각 workflow가 독립적 → 아티팩트 비동기화 🔴 High
30+ Python validators 순차 실행 하나 실패 시 전체 ci.yml 중단 → 원인 파악 어려움 🔴 High
GitHub Release 사용 Gitea에서 미지원 → build.yml 실패 🔴 High
로그 분산 실패 원인 추적 어려움 🟠 Medium
Secret 관리 부재 QUANTENGINE_DB_PASSWORD 미설정 🟠 Medium

🎯 원론적 개선 방향 (Principled Architecture)

Phase 1: Pipeline 아키텍처 재설계 (필수)

목표: SSOT (Single Source of Truth) + 명확한 흐름

재설계 (순차 & 의존적):

  push → stage: Validate (fast gates)
         ├─ Lint & Format Check
         ├─ Security Scan (KIS API governance)
         └─ Spec Validation (YAML/JSON)
         → stage: Build (공유 아티팩트)
         ├─ dotnet build
         ├─ Unit tests
         └─ Package creation
         → stage: Test (통합 테스트)
         ├─ Python validators (병렬, 독립적 재시도)
         └─ E2E tests
         → stage: Deploy (조건부)
         ├─ Pre-deployment checks
         ├─ Green-Blue deployment
         └─ Health check

효과:
- 빌드 1회만 → 시간 50% 단축
- 아티팩트 중앙화 → 동기화 문제 제거
- 각 stage 독립 실패 처리 → 원인 명확
- Validator 병렬 실행 가능 → 시간 개선

Phase 2: Quality Gates 계층화

Tier 1: Fast Gates (< 2분, 모든 PR)
  ├─ YAML/JSON lint
  ├─ File size check
  ├─ Branch naming convention
  └─ → 실패 시 즉시 피드백

Tier 2: Critical Gates (3-5분, 모든 PR)
  ├─ KIS API read-only enforcement
  ├─ No hardcoded secrets
  ├─ Security scanning
  └─ → 실패 시 배포 차단

Tier 3: Integration Gates (10-15분, merge 시에만)
  ├─ 30+ Python validators (병렬 실행)
  ├─ Unit tests
  └─ → 실패 시 skipped (로그만 저장)

효과:
- PR 속도 개선 (2분 내 피드백)
- 중요한 gate만 배포 차단
- Validators 실패 = 정보만 저장 (배포는 진행)

Phase 3: Observability 강화

각 단계별 명확한 출력:

✅ Stage: Validate
   └─ Lint: PASS
   └─ Security: PASS
   └─ Specs: PASS (3/3 files)

✅ Stage: Build
   └─ Restore: PASS (1.2s)
   └─ Build: PASS (45s)
   └─ Tests: PASS (8/8)
   └─ Package: quantengine-abc1234.tar.gz (2.6MB)

✅ Stage: Test
   ├─ validator-01-kis-governance: PASS
   ├─ validator-02-specs: PASS
   ├─ validator-03-formula: PASS
   ... (병렬 실행)
   └─ Summary: 28/30 PASS, 2 SKIP (ok)

✅ Stage: Deploy
   └─ Green-Blue: quantengine_20260711_ABC1234_523
   └─ Health: OK (HTTP 200)
   └─ Rollback: Available

효과:
- 각 단계 진행 상황 실시간 파악
- 실패 시 구체적인 단계 & 원인 명시
- Artifact 추적 가능

Phase 4: Workflow 파일 구조화

새로운 파일 구조:

.gitea/workflows/
├─ _common/                  # 공유 로직
│  ├─ build-artifact.yml     # dotnet build & package
│  ├─ quick-gates.yml        # Lint, 정적분석
│  ├─ deploy.yml             # Green-Blue deployment
│  └─ notify.yml             # Slack/Telegram 알림
│
├─ pr-validation.yml         # PR 검증 (Fast gates 만)
├─ merge-to-main.yml         # main 병합 (Critical + Integration)
├─ deploy-production.yml     # 배포 (main 태그/release)
│
└─ scheduled/
   ├─ nightly-validators.yml # 야간 전체 검증
   └─ cleanup-deployments.yml# 배포 정리

각 workflow 책임:
- pr-validation.yml: 2분 내 피드백 (Tier 1)
- merge-to-main.yml: 15분 내 완료 (Tier 1+2+3)
- deploy-production.yml: 10분 내 배포 (Tier 2+3+Deploy)

🛠 구체적 개선 작업 (다음 세션)

1단계: 빌드 파이프라인 통일 (1시간)

  • .gitea/workflows/_common/build-artifact.yml 생성
  • build.yml → _common/build-artifact.yml 참조로 변경
  • deploy-prod.yml → _common/build-artifact.yml 참조로 변경
  • 아티팩트 S3/Gitea Release storage로 중앙화

2단계: Validator 최적화 (2시간)

  • ci.yml의 30+ validator를 3개 그룹으로 분류
    • Group A: Tier 1 (빠른 gates)
    • Group B: Tier 2 (중요 gates)
    • Group C: Tier 3 (정보성)
  • 각 그룹을 병렬 job으로 분리
  • Validator 실패 시 continue-on-error: true 설정

3단계: Workflow 통합 (2시간)

  • pr-validation.yml 생성 (Tier 1 only)
  • merge-to-main.yml 생성 (Tier 1+2+3)
  • deploy-production.yml 정리 (Tier 2+3+Deploy)
  • 각 workflow의 outputs 명확히 (success/failure/artifact)

4단계: 모니터링 & 알림 (1시간)

  • .gitea/workflows/_common/notify.yml 생성
  • 각 stage 완료 후 알림
  • 실패 시 상세 로그 링크 포함

5단계: 문서화 & 테스트 (1시간)

  • README.md 업데이트 (workflow 흐름)
  • 로컬에서 workflow 검증 가능한 스크립트
  • CI/CD 트러블슈팅 가이드

🚀 기대 효과

지표 현재 개선 후 개선율
빌드 시간 3-4분 1-2분 -60%
전체 workflow 시간 10-15분 15-20분 (더 안정적) +정확성
실패율 90% <10% -80%
평균 실패 원인 파악 시간 30분 5분 -83%
PR 피드백 시간 5분 (전체 CI 완료 후) 2분 (Tier 1만) -60%

📋 최종 체크리스트

  • 새 DB password 설정 (QUANTENGINE_DB_PASSWORD secret)
  • GitHub Release action → Gitea-compatible 버전으로 변경
  • Build artifact 저장소 선정 (S3 / Gitea Releases / 로컬)
  • Validator 병렬화 방안 검토
  • Notification 채널 구성 (Slack/Telegram/Gitea comment)

참고: 기존 대비 개선 원칙

원칙 현재 상태 개선 방향
Single Build 중복 빌드 (build.yml + deploy-prod.yml) 공유 아티팩트
Clear Deps 의존성 없음 (병렬 실행) 순차 & 조건부
Fast Feedback 15분 대기 2분 내 피드백
Fail Fast 30 validators 순차 Validator 병렬
Observability 로그 분산 단계별 명확한 출력
Secret Security ⚠️ 환경변수만 Gitea secret + fail-fast