본문 바로가기
Sprint_DA01/위클리 페이퍼

위클리 페이퍼 #16 - Airflow

by Toddler_AD 2024. 12. 1.

1. 윈도우 환경에서 Airflow를 구동시키기 위해 어떤 환경설정이 필요한지 설명해주세요.

  • Windows 환경에서 Apache Airflow를 설정하려면 몇 가지 사전 준비와 설정 단계가 필요하다. Airflow는 기본적으로 Unix 기반 시스템에서 잘 동작하도록 설계되었으므로, Windows에서는 몇 가지 추가 작업이 필요하다.
  • [AIRFLOW] Window환경에 Airflow 설치 및 Dag import 확인(출처: https://velog.io/@newnew_daddy/AIRFLOW01)
    • Window 환경에 Airflow를 설치하려면 상당히 고역이다. 엄밀히 말하자면 윈도우 로컬 환경에 설치는 어렵기 때문에 WSL의 도움을 받아 설치를 하곤하는데 Docker-Compose를 사용하면 아주 간단하게 Webserver와 Postgres DB까지 같이 한 방에 설치가 가능하다.
    • Docker-Compose를 사용하여 Airflow 환경을 구축해보자.

  • Docker Compose를 사용한 Airlfow 환경 구축
    • Docs 참고 -> Running Airflow in Docker
    • Docker Compose YAML 파일 -> Airflow YAML
    • 위의 yaml 파일을 docker-compose.yaml에 저장 후 바로 실행해도 무방하지만 UI에 접속했을 때 예시 Dag들을 보여주는 AIRFLOW__CORE__LOAD_EXAMPLES 옵션을 false로 주고 설치를 해 볼 것이다.
version: '3.8'
x-airflow-common:
  &airflow-common
  .
  .
    AIRFLOW__CORE__LOAD_EXAMPLES: 'false'

 

  • 리눅스 명령어가 먹히도록 WSL 터미널로 접속한 후 아래 과정을 따라간다.
1.설치 전 명령어 실행

  > mkdir -p ./dags ./logs ./plugins ./config
  > echo -e "AIRFLOW_UID=$(id -u)" > .env

2. 생성된 .env 파일의 'AIRFLOW_UID' 변경

  > AIRFLOW_UID=50000

3. Database 초기화

  > docker compose up airflow-init

4. 초기화 완료 후 docker-compose.yaml 파일 실행

  > docker-compose up

 

  • docker-compose up 후 약간의 시간이 지나고 docker ps로 실행중인 컨테이너 목록들을 확인해본다. 아래와 같이 6개의 컨테이너들이 모두 running 상태이면 로컬에 airflow 설치가 완료된것이다.


2. Airflow의 주요 구성요소인  DAG와 Task의 관계에 대해 설명해주세요.

  • Apache Airflow에서 DAG와 Task는 워크플로우를 정의하고 실행하는 데 중요한 구성 요소이다.
  • 두 개념의 관계는 마치 전체와 구성 요소의 관계와 같다.

1. DAG (Directed Acyclic Graph)

  • 정의: DAG는 워크플로우의 전체적인 구조를 나타내는 유향 비순환 그래프.
    • "유향"이란 각 작업이 특정 순서대로 실행되어야 함을 의미.
    • "비순환"이란 작업의 흐름에 루프(순환)가 없음을 의미.
  • 역할: 여러 Task를 의미 있는 순서로 연결하여, 실행할 워크플로우를 정의.
  • 구성: DAG는 단순히 작업(Task)들의 실행 순서를 정의하는 틀(framework)이다. 실제로 실행되는 것은 DAG 안에 정의된 Task들이다.

2. Task

  • 정의: Task는 DAG 내에서 실행되는 작업 단위.
    • 예를 들어, 데이터를 다운로드하거나, 정리하거나, 업로드하는 각각의 작업이 하나의 Task.
  • 역할: 실제로 수행할 작업을 정의하며, Python 함수, Bash 명령, 데이터 이동, API 호출 등 다양한 형태로 정의.
  • 종류: Airflow에서 제공하는 Operator(작업 유형)를 사용하여 Task를 정의. 대표적인 Operator는 다음과 같다:
    • PythonOperator: Python 코드를 실행
    • BashOperator: Bash 명령 실행
    • PostgresOperator: PostgreSQL 쿼리 실행
    • DummyOperator: 아무 작업도 하지 않음 (흐름 제어용)

3. DAG와 Task의 관계

  • DAG는 Task의 컨테이너: DAG는 Task들을 그룹화하고, 실행 순서를 결정. DAG 없이는 Task를 정의할 수 없으며, DAG의 일부로써 Task가 존재.
  • 의존성 정의: Task들 간의 실행 순서를 DAG에서 설정.
    • 예를 들어, Task A → Task B → Task C라는 의존성을 DAG 안에서 정의.
from airflow import DAG
from airflow.operators.dummy import DummyOperator
from datetime import datetime

# DAG 생성
with DAG(
    dag_id="example_dag",
    start_date=datetime(2023, 12, 1),
    schedule_interval="@daily",
) as dag:
    # Task 정의
    task_a = DummyOperator(task_id="task_a")
    task_b = DummyOperator(task_id="task_b")
    task_c = DummyOperator(task_id="task_c")

    # 의존성 설정
    task_a >> task_b >> task_c

 

  • 이 코드에서 DAG는 워크플로우 전체를 나타내고, Task A, B, C는 각 단계의 작업을 나타낸다.
  • task_a >> task_b >> task_c는 Task 간의 의존성을 정의하며, A가 끝난 후 B가 실행되고, B가 끝난 후 C가 실행된다.

4. 요약: DAG와 Task의 핵심 관계

  • DAG: Task를 조직화하는 전체 워크플로우의 설계도.
  • Task: DAG의 구성 요소로서 실제 작업을 담당.
  • DAG는 Task들의 실행 순서와 의존성을 제어하며, Task는 DAG 안에서 개별 작업 단위를 수행

이와 같이, DAG는 큰 그림(워크플로우 구조)을 그리고, Task는 각각의 조각(구체적 작업)을 담당하며, 둘은 긴밀히 연결되어 워크플로우를 완성한다.