시스템 개발 및 관리/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된 결과를 하나씩 소비합니다.
우리가 직접 반복문을 돌릴 필요가 없습니다.
언제 멀티 자산을 쓰면 좋을까?
- 공통 소스에서 여러 자산을 만들 때
- 데이터 분할, 변환, 지표 계산 등 일괄 작업 시
- 자산의 수가 많지만 별도 파일로 나누기 번거로운 경우
정리
멀티 자산은 단순한 편의 기능을 넘어 구조적 유연성과 코드 관리 효율을 제공합니다.
여러 자산을 공통 처리하거나 모듈화하고 싶은 상황이라면 적극 활용해 보세요!