Dagster로 파이프라인을 구성하다 보면 단일 자산 내부에서 로직을 함수로 나눌지, 아니면 @op로 정의해 graph_asset으로 구성할지 고민되는 경우가 있습니다.
둘 다 Python 함수처럼 보이지만, Dagster의 관점에서는 큰 차이가 있습니다.
일반 함수 호출은 단순 코드 실행
def clean_data(df):
return df.dropna()
@dg.asset
def cleaned_asset():
raw = pd.read_csv("data.csv")
return clean_data(raw)
- clean_data는 단순 Python 함수
- Dagster는 이 내부 로직을 인식하지도, 추적하지도 못함
- 실패해도 어느 지점인지 알 수 없음
@op은 Dagster가 이해하는 작업 단위
@dg.op
def clean_data(df):
return df.dropna()
@dg.op
def load_data():
return pd.read_csv("data.csv")
@dg.graph_asset
def cleaned_asset():
return clean_data(load_data())
- 각각의 @op는 Dagster에서 독립된 실행 노드
- 실패하면 어떤 op에서 문제가 발생했는지 추적 가능
- retry_policy, resources, tags 등 세밀한 제어 가능
무엇이 달라질까?
결론: 언제 어떤 방식을 쓸까?
한 줄 요약
Dagster는 일반 Python 함수는 “단순 실행”으로 보고,
@op는 “추적 가능한 작업 단위”로 인식합니다.
복잡하거나 중요한 처리 로직은 반드시 @op로 관리하세요.
'시스템 개발 및 관리 > Dagster 사용법' 카테고리의 다른 글
Dagster에서 자산 간 의존 관계 이해하기: Upstream vs Downstream (0) | 2025.06.04 |
---|---|
Dagster 자산 구조 이해하기: key_prefix, ins, AssetIn 간단 정리 (0) | 2025.05.31 |
Dagster @graph_asset와 재시도 정책(RetryPolicy) 간단 정리 (0) | 2025.05.31 |
Dagster 멀티 자산(Multi-Asset)이란? (0) | 2025.05.31 |
Dagster에서 deps를 사용하는 이유는 무엇일까? (0) | 2025.05.30 |