시스템 개발 및 관리/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로 관리하세요.