데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
Feast (Feature Store)는 ML 피처의 정의, 저장, 공유, 서빙을 위한 오픈소스 플랫폼입니다. 모델 훈련과 추론 사이의 피처 일관성을 보장하고, 피처 엔지니어링 파이프라인을 표준화합니다.
한 번 정의한 피처를 여러 모델과 환경에서 공유
훈련용 오프라인 feature과 추론용 온라인 feature의 값 불일치 해소
Redis, DynamoDB 등 온라인 스토어 추상화 + 저지연 조회
기존 방식(직접 쿼리, 수동 파이프라인)과 Feast 사용 시의 차이를 비교합니다.
| 항목 | 기존 방식 | Feast 사용 |
|---|---|---|
| 피처 공유 | 팀마다 중복 정의, 버전 관리 어려움 | 중앙 Feature Repository |
| 훈련/추론 간 일관성 | 수동 동기화, 값 차이 발생 | 동일한 피처 정의로 자동 동기화 |
| 온라인 서빙 지연 | 직접 DB 조회, 복잡한 캐싱 | Redis 등 통합 온라인 스토어 |
| 파이프라인 복잡성 | Spark, SQL 등 각각 관리 | Feast SDK + CLI로 표준화 |
💡 사용 사례: 추천 시스템, 사기 탐지, 실시간 개인화 등 피처가 많고 자주 갱신되는 환경에 적합.
Feast 아키텍처는 크게 세 가지 레이어로 구성됩니다.
pip install feast
또는 Docker를 통해 Feast Serving 실행:
docker run -p 6565:6565 feastdev/feature-server:latest
feast init my_feast_repo
cd my_feast_repo
# 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,
)
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)
| 설정 키 (feature_store.yaml) | 설명 | 예시 값 |
|---|---|---|
| project | 프로젝트 이름 (네임스페이스) | my_project |
| provider | 클라우드/로컬 provider | gcp / 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를 확인하세요.
| 문제 | 원인 | 해결책 |
|---|---|---|
| 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 가능.