본문 바로가기
Development/Web

[Web] Apache Airflow 워크플로우 자동화 방법

by 은스타 2025. 10. 30.
반응형
Apache Airflow 완벽 가이드 - 워크플로우 자동화 방법

Apache Airflow 완벽 가이드 - 워크플로우 자동화 방법

데이터 엔지니어링 현장에서 복잡한 데이터 파이프라인을 관리하다 보면 작업 의존성 처리, 스케줄 관리, 실패 시 재시도 등 수많은 문제에 직면하게 됩니다. 매일 정해진 시간에 실행되어야 하는 ETL 작업, 선행 작업 완료 후 실행되는 후속 작업, 실패 시 자동 재시도와 알림 등 관리해야 할 요소가 너무 많습니다.
Airbnb에서 개발한 Apache Airflow는 이러한 문제를 해결하기 위한 강력한 워크플로우 관리 플랫폼입니다. Python 코드로 워크플로우를 정의하고, 시각적으로 모니터링하며, 자동으로 재시도와 알림을 처리하는 Airflow의 강력한 기능을 통해 복잡한 데이터 파이프라인을 효율적으로 관리할 수 있습니다.
이 글에서는 Airflow의 기본 개념부터 설치 방법, 실전 사용법, Best Practice까지 완벽하게 정리하여 Airflow를 처음 접하는 분들도 쉽게 이해하고 활용할 수 있도록 도와드리겠습니다. 데이터 파이프라인 자동화가 필요하신 분들은 끝까지 읽어보시기 바랍니다.
목차
1. Airflow란? 기본 개념과 탄생 배경
2. Airflow 핵심 구성 요소와 아키텍처
3. Airflow 설치 방법 비교
4. Airflow 실전 활용법
5. 자주 묻는 질문 (FAQ)

#1. Airflow란? 기본 개념과 탄생 배경
Apache Airflow는 Python 기반의 오픈소스 워크플로우 관리 플랫폼입니다. 복잡한 데이터 파이프라인을 코드로 정의하고, 스케줄링하며, 모니터링할 수 있는 강력한 도구입니다.
1) Airflow가 탄생한 배경
Airbnb는 2014년경 급격한 성장으로 인해 데이터 파이프라인 관리에 큰 어려움을 겪었습니다. 기존 도구들로는 복잡한 작업 의존성을 관리하기 어려웠고, 실패 처리와 모니터링 기능이 부족했습니다.
(1) 당시 직면한 문제점
복잡한 작업 의존성 관리 - A 작업이 끝나야 B 작업을 실행하는 의존성을 코드로 표현하기 어려웠습니다.
② 실패 처리 부재 - 작업이 실패했을 때 자동으로 재시도하거나 알림을 보내는 기능이 없었습니다.
③ 모니터링 부족 - 어떤 작업이 실행 중인지, 실패했는지 한눈에 파악하기 어려웠습니다.
④ 확장성 한계 - 작업량이 증가하면서 기존 시스템으로는 처리가 불가능했습니다.
이러한 문제를 해결하기 위해 Airbnb는 새로운 워크플로우 관리 시스템을 직접 개발했고, 이것이 바로 Airflow입니다. 2016년에 오픈소스로 공개되었으며, 2019년에 Apache 재단의 최상위 프로젝트로 승격되었습니다.
. . . . .
2) Airflow의 핵심 개념
(1) DAG (Directed Acyclic Graph)
DAG는 방향성 비순환 그래프로, Airflow에서 워크플로우를 표현하는 가장 핵심적인 개념입니다. DAG는 작업들과 그 의존성을 정의한 Python 파일입니다.
Directed(방향성) - 작업들 사이에 방향이 있다는 의미입니다. A 작업에서 B 작업으로 흐름이 진행됩니다.
Acyclic(비순환) - 순환이 없다는 의미입니다. A → B → C → A와 같은 순환 구조는 허용되지 않습니다.
Graph(그래프) - 작업들을 노드로, 의존성을 간선으로 표현한 그래프 구조입니다.
비순환 구조는 무한 루프를 방지하고 워크플로우의 시작과 끝을 명확하게 만들어줍니다.
(2) Task와 Operator
Task는 DAG 내에서 실행되는 개별 작업 단위입니다. Operator는 Task가 실제로 수행할 작업의 유형을 정의합니다.
Operator 종류 설명
BashOperator Bash 명령을 실행합니다.
PythonOperator Python 함수를 실행합니다.
SQLOperator SQL 쿼리를 실행합니다.
SensorOperator 특정 조건이 만족될 때까지 대기합니다.
(3) 워크플로우 스케줄링
Airflow는 cron 표현식을 사용한 유연한 스케줄링을 지원합니다. 매일 특정 시간, 매주 특정 요일, 매월 특정 날짜 등 다양한 스케줄을 설정할 수 있습니다.
Execution Date는 DAG가 스케줄된 논리적 실행 시간을 의미합니다. 실제 실행 시간과는 다를 수 있으며, 이를 통해 데이터 파티셔닝과 재처리가 가능합니다.
. . . . .
3) Airflow vs 기존 도구 비교
(1) Cron vs Airflow
Cron은 Unix 기반 시스템의 전통적인 작업 스케줄러입니다. 하지만 Cron은 단순한 시간 기반 실행만 가능하며, 작업 간 의존성을 표현할 수 없습니다. 또한 실패 처리, 재시도, 로그 관리, 모니터링 기능이 없어 복잡한 데이터 파이프라인 관리에는 부적합합니다.
반면 Airflow는 작업 간 의존성 정의, 자동 재시도, 알림, 시각적 모니터링을 모두 제공합니다.
구분 Cron Airflow
의존성 관리 불가능 가능
실패 처리 없음 자동 재시도
모니터링 없음 웹 UI 제공
확장성 낮음 높음(분산 실행)
(2) Luigi vs Airflow
Luigi는 Spotify에서 개발한 워크플로우 도구입니다. 하지만 Luigi는 웹 UI가 제한적이고 스케줄링 기능이 약하며 커뮤니티가 Airflow에 비해 작습니다.
Airflow는 풍부한 웹 UI, 강력한 스케줄링, 다양한 Operator, 활발한 커뮤니티를 갖춘 가장 널리 사용되는 워크플로우 도구입니다.

