시스템 개발 및 관리/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는 안정적인 실행과 회복력을 보장하는 데 핵심 도구입니다.
두 기능을 함께 사용하면 강력하고 견고한 데이터 파이프라인을 구성할 수 있습니다.