[Airflow] DAG (Directed Acyclic Graph) 란 ?
🟡 특징
Airflow의 핵심 개념으로, 작업의 흐름을 나타내는 그래프 구조입니다. Directed Acyclic Graph 라는 이름에서 알 수 있듯이, DAG는 방향성이 있는 그래프이며, 순환(cycle)이 없는 구조입니다.
이 구조는 작업(Task) 간의 의존 관계를 정의하고, 어떻게 순차적으로 실행되는지를 결정합니다.
DAG는 작업 간의 흐름과 의존성을 정의하는 데 사용되며, 각 작업은 테스크(Task) 로 표현됩니다.
DAG 자체는 작업이 어떻게 서로 연결되어 있는지를 나타내고, Airflow는 이 DAG를 따라 작업을 실행합니다.
🟡 기본 구성 요소
⚙ 작업(Task)
DAG에서 실행해야 하는 하나의 개별 작업을 의미합니다.
Python 함수, SQL 쿼리, Shell 명령어 등 다양한 형태로 정의할 수 있습니다.
⚙ 연산자(Operator)
작업을 실제로 수행하는 단위입니다.
예를 들어, BashOperator는 Bash 명령을 실행하고, PythonOperator는 Python 코드를 실행합니다.
⚙ 테스크 그룹(Task Group)
여러 개의 작업을 그룹으로 묶어, 한꺼번에 실행하거나 논리적 구성을 표현할 수 있습니다.
⚙ 의존성(Dependencies)
작업 간의 실행 순서를 정의합니다.
예를 들어, Task A가 완료된 후에 Task B를 실행할 수 있도록 의존성을 설정합니다.
🟡 DAG의 생명 주기
DAG는 Airflow에서 다음과 같은 단계로 작동합니다.
⚙ 정의(Definition)
DAG는 Python 스크립트로 정의되며, 각 작업(태스크)과 의존성을 코드로 작성합니다.
⚙ 스케줄링(Scheduling)
DAG는 주기적으로 실행되도록 스케줄을 지정할 수 있습니다.
예를 들어, 매일 12시에 실행되도록 설정할 수 있습니다.
⚙ 실행(Execution)
Airflow는 DAG를 실행할 때 각 작업을 정의된 순서와 의존성에 따라 순차적으로 또는 병렬로 실행합니다.
⚙ 모니터링(Monitoring)
DAG가 실행되면, Airflow의 UI를 통해 실행 상태를 모니터링할 수 있습니다.
각 작업의 성공 여부, 소요 시간 등을 확인할 수 있습니다.
🟡 DAG와 태스크의 실행
Airflow는 DAG에 정의된 의존성을 바탕으로 각 작업을 순차적으로 실행합니다.
또한 DAG는 여러 작업을 병렬로 실행할 수 있으며, Airflow는 이러한 병렬 작업을 효과적으로 관리합니다.
⚙ DAG의 실행 흐름
- 병렬 실행
- 작업 간에 의존성이 없다면 여러 작업을 병렬로 실행할 수 있습니다.
- 순차 실행
- 작업 간 의존성이 있으면 하나의 작업이 끝나야 다음 작업이 실행됩니다.
🟡 DAG의 스케줄링
DAG는 특정 스케줄에 따라 주기적으로 실행됩니다.
스케줄을 정의할 때는 cron 표현식, @daily, @hourly 등의 예약어를 사용할 수 있습니다.
예를 들어:
- @daily: 매일 한 번 실행
- @hourly: 매시간 실행
- cron 표현식: 특정 시점에 맞춰 실행할 수 있도록 세밀하게 조정 가능 (0 0 * * *는 매일 0시에 실행)
🟡 DAG의 상태 및 관리
Airflow UI를 통해 DAG의 상태를 모니터링하고 관리할 수 있습니다.
Airflow는 각 작업의 성공 여부, 실패, 재시도 등의 상태를 표시하고, 문제가 발생했을 때 이를 시각적으로 보여줍니다.
이를 통해 DAG 실행 중 오류가 발생했을 때 어떤 작업에서 문제가 있었는지 쉽게 파악할 수 있습니다.
🟡 DAG 실행 예외 처리
Airflow는 작업이 실패했을 때 재시도를 자동으로 수행하거나, 실패한 작업 이후의 작업을 건너뛰는 등의 예외 처리가 가능합니다.
이를 위해 작업에서 재시도 횟수, 재시도 간격 등을 설정할 수 있습니다.
🟡 DAG의 실시간 모니터링
Airflow는 실행 중인 DAG와 태스크를 실시간으로 모니터링할 수 있는 UI를 제공합니다.
각 작업의 실행 로그를 확인하고, 실행 결과와 성공 여부를 시각적으로 확인할 수 있습니다.