#2. Airflow 핵심 구성 요소와 아키텍처
Airflow는 여러 컴포넌트가 유기적으로 연결되어 동작하는 분산 시스템입니다. 각 구성 요소의 역할을 이해하면 Airflow를 효과적으로 운영할 수 있습니다.
1) Scheduler (스케줄러)
Scheduler는 Airflow의 핵심 엔진으로, DAG를 모니터링하고 실행 시간이 된 Task를 실행 대기열에 추가하는 역할을 합니다.
① 기본적으로 30초마다 DAG 디렉토리를 스캔하여 새로운 DAG나 변경사항을 감지합니다.
② 스케줄에 따라 DAG 실행 인스턴스를 만들고 관리합니다.
③ Task의 의존성을 확인하여 준비된 Task를 실행 대기열에 추가합니다.
. . . . .
2) Executor (실행자)
Executor는 실제로 Task를 실행하는 컴포넌트입니다. Airflow는 여러 종류의 Executor를 지원하며, 환경과 요구사항에 따라 선택할 수 있습니다.
(1) Sequential Executor
가장 단순한 Executor로, Task를 순차적으로 하나씩 실행합니다. 개발 환경이나 테스트용으로 적합하며, SQLite를 데이터베이스로 사용할 때 기본값입니다. 병렬 실행이 불가능하므로 프로덕션 환경에는 적합하지 않습니다.
(2) Local Executor
로컬 머신에서 멀티프로세싱을 통해 Task를 병렬로 실행합니다. 중소 규모의 워크플로우에 적합하며, MySQL이나 PostgreSQL과 함께 사용됩니다. 단일 서버 환경에서 적절한 성능을 제공합니다.
(3) Celery Executor
Celery 분산 작업 큐를 활용하여 여러 워커 노드에서 Task를 실행합니다. 대규모 프로덕션 환경에서 가장 많이 사용되는 Executor입니다. Redis나 RabbitMQ를 메시지 브로커로 사용하여 워커 노드 간 통신을 관리합니다.
(4) Kubernetes Executor
각 Task를 별도의 Kubernetes Pod로 실행합니다. 리소스를 효율적으로 관리할 수 있으며, Task마다 다른 리소스 요구사항을 지정할 수 있습니다. 클라우드 네이티브 환경에 최적화되어 있습니다.
Executor 병렬 실행 적합한 환경
Sequential Executor 불가능 개발/테스트
Local Executor 가능(단일 서버) 중소 규모
Celery Executor 가능(분산) 대규모 프로덕션
Kubernetes Executor 가능(Pod 단위) 클라우드 네이티브
. . . . .
3) Web Server (웹 서버)
Web Server는 Flask 기반의 웹 인터페이스를 제공합니다. 사용자는 웹 UI를 통해 DAG를 모니터링하고 관리할 수 있습니다.
① DAG 목록과 상태 확인
② Graph View로 워크플로우 구조 시각화
③ Task 로그 실시간 확인
④ 수동 DAG 트리거 및 Task 재실행
⑤ Connection과 Variable 관리
. . . . .
4) Metadata Database (메타데이터 데이터베이스)
Metadata Database는 Airflow의 모든 상태 정보를 저장하는 중앙 저장소입니다.
① DAG 정의와 설정
② Task 실행 이력과 상태
③ Connection 정보
④ Variable과 XCom 데이터
PostgreSQL은 프로덕션 환경에서 가장 권장되며, MySQL도 사용 가능하지만 SQLite는 개발 환경 전용입니다.
. . . . .
5) Task 상태 전이
Task는 생명주기 동안 여러 상태를 거칩니다.
상태 설명
None 실행 대기열 추가 전
Scheduled 실행 대기열 추가 상태
Queued Executor의 큐 대기 중
Running 현재 실행 중
Success 성공 완료
Failed 실패 상태
. . . . .
6) XCom을 통한 Task 간 데이터 전달
XCom은 Cross Communication의 약자로 Task 간 데이터를 전달하는 메커니즘입니다.
① Task는 xcom_push로 데이터를 저장합니다.
② 다른 Task는 xcom_pull로 데이터를 가져옵니다.
③ PythonOperator는 return 값을 자동으로 XCom에 push합니다.
대용량 데이터는 XCom이 아닌 S3나 HDFS 같은 외부 스토리지를 사용해야 합니다.

