목록으로

Programming Notes

Apache Airflow 2.7에서 서브 DAG 활용하기: 메인 DAG와 의존성 관리

Apache Airflow를 사용하여 작업 흐름을 관리하다 보면, 복잡한 DAG를 작은 단위의 DAG로 분리하여 관리하고 싶은 경우가 많습니다. 이때 서브 DAG를 활용하면 코드 가독성을 높이고, 유지보수를 용이하게 할 수 있습니다. 이 글에서는 Airflow 2.7 버전에서...

Apache Airflow를 사용하여 작업 흐름을 관리하다 보면, 복잡한 DAG를 작은 단위의 DAG로 분리하여 관리하고 싶은 경우가 많습니다. 이때 서브 DAG를 활용하면 코드 가독성을 높이고, 유지보수를 용이하게 할 수 있습니다. 이 글에서는 Airflow 2.7 버전에서 메인 DAG에서 서브 DAG를 실행하고, 서브 DAG 간 의존성을 설정하는 방법을 자세히 설명합니다. 특히, TriggerDagRunOperator를 사용하여 서브 DAG를 트리거하고, 실행 순서를 제어하는 방법에 중점을 두겠습니다.

메인 DAG인 MAIN_DAG는 매일 새벽 3시에 실행되도록 예약되어 있습니다 (schedule_interval='0 3 * * *'). 이 메인 DAG는 TriggerDagRunOperator를 통해 두 개의 서브 DAG, GROUP_DIM_DAG_I_00GROUP_DWM_DAG_I_00을 실행합니다. 각 서브 DAG는 각각 trigger_group_dim_dagtrigger_group_dwm_dag라는 변수에 할당되어 메인 DAG 내에서 호출됩니다.

핵심은 서브 DAG 간의 의존성 설정입니다. 데이터 처리 과정에서 GROUP_DIM_DAG_I_00의 작업이 완료되어야 GROUP_DWM_DAG_I_00가 시작되어야 하는 상황을 가정해보겠습니다. 이를 위해 TriggerDagRunOperator에 특정 옵션을 설정합니다. wait_for_completion=True 옵션을 사용하여 GROUP_DIM_DAG_I_00 서브 DAG의 실행이 완료될 때까지 기다립니다. 이를 통해 GROUP_DWM_DAG_I_00GROUP_DIM_DAG_I_00의 결과를 안전하게 사용할 수 있도록 보장합니다. 또한, reset_dag_run=True 옵션을 통해 서브 DAG의 이전 실행 기록을 초기화하고 새롭게 실행하도록 설정합니다. 이는 매일 새롭게 데이터를 처리해야 하는 경우에 유용합니다. 마지막으로 execution_date="{{ ds }}"를 사용하여 메인 DAG의 실행 날짜와 동일한 날짜로 서브 DAG를 실행합니다. 이렇게 함으로써 데이터 일관성을 유지할 수 있습니다.

결론적으로, Airflow의 TriggerDagRunOperator와 적절한 옵션 설정을 통해 메인 DAG는 서브 DAG의 실행을 효과적으로 제어하고, 서브 DAG 간의 의존성을 명확하게 설정할 수 있습니다. 이 방법을 통해 복잡한 작업 흐름을 모듈화하고 관리 가능하게 만들어 Airflow를 더 효율적으로 사용할 수 있습니다. 서브 DAG를 활용한 모듈화는 코드의 재사용성을 높이고, 유지보수 비용을 절감하는 데 큰 도움이 될 것입니다. 각 DAG의 역할을 명확하게 분리하고, 의존성을 정확히 설정하는 것이 Airflow를 사용하는 데 있어 매우 중요하다는 점을 다시 한번 강조합니다.