GitOps๋กœ ๊ณ„์•ฝ ๋ฐฐํฌ + Airflow ๋ฒ„์ „ํ™”/Latest ์ €์žฅ + Feast ์กฐํšŒ๊นŒ์ง€ E2E ์ฆ๋ช…


๐Ÿงญ ๋ชฉ์ฐจ

๊ตฌ๋ถ„์ฆ๋ช… ํฌ์ธํŠธ
A. GitOps ๋ถ„๋ฆฌdevยทprod ๋…๋ฆฝ ๋ฐฐํฌ + ์ƒํƒœ ๊ณ ์ •(Synced/Healthy)
B. Contract ๊ณ ์ •๊ณ„์•ฝ(schema / repo)์„ ์šด์˜ ๋ฆฌ์†Œ์Šค๋กœ ๋ฐฐํฌยท๋งˆ์šดํŠธ
C. ํŒŒ์ดํ”„๋ผ์ธAirflow DAG E2E ์„ฑ๊ณต
D. ์ €์žฅ ์ •์ฑ…S3 version 1๋‹จ + latest ๋™์‹œ ์œ ์ง€
E. ์žฌํ˜„์„ฑschema_hashยทmetadata๋กœ ์ƒ์„ฑ ์กฐ๊ฑด ๊ธฐ๋ก
F. Feast ๊ฒ€์ฆs3fs โ†’ materialize โ†’ online ์กฐํšŒ ์„ฑ๊ณต

์ด ๊ธ€์€ ์„ค๋ช…์ด ์•„๋‹ˆ๋ผ ์ฆ๊ฑฐ(Proof)๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค.

๊ฐ ์„น์…˜์€

์บก์ฒ˜ โ†’ ํ™•์ธ ํฌ์ธํŠธ โ†’ ๊ฒฐ๋ก  ๊ตฌ์กฐ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ,

๋…์ž๊ฐ€ ์บก์ฒ˜๋งŒ ๋ด๋„ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.


A. GitOps & Dev/Prod ๋ถ„๋ฆฌ

A-1) ArgoCD Applications ์ƒํƒœ ์ฆ๋ช…

proof-fs-01-argocd-applications.png

๐Ÿ“ธ proof-fs-01-argocd-applications.png

  • ArgoCD Applications ํ™”๋ฉด์—์„œ

    feature-store-dev, feature-store-prod

    (๋ฐ Feast ๊ด€๋ จ Application) ํ™•์ธ

  • Status: Synced / Healthy

ํ™•์ธ ํฌ์ธํŠธ

  • dev/prod๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ Application์œผ๋กœ ์กด์žฌ
  • Git ๋ณ€๊ฒฝ์ด ์—†์„ ๋•Œ idempotent ์ƒํƒœ ์œ ์ง€
  • namespace ๊ธฐ์ค€์œผ๋กœ ์šด์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ช…ํ™•

๐Ÿ‘‰ ๊ฒฐ๋ก 

Feature Store ๊ตฌ์„ฑ์€ GitOps ๊ธฐ์ค€์œผ๋กœ dev/prod๊ฐ€ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฉฐ,

์˜๋„ํ•˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์—†์ด Synced/Healthy ์ƒํƒœ๊ฐ€ ์œ ์ง€๋จ์ด ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.


B. Contract(๊ณ„์•ฝ) ์šด์˜ ๋ฆฌ์†Œ์Šคํ™” & ๋งˆ์šดํŠธ ๊ฒ€์ฆ

B-1) Feature Schema / Metadata ๊ณ„์•ฝ ๋ฐฐํฌ ์ฆ๋ช…

proof-fs-02-01-configmap-schema.png

๐Ÿ“ธ proof-fs-02-01-configmap-schema.png

  • ConfigMap: feature-store-resources
  • ํฌํ•จ ํŒŒ์ผ:
    • user_features.schema.json
    • metadata.json.j2

