시스템 개발 및 관리/Dagster 사용법
Dagster @graph_asset와 재시도 정책(RetryPolicy) 간단 정리
Data Jun
2025. 5. 31. 11:13
Dagster는 자산(asset) 중심의 워크플로우 관리 도구지만, 때로는 여러 작업(op)을 조합한 복잡한 흐름을 하나의 자산처럼 구성하고 싶을 때가 있습니다.
이럴 때 유용하게 사용할 수 있는 것이 바로 @graph_asset입니다.
@graph_asset란?
여러 @op를 조합한 Graph 작업 전체를 하나의 자산(asset)으로 정의할 수 있는 데코레이터입니다.
기본 구조 예시
@dg.graph_asset
def complex_asset():
return step_two(step_one())
재시도 정책(RetryPolicy) 적용
실제 데이터 처리 작업은 네트워크 오류, API 실패 등으로 인해 일시적인 실패가 자주 발생합니다.
이를 자동으로 **재시도(Retry)**하게 만드는 것이 RetryPolicy입니다.
@dg.op(
retry_policy=dg.RetryPolicy(
max_retries=5, # 최대 5회 재시도
delay=0.2, # 재시도 간격 200ms
backoff=dg.Backoff.EXPONENTIAL, # 점점 증가하는 지연시간
jitter=dg.Jitter.PLUS_MINUS # 지연시간에 ± 무작위값 추가
)
)
def step_one() -> int:
if randint(0, 2) >= 1:
raise Exception("Flaky step that may fail randomly")
return 42
주요 파라미터 설명
import dagster as dg
from random import randint
@dg.op(
retry_policy=dg.RetryPolicy(
max_retries=5,
delay=0.2,
backoff=dg.Backoff.EXPONENTIAL,
jitter=dg.Jitter.PLUS_MINUS,
)
)
def step_one() -> int:
if randint(0, 2) >= 1:
raise Exception("Flaky step that may fail randomly")
return 42
@dg.op
def step_two(num: int):
return num**2
@dg.graph_asset
def complex_asset():
return step_two(step_one())
defs = dg.Definitions(assets=[complex_asset])
언제 사용하면 좋을까?
결론
@graph_asset은 여러 op를 하나의 자산처럼 관리할 수 있는 유연한 구조이고,
RetryPolicy는 안정적인 실행과 회복력을 보장하는 데 핵심 도구입니다.
두 기능을 함께 사용하면 강력하고 견고한 데이터 파이프라인을 구성할 수 있습니다.