Feast 실무 스터디 가이드

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약

feature-store online-offline serving 2026.03

1. Feast란?

Feast (Feature Store)는 ML 피처의 정의, 저장, 공유, 서빙을 위한 오픈소스 플랫폼입니다. 모델 훈련과 추론 사이의 피처 일관성을 보장하고, 피처 엔지니어링 파이프라인을 표준화합니다.

✅ 피처 재사용

한 번 정의한 피처를 여러 모델과 환경에서 공유

⏱ 온라인/오프라인 일관성

훈련용 오프라인 feature과 추론용 온라인 feature의 값 불일치 해소

📦 서빙 인프라 추상화

Redis, DynamoDB 등 온라인 스토어 추상화 + 저지연 조회

2. 왜 써야 하는가?

기존 방식(직접 쿼리, 수동 파이프라인)과 Feast 사용 시의 차이를 비교합니다.

항목기존 방식Feast 사용
피처 공유팀마다 중복 정의, 버전 관리 어려움중앙 Feature Repository
훈련/추론 간 일관성수동 동기화, 값 차이 발생동일한 피처 정의로 자동 동기화
온라인 서빙 지연직접 DB 조회, 복잡한 캐싱Redis 등 통합 온라인 스토어
파이프라인 복잡성Spark, SQL 등 각각 관리Feast SDK + CLI로 표준화

💡 사용 사례: 추천 시스템, 사기 탐지, 실시간 개인화 등 피처가 많고 자주 갱신되는 환경에 적합.

3. 핵심 개념

Feast 아키텍처는 크게 세 가지 레이어로 구성됩니다.

+------------------------+ +-------------------------+ | Feature Repository | | Feature Server | | (feature_store.yaml) | | (Online Serving) | | - feature_view | | - gRPC / HTTP | | - data_source |---->| - Redis / DynamoDB | | - entity | +-------------------------+ +------------------------+ | offline store (BigQuery, Redshift, etc.) v +------------------------+ | Historical Retrieval | | (훈련 데이터셋 생성) | +------------------------+

4. 퀵스타트

4.1 설치

pip install feast

또는 Docker를 통해 Feast Serving 실행:

docker run -p 6565:6565 feastdev/feature-server:latest

4.2 새 프로젝트 생성

feast init my_feast_repo
cd my_feast_repo

4.3 첫 번째 Feature 정의 (Python)

# features.py
from feast import Entity, FeatureView, Field, FileSource
from feast.types import Float32, Int64

# 엔티티 정의
user = Entity(name="user_id", description="User identifier")

# 데이터 소스 (로컬 Parquet 예시)
driver_hourly_stats = FileSource(
    path="data/driver_stats.parquet",
    timestamp_field="event_timestamp",
)

# Feature View
driver_hourly_stats_view = FeatureView(
    name="driver_hourly_stats",
    entities=[user],
    ttl=timedelta(days=1),
    schema=[
        Field(name="conv_rate", dtype=Float32),
        Field(name="acc_rate", dtype=Float32),
        Field(name="avg_daily_trips", dtype=Int64),
    ],
    source=driver_hourly_stats,
)

4.4 적용 및 데이터 조회 (CLI)

feast apply
feast materialize-incremental 2026-03-01T00:00:00

온라인 조회 (Python SDK):

from feast import FeatureStore

store = FeatureStore(repo_path=".")
features = store.get_online_features(
    features=["driver_hourly_stats:conv_rate"],
    entity_rows=[{"user_id": 1001}]
).to_dict()
print(features)

5. 핵심 설정 레퍼런스

설정 키 (feature_store.yaml)설명예시 값
project프로젝트 이름 (네임스페이스)my_project
provider클라우드/로컬 providergcp / aws / local
online_store.type온라인 스토어 종류redis, dynamodb, sqlite
offline_store.type오프라인 스토어 종류bigquery, redshift, file
feature_server서빙 옵션enabled: True, port: 6565
entity_key_serialization엔티티 키 직렬화 방식messagepack, proto

⚠️ 주의: online_store와 offline_store는 반드시 일관된 스키마로 유지해야 합니다. materialize 전에 ttl과 timestamp_field를 확인하세요.

6. 실무 팁 & 트러블슈팅

문제원인해결책
materialize 중 필드 누락Parquet 파일 스키마와 Feature View의 schema 불일치feast validate + Parquet 스키마 확인
온라인 조회 시 값 없음materialize가 안 됐거나 ttl 만료feast materialize-incremental 실행
Feature Server 연결 실패포트 충돌 or 잘못된 주소feast serve 로그 확인, .env 파일 검토
엔티티 중복 문제동일 엔티티가 여러 Feature View에 다르게 정의엔티티를 공유 feature_store.yaml에서 단일 정의

🔧 추천 팁: CI/CD 파이프라인에 feast apply --dry-run을 포함시켜 변경 사전 검증. 로컬 개발 시 SQLite online store를 사용하면 빠른 iteration 가능.

7. 참고 자료