ํ™•์ธ ํฌ์ธํŠธ

  • ๊ณ„์•ฝ์ด ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ **์šด์˜ ๋ฆฌ์†Œ์Šค(ConfigMap)**๋กœ ๋ฐฐํฌ๋จ
  • dev/prod์— ๋™์ผํ•œ ๊ณ„์•ฝ์ด ์ ์šฉ๋จ

๐Ÿ‘‰ ๊ฒฐ๋ก 

Feature ๊ณ„์•ฝ์€ GitOps๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ,

ํŒŒ์ดํ”„๋ผ์ธ ์ฝ”๋“œ๋Š” ๊ณ„์•ฝ์„ ์ฝ๊ธฐ๋งŒ ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค.


B-2) Airflow Pod ๊ณ„์•ฝ ๋งˆ์šดํŠธ ์ฆ๋ช…

proof-fs-02-02-airflow-mount.png

๐Ÿ“ธ proof-fs-02-02-airflow-mount.png

  • Airflow Pod ๋‚ด๋ถ€์—์„œ ํŒŒ์ผ ํ™•์ธ:
    • /opt/airflow/feature-store/user_features.schema.json
    • /opt/airflow/feature-store/metadata.json.j2

ํ™•์ธ ํฌ์ธํŠธ

  • mountPath๊ฐ€ ํ‘œ์ค€ํ™”๋˜์–ด ์žˆ์Œ
  • dev/prod ์‹คํ–‰ ํ™˜๊ฒฝ์ด ๋™์ผํ•˜๊ฒŒ ์žฌํ˜„ ๊ฐ€๋Šฅ

๐Ÿ‘‰ ๊ฒฐ๋ก 

Airflow๋Š” GitOps๋กœ ๋ฐฐํฌ๋œ ๊ณ„์•ฝ์„

๋™์ผํ•œ ๊ฒฝ๋กœ๋กœ ๋งˆ์šดํŠธ๋ฐ›์•„ ์‹คํ–‰ ์กฐ๊ฑด์ด ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค.


B-3) Feast Repo ๊ณ„์•ฝ(subPath) ๋งˆ์šดํŠธ ์ฆ๋ช…

proof-fs-02-03-feast-subpath.png

๐Ÿ“ธ proof-fs-02-03-feast-subpath.png

  • ConfigMap: feast-repo
  • subPath๋กœ ํŒŒ์ผ ๋‹จ์œ„ ๋งˆ์šดํŠธ:
    • /feast-repo/feature_store.yaml
    • /feast-repo/repo.py

ํ™•์ธ ํฌ์ธํŠธ

  • ConfigMap ์ „์ฒด mount ์‹œ ๋ฐœ์ƒํ•˜๋Š” ํŒŒ์ผ ๊ตฌ์กฐ ์ด์Šˆ ์ฐจ๋‹จ
  • Feast repo ์ž์ฒด๊ฐ€ ์šด์˜ ๊ณ„์•ฝ์œผ๋กœ ์•ˆ์ •์ ์œผ๋กœ ๊ณ ์ •

๐Ÿ‘‰ ๊ฒฐ๋ก 

Feast ๊ณ„์•ฝ(repo)์€ GitOps + subPath ๋งˆ์šดํŠธ ๋ฐฉ์‹์œผ๋กœ

์šด์˜ ์ค‘ ๋ณ€ํ˜•๋˜์ง€ ์•Š๋Š” ํ˜•ํƒœ๋กœ ํ‘œ์ค€ํ™”๋ฉ๋‹ˆ๋‹ค.


C. Airflow ํŒŒ์ดํ”„๋ผ์ธ E2E ๊ฒ€์ฆ

C-1) DAG Graph View ์„ฑ๊ณต ์ฆ๋ช…

proof-fs-03-01-airflow-dag-graph.png

๐Ÿ“ธ proof-fs-03-01-airflow-dag-graph.png

  • DAG: data_pipeline_daily_dev_v4 (๋˜๋Š” v5)

  • Task ํ๋ฆ„:

    extract_raw_data โ†’ validate_data โ†’ build_features โ†’ store_features โ†’ summarize_run