#3. Airflow 설치 방법 비교
Airflow는 다양한 방법으로 설치할 수 있습니다. 환경과 목적에 따라 적합한 방법을 선택하시기 바랍니다.
1) Docker Compose를 이용한 설치 (권장)
가장 빠르고 쉬운 방법은 Docker Compose를 사용하는 것입니다. 모든 구성 요소가 컨테이너로 실행되어 환경 설정이 간편합니다.
(1) docker-compose.yml 파일 준비
# docker-compose.yml
version: '3.8'

x-airflow-common:
  &airflow-common
  image: apache/airflow:2.8.0
  environment:
    &airflow-common-env
    AIRFLOW__CORE__EXECUTOR: CeleryExecutor
    AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
    AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@postgres/airflow
    AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0
  volumes:
    - ./dags:/opt/airflow/dags
    - ./logs:/opt/airflow/logs
    - ./plugins:/opt/airflow/plugins

services:
  postgres:
    image: postgres:13
    environment:
      POSTGRES_USER: airflow
      POSTGRES_PASSWORD: airflow
      POSTGRES_DB: airflow

  redis:
    image: redis:latest

  airflow-webserver:
    <<: *airflow-common
    command: webserver
    ports:
      - 8080:8080

  airflow-scheduler:
    <<: *airflow-common
    command: scheduler

  airflow-worker:
    <<: *airflow-common
    command: celery worker
(2) Airflow 실행
# Docker Compose 파일이 있는 디렉토리에서 실행
docker-compose up airflow-init

# Airflow 서비스 시작
docker-compose up -d

# 웹 UI 접속
# 브라우저에서 http://localhost:8080 열기
# 기본 계정: airflow / airflow

# 로그 확인
docker-compose logs -f

# 서비스 중지
docker-compose down
. . . . .
2) pip를 이용한 직접 설치
로컬 환경에 직접 설치하는 방법입니다. Python 3.8 이상이 필요합니다.
(1) Python 가상환경 생성 및 설치
# Python 가상환경 생성
python -m venv airflow-venv
source airflow-venv/bin/activate

# Airflow 홈 디렉토리 설정
export AIRFLOW_HOME=~/airflow

# Airflow 설치
AIRFLOW_VERSION=2.8.0
PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"

pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

# 데이터베이스 초기화
airflow db init

# 관리자 계정 생성
airflow users create \
  --username admin \
  --firstname Admin \
  --lastname User \
  --role Admin \
  --email admin@example.com \
  --password admin

# Web Server 시작
airflow webserver --port 8080

