[Airflow - 7๋‹จ๊ณ„: DAG CI ๊ตฌ์ถ•: test_dag_integrity.py + GitHub Actions]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ DagBag ๊ธฐ๋ฐ˜ test_dag_integrity.py๋กœ DAG ํŒŒ์‹ฑ ์˜ค๋ฅ˜ยทํ•ต์‹ฌ task ์กด์žฌยท์šด์˜ ์„ค์ •์„ ๋ฐฐํฌ ์ „์— ์ž๋™ ๊ฒ€์ฆํ•˜๊ณ , GitHub Actions๋กœ push ์‹œ์ ์— CI๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ Airflow 6๋‹จ๊ณ„: KubernetesExecutor ์„ ํƒ ์ด์œ  โ€” CeleryExecutor ๋Œ€๋น„ ์žฅ๋‹จ์  ๋ถ„์„ ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ DAG ํŒŒ์ผ์— ์˜คํƒ€๊ฐ€ ํ•˜๋‚˜ ๋“ค์–ด๊ฐ€๋ฉด Airflow Scheduler๊ฐ€ ํŒŒ์‹ฑ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ํ•ด๋‹น DAG์„ ๋น„ํ™œ์„ฑํ™”ํ•œ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ๊ฒƒ์€ ๋ฐฐํฌ ํ›„ ์ˆ˜์‹ญ ๋ถ„์ด ์ง€๋‚œ ์‹œ์ ์ด๋‹ค. ์ด ๋น„์šฉ์„ push ์‹œ์ ์œผ๋กœ ์•ž๋‹น๊ฒจ์„œ ํŒŒ์‹ฑ ์˜ค๋ฅ˜๋ฅผ ์šด์˜ ์ „์— ์žก๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ ๋‹ค. ...

March 13, 2026 ยท 4 min

[GitOps ๊ธฐ๋ฐ˜ E2E ML Platform - ์šด์˜ ๋ฌธ์„œํ™”]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ Runbook / Security / Proof / Audit ์šด์˜ ๋ฌธ์„œ ๊ตฌ์กฐ์™€ Proof ํŒŒ์ผ ์ƒ์„ฑ ๋ฐฉ์‹ ์„ ์ˆ˜์ง€์‹ GitOps ๊ธฐ๋ฐ˜ E2E ML Platform - ์šด์˜ ์ œ์–ด ๊ตฌ์กฐ ์šด์˜ ๋ฌธ์„œํ™” Runbook / Security / Proof ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ๋‚จ๊ธด ์ด์œ  ๋“ค์–ด๊ฐ€๋ฉฐ ๋งŽ์€ ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ž‘์„ฑ README ์ž‘์„ฑ ํ•˜์ง€๋งŒ ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹ค์Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์žฅ์•  ๋ฐœ์ƒ ์šด์˜์ž๊ฐ€ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฆ„ ๋ณต๊ตฌ ์ ˆ์ฐจ ๋ฌธ์„œ ์—†์Œ ๋ณด์•ˆ ์ •์ฑ… ์œ„์น˜ ๋ถˆ๋ช…ํ™• ์ด ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์ด ์•„๋ฌด๋ฆฌ ์ž˜ ๋งŒ๋“ค์–ด์ ธ ์žˆ์–ด๋„ ...

March 6, 2026 ยท 3 min

[MLOps ์šด์˜ ๊ณ ๋„ํ™” - ๊ฒ€์ฆ (Proof of Automation)]

๐Ÿง  Proof of Automation โ€” ์ž‘๋™ ๊ฒ€์ฆ ๋ฃจํ”„ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์œผ๋กœ CI โ†’ CD โ†’ ํ•™์Šต/๋“ฑ๋ก โ†’ READY โ†’ ํ•ซ์Šค์™‘ โ†’ ์‹คํ—˜ โ†’ ๊ด€์ œ๊นŒ์ง€ ์ž๋™ํ™”๋˜์—ˆ์Œ์„ ์‹œ๊ฐ์ ์œผ๋กœ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿงญ ๋ชฉ์ฐจ # ์„น์…˜ 0 ์ค€๋น„ (CI/CDยทGitOpsยทSecrets ๊ธฐ๋ณธ ์„ธํŒ…) 1 CI ์‹คํ–‰ (GitHub Actions) 2 ArgoCD ์ž๋™ ๋™๊ธฐํ™” 3 Airflow ํ•™์Šตโ†’๋“ฑ๋กโ†’READY (FAIL/SUCCESS + Slack) 4 MLflow ๋ชจ๋ธ ๋“ฑ๋กยท๋ณ„์นญยท์•„ํ‹ฐํŒฉํŠธ 5 FastAPI ํ•ซ์Šค์™‘ (/reload) 6 ์ˆ˜๋™ ๋กค๋ฐฑ (์šด์˜ ๋ณต๊ตฌ ๊ฐ€๋“œ๋ ˆ์ผ) 7 ๋กœ๊ทธ ๊ณ„์ธต (Airflow=S3 / FastAPI=NFS) 8 ArgoCDโ†”Slack ์šด์˜ ๊ด€์ œ 9 ๋ณด์•ˆ ์ž๋™ํ™” (AWS Rotation + SealedSecrets Re-seal) 10 ํŠธ๋ž˜ํ”ฝ ์‹คํ—˜ (A/B ยท Canary ยท Blue-Green) 11 One-Commit Flow ์ „์ฒด ์ฒด์ธ ๊ฒ€์ฆ 0) ๐Ÿงฐ ์ค€๋น„ (GitOps) charts/fastapi/values/{dev,prod}.yaml์—์„œ ALIAS_SELECTION_MODE/DEFAULT_ALIAS/CANARY_PERCENT ๊ฐ’์„ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„๋กœ ์ˆ˜์ • โ†’ git commit โ†’ git push (ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ) /ops/ab_test.sh ์ €์žฅ (์•„๋ž˜ ์ œ๊ณต) 1) ๐Ÿงช CI ์ง„์ž… (GitHub Actions) ...

