
setup 과 teardown 기능입니다.setup 과 teardown 기능을 활용한다면 2번 작업에 대한 선행, 후행 작업으로 선언하는 것이 이후에 이어질 파이프라인 작업을 선언할 때도 훨씬 직관적으며, 이후 Clear 같은 Task 단위의 재실행 작업시에도 깔끔하게 실행이 가능해집니다.import pendulum
from airflow import DAG
from airflow.sdk import DAG, task
with DAG(
dag_id="setup_n_teardown",
schedule="@once",
start_date=pendulum.datetime(2025, 6, 1, tz="Asia/Seoul"),
catchup=False,
) as dag:
@task(task_id='pre_task')
def pre_task():
print('INITIALIZE')
@task(task_id='real_task')
def real_task():
MSG = """
HELLO WORLD!
THIS IS REAL PIPELINE TASK!
"""
print(MSG)
@task(task_id='post_task')
def post_task():
print('FINALIZE')
pre_task().as_setup() >> real_task() >> post_task().as_teardown()
pre_task:real_task이전에 선행되는 작업real_task: DAG의 실질적인 작업post_task:real_task가 끝나고 후행되는 작업
real_task에 대한 선행 작업은 as_setup(), 후행 작업은 as_teardown() 메소드를 통해 각각 설정이 가능합니다.setup이 설정된 Task는 ↗, teardown이 설정된 작업은 ↘ 모양의 화살표가 붙어있는 것을 확인할 수 있습니다.
real_task만을 Clear로 재실행하면 해당 Task의 선후행 작업이 모두 같이 실행되는 것을 볼 수 있습니다.
setup 과 teardown 선언시 어떻게 작업이 처리되는지 보도록 하겠습니다.import pendulum
from airflow.sdk import DAG, task, task_group
with DAG(
dag_id="setup_n_teardown_tg",
schedule="@once",
start_date=pendulum.datetime(2025, 6, 1, tz="Asia/Seoul"),
catchup=False,
) as dag:
@task_group(group_id='first_group')
def first_group():
@task(task_id='pre_task')
def pre_task():
print('INITIALIZE')
@task(task_id='real_task')
def real_task():
MSG = """
HELLO WORLD!
THIS IS REAL PIPELINE TASK!
"""
print(MSG)
@task(task_id='post_task')
def post_task():
print('FINALIZE')
pre_task().as_setup() >> real_task() >> post_task().as_teardown()
@task(task_id='task_outer_tg')
def task_outer_tg():
print('outer tg')
@task_group(group_id='second_group')
def second_group():
@task(task_id='pre_task')
def pre_task():
print('INITIALIZE')
@task(task_id='real_task')
def real_task():
MSG = """
HELLO WORLD!
THIS IS REAL PIPELINE TASK!
"""
print(MSG)
@task(task_id='post_task')
def post_task():
print('FINALIZE')
pre_task().as_setup() >> real_task() >> post_task().as_teardown()
first_group() >> task_outer_tg() >> second_group()
first_group과 second_group 내에 각각 선후행 작업이 있는 Task가 존재합니다. 이 두 Task Group 사이에는 task_outer_tg라는 Task가 연결되어 있습니다.setup과 teardown이 설정된 경우, 이후에 따라오는 작업(task_outer_tg)은 이전 작업의 real_task와 곧바로 연결되는 것을 확인할 수 있습니다.

선행 작업 실패 → 본작업 실패 + 전체 DAG 실패 → 후행 작업은 성공 or 실패
선행 작업 성공 → 본작업 실패 + 전체 DAG 실패 → 후행 작업 성공 or 실패
선행 작업 성공 → 본작업 성공 + 전체 DAG 성공 → 후행 작업 성공
후행 작업의 경우 성공, 실패 여부와 상관 없이 본작업이 성공하게 되면 전체 DAG는 SUCCESS로 표시됩니다.

하지만, 아래 설정을 통해 후행 작업 실패시 전체 DAG가 FAILED 되도록 설정할 수도 있습니다.
as_teardown(on_failure_fail_dagrun=True)