# 새 터미널에서 Scheduler 시작
airflow scheduler
(2) PostgreSQL 연결
프로덕션 환경에서는 PostgreSQL 사용을 강력히 권장합니다.
# PostgreSQL 설치 (Ubuntu/Debian)
sudo apt-get install postgresql postgresql-contrib

# PostgreSQL 시작
sudo systemctl start postgresql

# Airflow용 데이터베이스 생성
sudo -u postgres psql
CREATE DATABASE airflow;
CREATE USER airflow WITH PASSWORD 'airflow';
GRANT ALL PRIVILEGES ON DATABASE airflow TO airflow;

# airflow.cfg 파일 수정
sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@localhost/airflow

# 데이터베이스 초기화
airflow db init
. . . . .
3) 설치 방법 비교
설치 방법 장점 단점 적합한 환경
Docker Compose 빠른 설치, 환경 분리, 재현 가능 Docker 지식 필요 개발/테스트, 빠른 프로토타이핑
pip 직접 설치 세밀한 제어, 커스터마이징 용이 설정 복잡, 환경 충돌 가능 프로덕션, 커스터마이징 필요 시

#4. Airflow 실전 활용법
이제 실제로 Airflow를 활용하여 데이터 파이프라인을 구축하는 방법을 알아보겠습니다.
1) 첫 번째 DAG 작성하기
(1) 간단한 Hello World DAG
# hello_world_dag.py
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.operators.bash import BashOperator

# 기본 인자 정의
default_args = {
  'owner': 'data-team',
  'depends_on_past': False,
  'email': ['admin@example.com'],
  'email_on_failure': True,
  'retries': 3,
  'retry_delay': timedelta(minutes=5),
}

# DAG 정의
dag = DAG(
  dag_id='hello_world_dag',
  default_args=default_args,
  description='My first Airflow DAG',
  schedule_interval='0 9 * * *',  # 매일 오전 9시
  start_date=datetime(2024, 1, 1),
  catchup=False,
  tags=['tutorial', 'beginner'],
)

# Python 함수 정의
def print_hello():
  print("Hello from Airflow!")
  return "Hello World"

def print_date():
  from datetime import datetime
  print(f"Current date: {datetime.now()}")

# Task 정의
task_hello = PythonOperator(
  task_id='print_hello',
  python_callable=print_hello,
  dag=dag,
)

task_date = PythonOperator(
  task_id='print_date',
  python_callable=print_date,
  dag=dag,
)

task_bash = BashOperator(
  task_id='print_bash',
  bash_command='echo "Hello from Bash!"',
  dag=dag,
)

# Task 의존성 정의
task_hello >> [task_date, task_bash]
(2) DAG 파일 배치 및 테스트
# DAG 파일 저장
cp hello_world_dag.py ~/airflow/dags/

# DAG 목록 확인
airflow dags list

# 특정 DAG 확인
airflow dags show hello_world_dag

# DAG 테스트 실행
airflow dags test hello_world_dag 2024-01-01
. . . . .
2) 데이터 파이프라인 예제 - ETL 프로세스
실제 업무에서 가장 많이 사용되는 ETL 파이프라인을 구축해보겠습니다.
# etl_pipeline.py
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.providers.postgres.hooks.postgres import PostgresHook
import pandas as pd

default_args = {
  'owner': 'data-engineer',
  'retries': 2,
  'retry_delay': timedelta(minutes=5),
}

dag = DAG(
  dag_id='etl_pipeline_example',
  default_args=default_args,
  description='ETL pipeline for daily sales data',
  schedule_interval='0 2 * * *',  # 매일 새벽 2시
  start_date=datetime(2024, 1, 1),
  catchup=False,
)

# Extract: 데이터 추출
def extract_data(**context):
  hook = PostgresHook(postgres_conn_id='postgres_default')
  sql = """
    SELECT order_id, customer_id, product_id, quantity, price, order_date
    FROM orders
    WHERE DATE(order_date) = CURRENT_DATE - INTERVAL '1 day'
  """
  df = hook.get_pandas_df(sql)
  context['ti'].xcom_push(key='raw_data', value=df.to_csv(index=False))
  print(f"Extracted {len(df)} rows")

# Transform: 데이터 변환
def transform_data(**context):
  import io
  raw_data = context['ti'].xcom_pull(key='raw_data', task_ids='extract')
  df = pd.read_csv(io.StringIO(raw_data))
  df['total_amount'] = df['quantity'] * df['price']
  daily_summary = df.groupby('customer_id').agg({
    'total_amount': 'sum',
    'order_id': 'count'
  }).reset_index()
  context['ti'].xcom_push(key='transformed_data', value=daily_summary.to_csv(index=False))
  print(f"Transformed data: {len(daily_summary)} customers")