October 15, 2025 ยท 14 min

[MLOps ์šด์˜ ๊ณ ๋„ํ™” - ์—ํ•„๋กœ๊ทธ]

์—ํ•„๋กœ๊ทธ โ€” โ€œํ•œ ๋ฒˆ์˜ ์ปค๋ฐ‹์œผ๋กœ ๋๊นŒ์ง€ ๊ฐ€๋Š” ์ž์œจํ˜• MLOps ํ”Œ๋žซํผโ€ ๐Ÿ“Œ ์ „์ฒด ๊ฒฝ๋กœ ์š”์•ฝ ์ˆœ์„œ ์ฃผ์ œ 0 ๐Ÿ”— FastAPI A/BยทCanaryยทBlue-Green ์„œ๋น™ ๋ฒ ์ด์Šค 1 ๐Ÿ”— ํ•ซ์Šค์™‘ ๊ณ ๋„ํ™” (/reload ๋ณด์•ˆยทDAG ์ž๋™ํ™”) 2 ๐Ÿ”— Slack Alert ํ†ตํ•ฉ (FastAPIยทAirflow ๊ณต์šฉ) 3 ๐Ÿ”— ๋ชจ๋ธ ๋กค๋ฐฑ ์ž๋™ํ™” (๋“ฑ๋ก ์‹คํŒจ ๋Œ€๋น„ ๋ณต๊ตฌ) 4 ๐Ÿ”— FastAPI ๋กœ๊ทธ ์•ˆ์ •ํ™” (NFS + PV/PVC + Loguru) 5 ๐Ÿ”— Airflow ์•ˆ์ •ํ™” & FastAPI HTTPS ๋ณด์•ˆ 6 ๐Ÿ”— GitOps ๊ณ ๋„ํ™” (Argo CDยทMetalLBยทApplicationSet) 7 ๐Ÿ”— Argo CD Notifications ์ž๋™ํ™” (Slack ์—ฐ๋™) 8 ๐Ÿ”— CI/CD ์šด์˜ ์ž๋™ํ™” (GitHub ActionsยทHelm Lint) 9 ๐Ÿ”— ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ & ํ‚ค ํšŒ์ „ ์ž๋™ํ™” (AWSยทSealedSecret) 10 ๐Ÿ”— ๊ฒ€์ฆ (Proof of Automation) ๐ŸŽฏ ์ „์ฒด ํšŒ๊ณ  ์š”์•ฝ (0~9๋‹จ๊ณ„) ๋‹จ๊ณ„ ํ•ต์‹ฌ ๋ชฉํ‘œ ์ฃผ์š” ๊ฐœ์„ ์  0 FastAPI ๋ฆฌ๋‰ด์–ผ /predictยท/variantยท/reload๋กœ A/BยทCanaryยทBlue-Green ๊ณต์šฉ ๋ผ์šฐํŒ… 1 ํ•ซ์Šค์™‘ ๋ณด์•ˆ/์ž๋™ํ™” ํ† ํฐ ์ธ์ฆ /reload + Ingress ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ/TLS 2 Slack Alert ํ†ตํ•ฉ FastAPIยทAirflow ๊ณต์šฉ ์•Œ๋ฆผ ํ•จ์ˆ˜ + ์‹คํŒจ ์ฝœ๋ฐฑ Slack ์—ฐ๋™ 3 ๋กค๋ฐฑ ์ž๋™ํ™” ๋“ฑ๋ก ์‹คํŒจ ์‹œ ์ด์ „ ๋ฒ„์ „ ๋กค๋ฐฑ + READY ํ›„ ์ž๋™ /reload 4 ๋กœ๊ทธ ์•ˆ์ •ํ™” FastAPI=NFS, Airflow=S3 ๋กœ๊ทธ ๊ณ„์ธต ๋ถ„๋ฆฌยทํ‘œ์ค€ํ™” 5 Airflow ์•ˆ์ •ํ™”ยทHTTPS Sensor/์˜์กด์„ฑ ์ •๋ฆฌ + cert-manager ๊ธฐ๋ฐ˜ TLS 6 GitOps ์ „ํ™˜ MetalLB + SealedSecret + ApplicationSet ๋ฐฐํฌ ๊ตฌ์กฐ 7 GitOps ๋ชจ๋‹ˆํ„ฐ๋ง ArgoCD โ†’ Slack Sync/Health ์ƒํƒœ ์•Œ๋ฆผ 8 CI/CD ๊ณ ๋„ํ™” Helm Lint + kubeconform + yamllint PR/๋จธ์ง€ ํŒŒ์ดํ”„๋ผ์ธ 9 SecretOps ํ‘œ์ค€ํ™” AWS Key Rotation + SealedSecret Re-seal ์ž๋™ํ™” ๐Ÿ”„ ํ•ต์‹ฌ ...

