시스템 개발 및 관리/Dagster 사용법
Dagster에서 @op vs 일반 함수 호출: 무엇이 다를까?
Data Jun
2025. 5. 31. 11:18
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로 관리하세요.