# Load: 데이터 적재
def load_data(**context):
  import io
  transformed_data = context['ti'].xcom_pull(key='transformed_data', task_ids='transform')
  df = pd.read_csv(io.StringIO(transformed_data))
  hook = PostgresHook(postgres_conn_id='postgres_default')
  df.to_sql('daily_customer_summary', hook.get_sqlalchemy_engine(), if_exists='append', index=False)
  print(f"Loaded {len(df)} rows")

# Task 정의
extract_task = PythonOperator(task_id='extract', python_callable=extract_data, dag=dag)
transform_task = PythonOperator(task_id='transform', python_callable=transform_data, dag=dag)
load_task = PythonOperator(task_id='load', python_callable=load_data, dag=dag)

# Task 의존성
extract_task >> transform_task >> load_task
. . . . .
3) Best Practice
(1) 멱등성 유지
같은 입력으로 여러 번 실행해도 같은 결과가 나와야 합니다. 이를 통해 안전하게 재실행할 수 있습니다.
# 나쁜 예: 멱등성 없음
INSERT INTO daily_summary VALUES (...)

# 좋은 예: 멱등성 보장
DELETE FROM daily_summary WHERE date = '2024-01-01';
INSERT INTO daily_summary VALUES (...);
(2) Task를 작고 명확하게 분리
각 Task는 하나의 명확한 책임만 가져야 합니다. 하나의 큰 Task 대신 여러 개의 작은 Task로 나누면 병렬 실행과 재시도가 더 효율적입니다.
(3) XCom 사용 최소화
대용량 데이터는 XCom으로 전달하지 않습니다. XCom은 소량의 메타데이터 전달용이며, 큰 데이터는 S3나 HDFS 같은 외부 스토리지를 사용해야 합니다.