ํ™•์ธ ํฌ์ธํŠธ

  • DAG๋Š” ์—ฐ๊ฒฐ๋งŒ ๋‹ด๋‹น
  • ์‹ค์ œ ๋กœ์ง์€ mlops_lib/dp/*๋กœ ๋ถ„๋ฆฌ
  • ๋งˆ์ง€๋ง‰ task์—์„œ prefix / version / uri๊ฐ€ ๋‚จ์Œ

๐Ÿ‘‰ ๊ฒฐ๋ก 

๊ณ„์•ฝ ๊ธฐ๋ฐ˜ Feature Store ํŒŒ์ดํ”„๋ผ์ธ์ด E2E๋กœ ์‹คํ–‰๋˜์–ด ์‚ฐ์ถœ๋ฌผ์ด ์ €์žฅ๋จ์ด ์ฆ๋ช…๋ฉ๋‹ˆ๋‹ค.

DAG๋Š” ํ๋ฆ„๋งŒ ์ •์˜ํ•˜๋ฉฐ, Feature ์ƒ์„ฑ ๋กœ์ง์€ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์žฌ์‚ฌ์šฉยทํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ถ„๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


D. S3 ์ €์žฅ ์ •์ฑ… ์ฆ๋ช… (Version + Latest)

D-1) Version prefix ์ƒ์„ฑ ์ฆ๋ช…

proof-fs-04-01-s3-version-prefix.png

๐Ÿ“ธ proof-fs-04-01-s3-version-prefix.png

  • ์ƒ์„ฑ ๊ทœ์น™:
    • s3://<feature_base>/<feature_set>/v_YYYYMMDDTHHMMSS/
  • ๋™์ผ prefix์—:
    • features.csv
    • schema.json
    • metadata.json

๐Ÿ‘‰ ๊ฒฐ๋ก 

๋ฒ„์ „์€ depth๊ฐ€ ์•„๋‹ˆ๋ผ **์šด์˜ ํ‘œ์ค€(1๋‹จ)**์œผ๋กœ ๊ณ ์ •๋˜์–ด

์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.


D-2) Version + Latest ๋™์‹œ ์œ ์ง€ ์ฆ๋ช…

proof-fs-04-02-s3-version-latest.png

๐Ÿ“ธ proof-fs-04-02-s3-version-latest.png

  • version ์œ ์ง€:
    • .../<feature_set>/v_YYYY.../
  • latest overwrite:
    • .../<feature_set>/latest/
  • ๋™์ผ ๊ตฌ์กฐ๋กœ:
    • features.parquet
    • features.csv
    • schema.json
    • metadata.json

๐Ÿ‘‰ ๊ฒฐ๋ก 

์žฌํ˜„์„ฑ(version)๊ณผ ์šด์˜ ํŽธ์˜(latest)๊ฐ€ ๋™์‹œ์— ์ถฉ์กฑ๋˜์–ด,

ํ•˜์œ„ ์‹œ์Šคํ…œ์€ latest ๊ธฐ์ค€์œผ๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


E. ์žฌํ˜„์„ฑ(Operational Reproducibility) ์ฆ๋ช…

E-1) metadata.json ๊ธฐ๋ก ์ฆ๋ช…

proof-fs-05-01-metadata-json.png

๐Ÿ“ธ proof-fs-05-01-metadata-json.png

  • metadata.json ํ•„๋“œ:
    • schema_hash
    • generated_at
    • feature_uri
    • source
    • pipeline

๐Ÿ‘‰ ๊ฒฐ๋ก 

โ€œ์˜ค๋Š˜ ๋งŒ๋“  feature.csvโ€๊ฐ€ ์•„๋‹ˆ๋ผ,

์–ธ์ œ / ๋ฌด์Šจ ๊ณ„์•ฝ์œผ๋กœ / ์–ด๋–ค ์†Œ์Šค์—์„œ ์ƒ์„ฑ๋๋Š”์ง€๊ฐ€

์‹œ์Šคํ…œ์ด ํ•ด์„ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.


F. Feast ์šด์˜ ๊ฒ€์ฆ

F-1) s3fs ํฌํ•จ ์ด๋ฏธ์ง€ ์ฆ๋ช…

proof-fs-06-01-feast-s3fs-version.png

๐Ÿ“ธ proof-fs-06-01-feast-s3fs-version.png

  • Feast ์„œ๋ฒ„์—์„œ s3fs version: 2026.1.0 ์ถœ๋ ฅ

๐Ÿ‘‰ ๊ฒฐ๋ก 

Feast ์„œ๋ฒ„๋Š”

S3 parquet ์ ‘๊ทผ์„ ์œ„ํ•œ ํ•„์ˆ˜ ์˜์กด์„ฑ์„ ํฌํ•จํ•œ ์ƒํƒœ๋กœ ์šด์˜๋ฉ๋‹ˆ๋‹ค.


F-2) materialize ์„ฑ๊ณต ์ฆ๋ช…

proof-fs-06-02-feast-materialize.png

๐Ÿ“ธ proof-fs-06-02-feast-materialize.png

  • ๋กœ๊ทธ:
    • Materializing 1 feature views
    • into the redis online store

๐Ÿ‘‰ ๊ฒฐ๋ก 

Offline(S3 parquet) โ†’ Online(Redis) ์ ์žฌ๊ฐ€

์‹ค์ œ๋กœ ๋™์ž‘ํ•จ์ด ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.


F-3) online(redis) ์กฐํšŒ ์„ฑ๊ณต ์ฆ๋ช…

proof-fs-06-03-feast-online-query.png

๐Ÿ“ธ proof-fs-06-03-feast-online-query.png

๐Ÿ‘‰ ๊ฒฐ๋ก 

Feature Store๋Š” โ€œ์ €์žฅโ€์—์„œ ๋๋‚˜์ง€ ์•Š๊ณ ,

ํ•™์Šตยท์„œ๋น™์—์„œ ๋™์ผํ•œ Feature ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์กฐํšŒ ๊ฐ€๋Šฅํ•œ ํ”ผ์ฒ˜ ํ”Œ๋žซํผ์œผ๋กœ ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ ์ •๋ฆฌ

  • GitOps๋กœ dev/prod๊ฐ€ ๋ถ„๋ฆฌ ๋ฐฐํฌ๋˜๊ณ 
  • Feature ๊ณ„์•ฝ์ด ์šด์˜ ๋ฆฌ์†Œ์Šค๋กœ ๊ณ ์ •๋˜์–ด ํŒŒ์ดํ”„๋ผ์ธ์€ ์ฝ๊ธฐ๋งŒ ํ•˜๋ฉฐ
  • Airflow ํŒŒ์ดํ”„๋ผ์ธ์€ E2E๋กœ ์‹คํ–‰๋˜์–ด S3์— ๋ฒ„์ „ํ™” ์‚ฐ์ถœ๋ฌผ์ด ์ €์žฅ๋˜๊ณ 
  • Version + Latest ์ •์ฑ…์œผ๋กœ ์†Œ๋น„ ๊ณ„์ธต์ด ๋‹จ์ˆœํ™”๋˜๋ฉฐ
  • Feast๋ฅผ ํ†ตํ•ด offline/online ์กฐํšŒ๊ฐ€ ์‹ค์ œ๋กœ ๋™์ž‘ํ•จ์ด ์ฆ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒ€์ฆ์„ ํ†ตํ•ด Feature Store ์‹œ๋ฆฌ์ฆˆ๋Š”

์„ค๊ณ„ ์„ค๋ช…์ด ์•„๋‹Œ, ์šด์˜ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ์ฆ๋ช…๋œ ๊ตฌํ˜„์œผ๋กœ ์™„๊ฒฐ๋ฉ๋‹ˆ๋‹ค.