시스템 개발 및 관리/Dagster 사용법

Dagster 멀티 자산(Multi-Asset)이란?

Data Jun 2025. 5. 31. 10:51

멀티 자산이란?

Dagster의 @multi_asset 데코레이터는 하나의 함수에서 여러 자산을 동시에 생성할 수 있게 해줍니다.
이 기능은 자산 간에 처리 로직이 유사하거나, 공통 데이터 소스를 기반으로 생성되는 경우 유용합니다.

 

왜 yield를 사용해야 할까?

Python에서는 yield 키워드를 통해 **제너레이터(generator)**를 정의할 수 있습니다.
Dagster는 이 구조를 활용해 각 자산을 순차적으로 materialize합니다.

@dg.multi_asset(specs=[dg.AssetSpec("asset_one"), dg.AssetSpec("asset_two")])
def my_multi_asset():
    yield dg.MaterializeResult(asset_key="asset_one", metadata={"rows": 100})
    yield dg.MaterializeResult(asset_key="asset_two", metadata={"rows": 50})

위 코드에서 asset_one과 asset_two는 순차적으로 생성되며,
각 자산은 개별적으로 UI에 materialized 상태로 표시됩니다.

 

return이 아닌 yield를 써야 하는 이유

  • return은 함수 실행을 종료합니다.
  • yield는 값을 하나 반환한 뒤 함수를 일시 중단하고, 다음 호출 시 이어서 실행합니다.

따라서 여러 자산을 정의하려면 yield를 통해 하나씩 처리해야 합니다.

 

실행은 누가 하나요?

👉 Dagster 프레임워크가 직접 제너레이터를 실행하며 yield된 결과를 하나씩 소비합니다.
우리가 직접 반복문을 돌릴 필요가 없습니다.

 

언제 멀티 자산을 쓰면 좋을까?

  • 공통 소스에서 여러 자산을 만들 때
  • 데이터 분할, 변환, 지표 계산 등 일괄 작업 시
  • 자산의 수가 많지만 별도 파일로 나누기 번거로운 경우

 

정리

멀티 자산은 단순한 편의 기능을 넘어 구조적 유연성코드 관리 효율을 제공합니다.
여러 자산을 공통 처리하거나 모듈화하고 싶은 상황이라면 적극 활용해 보세요!