Codeit Sprint/Weekly_Paper

위클리 페이퍼 #16 AIRFLOW - DAG와 Task

ko_sick 2024. 12. 1. 23:52

Apache Airflow에서 DAG와 Task는 워크플로우를 정의 및 실행을 하는 핵심 개념으로 사용됩니다.

 

DAG(Directed Acyclic Graph)

- 정의 :

  • 작업(Task)들의 흐름을 나타내는 구조로, 방향성이 있으면서 사이클이 없는 그래프 입니다.

- 역할 : 

  • 워크플로우의 전체 구조를 정의
  • 작업 간의 순서와 의존성을 나타냄
  • 지정된 시간(Schedule)에 따라서 실행됨

- 특징 : 

  • Directed(방향성) : 작업은 항상 지정된 순서로만 실행됩니다.
  • Acyclic(비순환성) : 작업 순환이 없어 무한루프가 발생되지 않습니다.
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from datetime import datetime

with DAG(
    dag_id='example_dag',
    start_date=datetime(2024, 1, 1),
    schedule_interval='@daily'
) as dag:
    task1 = DummyOperator(task_id='start') # task를 비어있는 더미로 생성
    task2 = DummyOperator(task_id='middle')
    task3 = DummyOperator(task_id='end')

    task1 >> task2 >> task3  # 작업의 순서 및 의존성 정의

 

Task

- 정의 : Task는 DAG 내에서 실제로 수행되는 작업의 단위입니다.

 

- 역할 :

  • 데이터 처리, 파일 전송, API 호출 등 다양한 작업을 수행합니다.
  • DAG의 노드(node)에 해당하며, 특정 Operator를 통해 정의됩니다.

- 종류 :

  • Operator: 작업을 수행하기 위한 기본 빌딩 블록.
    • DummyOperator: 작업 없이 흐름을 테스트하거나 중간 단계를 나타냄.
    • PythonOperator: Python 함수를 실행.
    • BashOperator: Bash 스크립트를 실행.
    • HttpOperator: HTTP 요청을 보냄.
    • PostgresOperator: Postgres SQL 쿼리를 실행.

 

- 의존성 : 

  • task간 실행 순서를 지정하기 위해서 >>와 같은 순서를 지정하는 연산자를 사용해야함
task1 >> task2 #task1이후에 task2실행
task1 >> [task2, task3] # task1이후에 task2, task3 실행

 

task에서 사용되어지는 오퍼레이터의 종류에 따라서 행해지는 작업들이 달라집니다. bash, GCS에 전송, google cloud의 big query의 database 생성 및 제거와 같은 다양한 작업을 할 수 있습니다.