컨테이너·워크플로우 자동화/Dagster 사용법

Dagster에서 Definitions와 merge는 왜 쓸까?

Data Jun 2025. 6. 10. 23:14

 Dagster로 ETL, 데이터 파이프라인을 구성하다 보면
Definitions(...)와 Definitions.merge(...)라는 구조를 자주 보게 됩니다.
이번 글에서는 이 두 가지 키워드가 무엇을 의미하고, 왜 쓰이는지 간단하게 살펴봅니다.

 

Definitions란?

Dagster에서 자산(asset), 작업(op), 리소스(resource) 등을 한 곳에 정의하고 모아서 등록하는 컨테이너입니다.

from dagster import Definitions

defs = Definitions(
    assets=[etl_asset],
    resources={"s3": s3_resource},
)

이처럼 Definitions는 하나의 파이프라인 단위를 구성하는 핵심 블록이에요.
정리하면:

Dagster 앱의 구성요소를 하나의 DAG으로 "등록"해주는 선언부

 

 

여러 Definitions을 만들 수는 없을까?

가능합니다.
예를 들어 ETL 작업을 데이터셋 단위로 쪼개서 여러 개 만들고 싶을 수 있겠죠.

# 두 개의 서로 다른 ETL 정의
job1 = Definitions(...)
job2 = Definitions(...)

이런 경우 각각을 분리해서 정의하되, 최종적으로 하나로 묶어 실행해야 Dagster 인스턴스가 인식할 수 있어요.

 

 

Definitions.merge()란?

📌 여러 Definitions 인스턴스를 하나로 병합해주는 함수입니다.

defs = Definitions.merge(
    build_etl_job(...),
    build_etl_job(...),
)

이 구조의 의미는 다음과 같습니다:

  • 각각의 build_etl_job(...)은 Definitions를 반환합니다.
  • merge()는 이를 하나로 통합해서 실행 가능한 하나의 DAG 정의로 합쳐줍니다.
  • 병합 시 내부적으로 assets, resources, jobs, schedules, sensors 등을 자동으로 합칩니다.

 

요약

Dagster는 구조적으로 복잡한 파이프라인도 모듈 단위로 깔끔하게 정의하고 조합할 수 있도록 설계되어 있습니다.
Definitions와 merge()는 이 구조적 유연성을 유지하면서 확장 가능한 파이프라인을 구성하는 핵심 요소입니다.