[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

[MLOps ์šด์˜ ๊ณ ๋„ํ™” - 7๋‹จ๊ณ„: Argo CD Notifications ์ž๋™ํ™” (Slack ์—ฐ๋™)]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ Argo CD Notifications Controller๋กœ Sync/Health ์ด๋ฒคํŠธ๋ฅผ Slack์— ์‹ค์‹œ๊ฐ„ ์ „์†กํ•˜๊ณ , Webhook URL์„ SealedSecret์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” GitOps ๋ชจ๋‹ˆํ„ฐ๋ง ์ž๋™ํ™” ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ MLOps ์šด์˜ ๊ณ ๋„ํ™” 4๋‹จ๊ณ„: FastAPI ๋กœ๊ทธ ์•ˆ์ •ํ™” โ€” NFS PVC ๊ธฐ๋ฐ˜ ๋กœ๊ทธ ์˜์†ํ™” ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ GitOps๋Š” ์ž๋™์œผ๋กœ ์ž˜ ๋Œ์•„๊ฐ€๋”๋ผ๋„, ์ง€๊ธˆ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ชจ๋ฅด๋ฉด ์šด์˜์ž๋Š” ํ•ญ์ƒ ๋ถˆ์•ˆํ•˜๋‹ค. Argo CD์˜ Sync/Health ๋ณ€ํ™”๋ฅผ ์ฆ‰์‹œ Slack์œผ๋กœ ๋ฐ›์•„๋ณด๋Š” GitOps ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฃจํ”„๋ฅผ ๋งŒ๋“ค์–ด์„œ, ์ปค๋ฐ‹ ์ดํ›„ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณด์ด๊ฒŒ ๋งŒ๋“ ๋‹ค. ...

September 5, 2025 ยท 3 min

[MLOps ์šด์˜ ๊ณ ๋„ํ™” - 6๋‹จ๊ณ„: GitOps ๊ณ ๋„ํ™” (Argo CDยทMetalLBยทApplicationSet)]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ ArgoCD ApplicationSet์œผ๋กœ dev/prod ํ™˜๊ฒฝ์„ ๋‹จ์ผ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , MetalLB๋กœ ์˜จํ”„๋ ˆ๋ฏธ์Šค LoadBalancer๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ, App-of-Apps ํŒจํ„ด์œผ๋กœ ์ „์ฒด ํ”Œ๋žซํผ์„ ์„ ์–ธ์ ์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๋Š” GitOps ๊ณ ๋„ํ™” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ MLOps ์šด์˜ ๊ณ ๋„ํ™” 5๋‹จ๊ณ„: Airflow ์•ˆ์ •ํ™” & FastAPI HTTPS โ€” TLS ๋ณด์•ˆ๊ณผ ์Šค์ผ€์ค„๋Ÿฌ ์•ˆ์ •ํ™” ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ ํ™˜๊ฒฝ(dev/prod)์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ArgoCD Application YAML์ด ์ค‘๋ณต๋˜๊ณ , ํ™˜๊ฒฝ ๊ฐ„ ์„ค์ • ๋“œ๋ฆฌํ”„ํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์˜จํ”„๋ ˆ๋ฏธ์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ํด๋ผ์šฐ๋“œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์—†์–ด ์™ธ๋ถ€ ์ ‘๊ทผ์ด ์–ด๋ ต๋‹ค. ๊ฐœ๋ณ„ Application์„ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ์ „์ฒด ํ”Œ๋žซํผ ์ƒํƒœ๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๋‹ค. ...

August 27, 2025 ยท 3 min

[MLOps ์šด์˜ ๊ณ ๋„ํ™” - 4๋‹จ๊ณ„: FastAPI ๋กœ๊ทธ ์•ˆ์ •ํ™” (NFS + PV/PVC + Loguru)]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ Pod ์žฌ์‹œ์ž‘ ์‹œ ๋กœ๊ทธ๊ฐ€ ์œ ์‹ค๋˜์ง€ ์•Š๋„๋ก NFS ๊ธฐ๋ฐ˜ PV/PVC๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , Loguru๋กœ ๊ตฌ์กฐํ™”๋œ ํŒŒ์ผ ๋กœ๊น…์„ ์ ์šฉํ•˜์—ฌ FastAPI ์„œ๋น™ ๋กœ๊ทธ๋ฅผ ์˜์†ํ™”ํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ MLOps ์šด์˜ ๊ณ ๋„ํ™” 3๋‹จ๊ณ„: ๋ชจ๋ธ ๋กค๋ฐฑ ์ž๋™ํ™” โ€” ์Šค๋ƒ…์ƒท ๊ธฐ๋ฐ˜ ์ž๋™ ๋กค๋ฐฑ ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ FastAPI Pod๊ฐ€ ์žฌ์‹œ์ž‘๋˜๊ฑฐ๋‚˜ ์Šค์ผ€์ผ ๋‹ค์šด๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์Œ“์ธ ๋กœ๊ทธ๊ฐ€ ๋ชจ๋‘ ์‚ฌ๋ผ์ง„๋‹ค. ํ•ซ์Šค์™‘ ์ด๋ ฅ, ์˜ˆ์ธก ์š”์ฒญ ๊ธฐ๋ก, ์—๋Ÿฌ ํŠธ๋ ˆ์ด์Šค๊ฐ€ ์œ ์‹ค๋˜๋ฉด ์žฅ์•  ์›์ธ์„ ์ถ”์ ํ•  ์ˆ˜ ์—†๋‹ค. Pod ๋ผ์ดํ”„์‚ฌ์ดํด๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ๋กœ๊ทธ๋ฅผ ๋ณด์กดํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ...

August 8, 2025 ยท 3 min

[MLOps ํ”Œ๋žซํผ ๊ตฌ์ถ• : Airflow-MLflow-FastAPI (Helm)]

๐Ÿงฉ ์‹ค์ „ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ธฐ๋ฐ˜ ๊ตฌ์„ฑ ๋ฐฐ๊ฒฝ ์ด ํ”„๋กœ์ ํŠธ๋Š” ๋‹จ์ˆœ ์‹ค์Šต์„ ๋„˜์–ด์„œ, ์‹ค์ œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ MLOps ์ธํ”„๋ผ ๊ตฌ์ถ•์„ ๋ชฉํ‘œ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ชจ๋ธ ์‹คํ—˜ ๊ฒฐ๊ณผ๊ฐ€ ๋’ค์„ž์—ฌ ์ถ”์ ์ด ์–ด๋ ค์šด ๋ฌธ์ œ โ†’ MLflow Tracking ์„œ๋ฒ„ + PostgreSQL ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๊ตฌ์„ฑ ๋ชจ๋ธ ํŒŒ์ผ ๋ฐ ๋กœ๊ทธ๊ฐ€ ๋กœ์ปฌ์—๋งŒ ์ €์žฅ๋˜์–ด ํ˜‘์—… ๋ฐ ์žฌํ˜„์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋ฌธ์ œ โ†’ S3 ๊ธฐ๋ฐ˜ artifact store ๊ตฌ์„ฑ + pyfunc ๊ธฐ๋ฐ˜ ๋ชจ๋ธ ์„œ๋น™ ๊ตฌ์กฐ ์„ค๊ณ„ ์ˆ˜์ž‘์—… DAG ๋“ฑ๋ก, ๋ชจ๋ธ ๋ฐฐํฌ ๋“ฑ์˜ ๋น„ํšจ์œจ์  ์šด์˜ ๋ฌธ์ œ โ†’ Airflow + GitSync ์—ฐ๋™์œผ๋กœ ํŒŒ์ดํ”„๋ผ์ธ ์ž๋™ํ™” ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ ...

July 15, 2025 ยท 3 min

[MLOps ํ”Œ๋žซํผ ๊ตฌ์ถ• - 6๋‹จ๊ณ„: ์‹ค์‹œ๊ฐ„ ๋ชจ๋ธ ํ•ซ์Šค์™‘ ๊ตฌ์กฐ ์‹คํ—˜]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ Airflow DAG์—์„œ ์กฐ๊ฑด๋ถ€ ๋ชจ๋ธ ๋“ฑ๋ก ํ›„ FastAPI ํ•ซ์Šค์™‘๊นŒ์ง€ E2E ์ž๋™ํ™” ํ๋ฆ„์„ ์‹คํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ MLOps ํ”Œ๋žซํผ ๊ตฌ์ถ• 5๋‹จ๊ณ„: FastAPI ์„œ๋น™ ๋ฐ ํ•ซ์Šค์™‘ ๊ตฌ์กฐ ๊ตฌ์ถ• โ€” FastAPI ๋ชจ๋ธ ๋กœ๋”ฉ๊ณผ /reload API ๊ตฌ์กฐ ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ(Airflow, MLflow, FastAPI)๋ฅผ ๊ฐ๊ฐ ๊ตฌ์„ฑํ–ˆ์ง€๋งŒ, ํ•™์Šต๋ถ€ํ„ฐ ์„œ๋น™๊นŒ์ง€์˜ ์ž๋™ํ™” ํ๋ฆ„์„ E2E๋กœ ๊ฒ€์ฆํ•ด์•ผ ์‹ค์ œ ์šด์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” Airflow DAG์—์„œ ๋ชจ๋ธ ํ•™์Šต โ†’ ์„ฑ๋Šฅ ๊ธฐ์ค€ ๋ถ„๊ธฐ โ†’ MLflow ๋“ฑ๋ก โ†’ FastAPI ํ•ซ์Šค์™‘๊นŒ์ง€ ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ—˜ํ•ฉ๋‹ˆ๋‹ค. ...

July 10, 2025 ยท 2 min

[MLOps ํ”Œ๋žซํผ ๊ตฌ์ถ• - 4๋‹จ๊ณ„: Airflow : GitSync + ์™ธ๋ถ€ PostgreSQL + Secret ์—ฐ๋™]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ Airflow๋ฅผ Helm์œผ๋กœ ๋ฐฐํฌํ•˜๋ฉด์„œ GitSync DAG ๋™๊ธฐํ™”, ์™ธ๋ถ€ PostgreSQL, AWS Secret ๋งˆ์šดํŠธ๋ฅผ ์—ฐ๋™ํ•ฉ๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ MLOps ํ”Œ๋žซํผ ๊ตฌ์ถ• 3๋‹จ๊ณ„: MLflow Helm ๊ตฌ์„ฑ โ€” Helm ๊ธฐ๋ฐ˜ ๋ฐฐํฌ์™€ Secret ์ฃผ์ž… ํŒจํ„ด ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ DAG ์ฝ”๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋กœ๋“œํ•˜๋ฉด ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ ํ˜‘์—…์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Git ๊ธฐ๋ฐ˜ DAG ๊ด€๋ฆฌ(GitSync)๋ฅผ ๋„์ž…ํ•˜๊ณ , SSH Key/AWS ์ธ์ฆ์„ Secret์œผ๋กœ ์ฃผ์ž…ํ•˜๋ฉฐ, ์™ธ๋ถ€ PostgreSQL์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ ์—ฐ๋™ํ•˜๋Š” GitOps ํŒจํ„ด์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ๋„ ๐Ÿณ ์ปค์Šคํ…€ Airflow ์ด๋ฏธ์ง€ ๊ตฌ์„ฑ GitSync DAG์—์„œ MLflow ์—ฐ๋™ ๋˜๋Š” AWS SDK ์‚ฌ์šฉ์„ ์œ„ํ•œ Python ํŒจํ‚ค์ง€ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ...

July 3, 2025 ยท 3 min