October 3, 2025 ยท 3 min

[MLOps ์šด์˜ ๊ณ ๋„ํ™” - 9๋‹จ๊ณ„: ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ & ํ‚ค ํšŒ์ „ ์ž๋™ํ™” (AWSยทSealedSecret)]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ AWS IAM ํ‚ค ํšŒ์ „๊ณผ SealedSecret ์žฌ์•”ํ˜ธํ™”๋ฅผ ์Šคํฌ๋ฆฝํŠธ๋กœ ํ‘œ์ค€ํ™”ํ•˜๊ณ , GitOps ์ž๋™ ๋ฐ˜์˜๊นŒ์ง€ ์ด์–ด์ง€๋Š” ๋ฐ˜์ž๋™ SecretOps ์ฒด๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ MLOps ์šด์˜ ๊ณ ๋„ํ™” 8๋‹จ๊ณ„: CI/CD ์šด์˜ ์ž๋™ํ™” โ€” GitHub Actions + Helm Lint ํŒŒ์ดํ”„๋ผ์ธ ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ MLOps์—์„œ๋Š” ๋ชจ๋ธ๋ณด๋‹ค ๋จผ์ € โ€˜๋น„๋ฐ€โ€™์ด ๋ฌด๋„ˆ์ง„๋‹ค. AWS ํ‚ค์ฒ˜๋Ÿผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ต์ฒดํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์€ ์ž๋™ํ™”๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, JWTยทSlack Webhook์ฒ˜๋Ÿผ ๊ต์ฒด ์‹œ ์˜ํ–ฅ์ด ํฐ ๊ฐ’์€ ์šด์˜์ž๊ฐ€ ์ง์ ‘ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ž๋™ํ™”ํ•  ๊ฒƒ๊ณผ ์‚ฌ๋žŒ์ด ํ™•์ธํ•ด์•ผ ํ•  ๊ฒƒ์„ ๊ตฌ๋ถ„ํ•œ SecretOps ์ฒด๊ณ„๋ฅผ ํ™•๋ฆฝํ•œ๋‹ค. ...

September 25, 2025 ยท 3 min

[MLOps ์šด์˜ ๊ณ ๋„ํ™” - 8๋‹จ๊ณ„: CI/CD ์šด์˜ ์ž๋™ํ™” (GitHub ActionsยทHelm Lint)]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ GitHub Actions๋กœ Helm lint + kubeconform + yamllint ์ •์  ๊ฒ€์ฆ์„ ์ž๋™ํ™”ํ•˜๊ณ , ArgoCD GitOps ๋ฐฐํฌ + FastAPI alias ๊ธฐ๋ฐ˜ ํŠธ๋ž˜ํ”ฝ ์‹คํ—˜๊นŒ์ง€ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์œผ๋กœ ์ด์–ด์ง€๋Š” CI/CD ์šด์˜ ์ž๋™ํ™” ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ MLOps ์šด์˜ ๊ณ ๋„ํ™” 6๋‹จ๊ณ„: GitOps ๊ณ ๋„ํ™” โ€” ArgoCD ๋™๊ธฐํ™” ์ „๋žต ์ •๊ตํ™” ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ๊ณ ๋Š” ๋Œ€๋ถ€๋ถ„ ๋ฐฐํฌ ์ „์— ์ฒดํฌ๋˜์ง€ ๋ชปํ•œ ๋ฌธ์ œ, ์ˆ˜๋™ ๋ฐฐํฌ์˜ ์‹ค์ˆ˜, ๋ฐฐํฌ ํ›„ ๊ฒ€์ฆ ๋ถ€์žฌ์—์„œ ์‹œ์ž‘๋œ๋‹ค. CI ๋‹จ๊ณ„์—์„œ ๋ฌธ์ œ๋ฅผ ๋ง‰๊ณ , CD์—์„œ๋Š” GitOps๊ฐ€ ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ๋ณด์žฅํ•˜๋ฉฐ, ๋ฐฐํฌ ์งํ›„ FastAPI alias๋กœ ๋ชจ๋ธ ํŠธ๋ž˜ํ”ฝ๊นŒ์ง€ ์ž๋™ ๊ฒ€์ฆ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ ๋‹ค. ...

September 15, 2025 ยท 4 min