태스크 그룹으로 복잡한 DAG 구성하기

Airflow로 데이터 파이프라인 구축하기

Volker Janz

Senior Developer Advocate at Astronomer

복잡성 문제

복잡한 DAG

  • DAG가 커질수록 그래프 뷰에서 탐색이 어려워집니다
  • 태스크 이름이 뒤섞여 구분하기 힘들어집니다
  • 새 팀원이 자신이 담당한 태스크를 찾기 어렵습니다
Airflow로 데이터 파이프라인 구축하기

@task_group

from airflow.sdk import dag, task, task_group

@task_group(
    group_id="ingest_orders",
    default_args={"retries": 3},
)

def process_orders(): @task def extract_orders(): return [{"id": 1, "amount": 99.99}] @task def transform_orders(orders): return [{"id": o["id"], "total": o["amount"] * 1.08} for o in orders] return transform_orders(extract_orders())
  • group_id사용자 정의 식별자를 설정하며, 기본값은 함수 이름입니다
  • default_args는 그룹 내 모든 태스크에 적용되어 반복적인 설정 코드를 줄여줍니다
  • 태스크 그룹은 UI에서 접고 펼 수 있는 블록으로 표시됩니다
Airflow로 데이터 파이프라인 구축하기

Airflow UI에서의 모습

태스크 그룹 미사용

extract_orders, transform_orders, load 세 태스크가 같은 레벨에 일렬로 나열된 단순 그래프

  • 모든 태스크가 동일한 레벨에 위치합니다

태스크 그룹 사용

extract와 transform을 포함하는 process_orders 블록과 그룹 외부의 load 태스크가 표시된 그래프

  • UI에서 접고 펼 수 있는 블록으로 표시됩니다
Airflow로 데이터 파이프라인 구축하기

중첩 및 사용자 정의 표시 이름

@task_group(group_display_name="Process All")
def process_all():

    @task_group(group_display_name="Ingest Orders")
    def orders():
        return transform(extract())

    @task_group(group_display_name="Process Returns")
    def returns():
        return transform(extract())

    return {
        "orders": orders(),
        "returns": returns(),
    }
  • 더 복잡한 파이프라인을 위해 태스크 그룹을 중첩할 수 있습니다
  • group_display_name은 UI에 표시되는 사람이 읽기 쉬운 레이블을 설정합니다(이모지도 지원)
Airflow로 데이터 파이프라인 구축하기

팩토리 패턴

@task_group
def process_source(source_name, source_path):

    @task
    def extract():
        return read_data(source_path)

    @task
    def transform(data):
        return clean_data(data)

    return transform(extract())

# Reuse the same pattern for different sources orders = process_source("orders", "/data/orders.csv") returns = process_source("returns", "/data/returns.csv") events = process_source("events", "/data/events.csv")
  • 태스크 그룹은 데코레이터가 적용된 Python 함수입니다
  • 다른 매개변수로 여러 번 호출할 수 있습니다
  • 팩토리 패턴을 통해 파이프라인 로직을 재사용할 수 있습니다
Airflow로 데이터 파이프라인 구축하기

그룹화 가이드라인

도메인 또는 관심사별 그룹화

  • 연산자 유형이 아닌 도메인 또는 관심사를 기준으로 그룹화하세요
  • 명확한 프로그래밍 이름에는 group_id를, UI 레이블에는 group_display_name을 사용하세요
  • 그룹 내 모든 태스크에 재시도 등의 설정을 공유하려면 default_args를 사용하세요
  • 밀러의 법칙을 적용하여 최상위 항목이 7개를 초과하면 태스크 그룹이 필요하다는 신호로 볼 수 있습니다
Airflow로 데이터 파이프라인 구축하기

연습해 봅시다!

Airflow로 데이터 파이프라인 구축하기

Preparing Video For Download...