마무리
Apache Airflow는 현대 데이터 엔지니어링에서 필수적인 워크플로우 관리 도구입니다. Python 코드로 복잡한 데이터 파이프라인을 관리하고, 강력한 스케줄링과 시각적 모니터링을 제공하며, 다양한 시스템과 통합할 수 있는 확장성을 갖추고 있습니다.
핵심 내용 정리:
코드로 관리하는 워크플로우 - Python 코드로 워크플로우를 정의하여 버전 관리, 테스트, 재사용이 가능합니다.
강력한 스케줄링 - cron 표현식을 활용한 유연한 스케줄링과 자동 재시도 기능을 제공합니다.
시각적 모니터링 - 직관적인 웹 UI를 통해 워크플로우를 실시간으로 모니터링할 수 있습니다.
풍부한 생태계 - 다양한 Operator와 활발한 커뮤니티 지원으로 거의 모든 시스템과 통합 가능합니다.
확장성 - 분산 실행을 통해 대규모 데이터 파이프라인도 효율적으로 처리할 수 있습니다.
Airflow 도입 시 고려사항:
① 현재 시스템의 워크플로우 복잡도를 분석하고 적절한 Executor를 선택하세요.
프로덕션 환경에서는 반드시 PostgreSQL을 메타데이터 데이터베이스로 사용하세요.
③ DAG 설계 시 멱등성과 원자성을 반드시 고려하세요.
④ 모니터링과 알림 체계를 초기부터 구축하여 안정적인 운영을 보장하세요.
Airflow는 강력한 도구이지만 모든 문제의 만능 해결책은 아닙니다. 프로젝트의 요구사항을 정확히 파악하고 적합한 솔루션인지 신중하게 판단하는 것이 중요합니다. 이 글이 여러분의 Airflow 학습 여정에 좋은 출발점이 되길 바랍니다.
출처: 이 글은 Apache Airflow 공식 문서(https://airflow.apache.org/docs/)를 참고하여 작성되었습니다.

#5. 자주 묻는 질문 (FAQ)
1) Q: Airflow는 언제 사용하는 것이 좋나요?
A: Airflow는 복잡한 작업 의존성이 있는 데이터 파이프라인을 관리할 때 가장 효과적입니다. 예를 들어 매일 새벽 데이터를 추출하고, 변환한 후, 여러 데이터베이스에 적재하는 ETL 작업이나 기계학습 모델을 학습시키고 배포하는 워크플로우 등에 적합합니다. 단순히 몇 개의 cron job만 필요하다면 Airflow는 과할 수 있습니다.
. . . . .
2) Q: Airflow 학습에 얼마나 시간이 걸리나요?
A: Python 기초가 있다면 기본 DAG 작성까지는 1-2일 정도면 충분합니다. 하지만 복잡한 워크플로우 설계, 성능 최적화, 프로덕션 운영까지 마스터하려면 수주에서 수개월이 걸릴 수 있습니다. 공식 문서의 튜토리얼을 따라하면서 실습하는 것이 가장 효과적입니다.
. . . . .
3) Q: 프로덕션 환경에 Airflow를 배포할 때 주의할 점은?
A: 가장 중요한 것은 PostgreSQL을 메타데이터 데이터베이스로 사용하는 것입니다. SQLite는 개발용으로만 사용해야 합니다. 또한 Celery Executor나 Kubernetes Executor를 사용하여 확장성을 확보하고, 모니터링 시스템을 구축하며, 정기적인 백업 체계를 마련해야 합니다.
. . . . .
4) Q: DAG가 웹 UI에 나타나지 않아요.
A: 먼저 DAG 파일이 올바른 dags 디렉토리에 있는지 확인하세요. 그리고 Python 문법 오류가 없는지 확인하기 위해 터미널에서 직접 실행해보세요. Scheduler가 정상 동작 중인지도 확인이 필요합니다. 로그 파일을 확인하면 구체적인 오류 메시지를 볼 수 있습니다.
. . . . .
5) Q: Task가 계속 실패하는데 어떻게 디버깅하나요?
A: 웹 UI에서 해당 Task를 클릭하면 로그를 실시간으로 확인할 수 있습니다. 로그에서 오류 메시지를 찾아 원인을 파악하세요. 또한 airflow dags test 명령어를 사용하여 로컬에서 DAG를 테스트할 수 있습니다. Python 함수 내부에 print 문을 추가하면 디버깅에 도움이 됩니다.
. . . . .
6) Q: Catchup이 뭔가요? 왜 필요한가요?
A: Catchup은 과거 스케줄된 DAG 실행을 자동으로 수행하는 기능입니다. 예를 들어 start_date가 2024년 1월 1일이고 오늘이 3월 1일이라면, catchup=True면 1월 1일부터 오늘까지의 모든 스케줄이 실행됩니다. 대부분의 경우 catchup=False로 설정하는 것이 안전합니다.
. . . . .
7) Q: 여러 Task를 동시에 실행하려면 어떻게 하나요?
A: Task 의존성을 정의할 때 리스트를 사용하면 됩니다. 예를 들어 task_a >> [task_b, task_c]라고 하면 task_a 완료 후 task_b와 task_c가 동시에 실행됩니다. 단, airflow.cfg의 parallelism 설정이 충분히 높아야 실제로 병렬 실행됩니다.
. . . . .
8) Q: Airflow와 Apache Spark를 함께 사용할 수 있나요?
A: 네, 가능합니다. Airflow는 SparkSubmitOperator를 제공하여 Spark 작업을 쉽게 실행할 수 있습니다. 이를 통해 Airflow로 전체 워크플로우를 오케스트레이션하고, 대용량 데이터 처리는 Spark로 수행하는 아키텍처를 구축할 수 있습니다.
. . . . .
9) Q: Task가 실패했을 때 자동으로 알림을 받을 수 있나요?
A: 네, default_args에서 email_on_failure=True로 설정하고 email 주소를 지정하면 됩니다. 단, SMTP 설정이 airflow.cfg에 올바르게 되어 있어야 합니다. Slack이나 다른 메신저로 알림을 보내려면 커스텀 콜백 함수를 작성하거나 관련 Provider를 사용하면 됩니다.
. . . . .
10) Q: Airflow 대신 다른 도구를 고려해야 할 때는 언제인가요?
A: 실시간 스트리밍 처리가 필요하다면 Apache Kafka나 Apache Flink가 더 적합합니다. Airflow는 배치 처리에 최적화되어 있습니다. 또한 매우 단순한 스케줄링만 필요하다면 cron으로도 충분할 수 있습니다. 프로젝트 규모와 요구사항을 정확히 파악한 후 도구를 선택하는 것이 중요합니다.
긴 글 읽어주셔서 감사합니다.

끝.
반응형