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
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
- ConfigMap:
feature-store-resources - ํฌํจ ํ์ผ:
user_features.schema.jsonmetadata.json.j2
ํ์ธ ํฌ์ธํธ
- ๊ณ์ฝ์ด ์ฝ๋๊ฐ ์๋๋ผ **์ด์ ๋ฆฌ์์ค(ConfigMap)**๋ก ๋ฐฐํฌ๋จ
- dev/prod์ ๋์ผํ ๊ณ์ฝ์ด ์ ์ฉ๋จ
๐ ๊ฒฐ๋ก
Feature ๊ณ์ฝ์ GitOps๋ก ๊ด๋ฆฌ๋๋ฉฐ,
ํ์ดํ๋ผ์ธ ์ฝ๋๋ ๊ณ์ฝ์ ์ฝ๊ธฐ๋ง ํ๋ ๊ตฌ์กฐ๋ก ๊ณ ์ ๋ฉ๋๋ค.
B-2) Airflow Pod ๊ณ์ฝ ๋ง์ดํธ ์ฆ๋ช

๐ธ 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
- 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
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
- ์์ฑ ๊ท์น:
s3://<feature_base>/<feature_set>/v_YYYYMMDDTHHMMSS/
- ๋์ผ prefix์:
features.csvschema.jsonmetadata.json
๐ ๊ฒฐ๋ก
๋ฒ์ ์ depth๊ฐ ์๋๋ผ **์ด์ ํ์ค(1๋จ)**์ผ๋ก ๊ณ ์ ๋์ด
์ฌํ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
D-2) Version + Latest ๋์ ์ ์ง ์ฆ๋ช

๐ธ proof-fs-04-02-s3-version-latest.png
- version ์ ์ง:
.../<feature_set>/v_YYYY.../
- latest overwrite:
.../<feature_set>/latest/
- ๋์ผ ๊ตฌ์กฐ๋ก:
features.parquetfeatures.csvschema.jsonmetadata.json
๐ ๊ฒฐ๋ก
์ฌํ์ฑ(version)๊ณผ ์ด์ ํธ์(latest)๊ฐ ๋์์ ์ถฉ์กฑ๋์ด,
ํ์ ์์คํ ์ latest ๊ธฐ์ค์ผ๋ก ๋จ์ํ๊ฒ ์๋นํ ์ ์์ต๋๋ค.
E. ์ฌํ์ฑ(Operational Reproducibility) ์ฆ๋ช
E-1) metadata.json ๊ธฐ๋ก ์ฆ๋ช

๐ธ proof-fs-05-01-metadata-json.png
metadata.jsonํ๋:schema_hashgenerated_atfeature_urisourcepipeline
๐ ๊ฒฐ๋ก
โ์ค๋ ๋ง๋ feature.csvโ๊ฐ ์๋๋ผ,
์ธ์ / ๋ฌด์จ ๊ณ์ฝ์ผ๋ก / ์ด๋ค ์์ค์์ ์์ฑ๋๋์ง๊ฐ
์์คํ ์ด ํด์ ๊ฐ๋ฅํ ํํ๋ก ๋จ์ต๋๋ค.
F. Feast ์ด์ ๊ฒ์ฆ
F-1) s3fs ํฌํจ ์ด๋ฏธ์ง ์ฆ๋ช

๐ธ 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
- ๋ก๊ทธ:
Materializing 1 feature viewsinto the redis online store
๐ ๊ฒฐ๋ก
Offline(S3 parquet) โ Online(Redis) ์ ์ฌ๊ฐ
์ค์ ๋ก ๋์ํจ์ด ํ์ธ๋ฉ๋๋ค.
F-3) online(redis) ์กฐํ ์ฑ๊ณต ์ฆ๋ช

๐ธ 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 ์๋ฆฌ์ฆ๋
์ค๊ณ ์ค๋ช ์ด ์๋, ์ด์ ๊ฐ๋ฅํ ์ํ๊ฐ ์ฆ๋ช ๋ ๊ตฌํ์ผ๋ก ์๊ฒฐ๋ฉ๋๋ค.