알아볼 내용

  • Airflow의 아키텍처
  • Scheduler, Webserver, Executor, Metadata DB 등의 역할

1. Airflow 아키텍처

Airflow는 데이터 파이프라인을 DAG (Directed Acyclic Graph)로 정의하고, 이를 안정적으로 실행·모니터링하는 플랫폼이다.

Airflow를 이해하기 위해서 알아야할 구성 요소는 다음과 같다

  • Dag-processor
  • Scheduler & Executor
  • Webserver
  • Metadata DB

전체 아키텍처를 그림처럼 단순화하면 다음과 같다
(로컬 머신에서 사용하는 예시라고 보면 된다)
1


2. 구성 요소 역할 이해

필수 구성 요소 (Required Components)

Scheduler
  • 스케줄된 workflow를 트리거하고, 실행 가능한 Task를 Executor에 제출하는 지휘자 역할  
  • Executor : Task를 실제로 실행하는 역할을 하는 컴포넌트로 Scheduler가 실행할 작업을 결정하면, Executor가 해당 작업을 실제로 실행 환경 (로컬, 원격 등)에서 처리
    • LocalExecutor
      • 작업을 Airflow 스케줄러가 실행되는 로컬 머신에서 병렬로 실행
      • 장점 : 설정이 간단, 소규모 환경이나 테스트에 적합
      • 단점 : 확장성 제한적, 대규모 작업에 부적합
    • CeleryExecutor
      • Celery 분산 작업 큐를 사용하여 여러 worker에서 작업을 병렬로 실행
      • 장점 : 확장성 뛰어나고 여러 서버에 작업 분산 가능
      • 단점 : Celery 및 브로커 (Redis, Rabbit MQ 등) 설정이 필요해 복잡도 높음
    • KubernetesExecutor
      • 각 작업을 Kubernetes 클러스터의 개별 Pod로 실행
      • 장점 : 격리성, 확장성, 자원 관리에 뛰어나고 클라우드 환경에 적합
      • 단점 : kubernetes 환경이 필요하며, 설정이 복잡할 수 있음
    • SequentialExecutor
      • 한 번에 하나의 작업만 실행
      • 장점 : 매우 단순하며, 개발/테스트 환경에 적합
      • 단점 : 병렬 실행이 불가능해 실사용에 부적합
  • Multi-Executor 설정도 가능 (+2.10.0)
    • 각 작업이나 DAG 별로 사용할 Executor 지정 가능
Dag-Processor
  • DAG 파일을 파싱해 직렬화한 후 Metadata DB에 저장
  • 두 가지 요소
    • DagFileProcessorManager : DAG 파일을 주기적으로 확인하고, 어떤 파일을 파싱할지 결정하는 메인 프로세스
    • DagFileProcessorProcess : 실제로 개별 DAG 파일을 파싱하여 DAG 객체로 변환하는 프로세스
  • 기존에는 Scheduler에 포함되어 있었으나 Scheduler가 DAG을 직접 파싱하지 않고, 더 가볍게 실행에만 집중할 수 있도록 분리된 프로세스  (+3.0.0)
Webserver (apiserver)
  • DAG과 Task 상태를 UI로 시각화하고, 직접 트리거하거나 디버깅할 수 있는 인터페이스 제공  
  • DAG 그래프, 트리 뷰, 로그 열람, 재실행 트리거 등 운영 편의성을 크게 높여줌  
Metadata DB
  • 모든 DAG, Task, 실행 상태, 로그 위치, XCom, Variable, Connection 등을 저장하는 데이터베이스
  • Scheduler, Webserver, Worker 모두 이 DB를 중심으로 상호작용  
  • PostgreSQL, MySQL을 공식적으로 지원
DAG 파일 폴더
  • DAG 정의를 담은 파이썬 파일들이 모여 있는 디렉터리  
  • Scheduler와 Dag-Processor가 이 폴더를 읽어 어떤 태스크를 언제 실행해야 하는지 판단  

선택 구성 요소 (Optional Components)

아래 요소들은 더 복잡하거나 대규모 환경에서 확장성과 성능을 높이기 위해 사용할 수 있는 추가적인 컴포넌트들이다

Worker
  • Scheduler가 넘겨준 태스크를 실제로 실행하는 주체  
  • 기본 설치에서는 Scheduler 프로세스 안에서 실행되기도 하지만, CeleryExecutor나 KubernetesExecutor 환경에서는 별도 프로세스로/Pod로 분리되어 확장성 확보  
Triggerer
  • Deferred Task를 처리하는 컴포넌트
  • 예시
    • 외부 API에서 특정 이벤트가 발생할 때까지 대기하다가 실행
    • 외부 스토리지(예: S3, GCS)에 파일이 업로드될 때까지 대기하다가 실행
  • asyncio 이벤트 루프 기반으로 동작하며, 지연 실행 태스크가 없으면 구동하지 않아도 됨  
  • Deferral Operator와 함께 쓰일 때만 유용  
  • 비동기 작업 처리로 리소스 효율성을 높일 수 있음
Plugins 폴더
  • Airflow의 기능을 확장하기 위한 방법 (외부 패키지 설치와 유사)  
  • Scheduler, Dag-Processor, Triggerer, Webserver가 이 폴더의 내용을 읽어 기능을 확장할 수 있음

Footnotes

  1. https://www.linkedin.com/posts/hyunsoo-ryan-lee_apache-airflow-30-%ED%8A%B9%EA%B0%95-%EC%9E%90%EB%A3%8C-%EB%AC%B4%EB%A3%8C-%EA%B3%B5%EC%9C%A0-%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94-activity-7366408880530100224-ksr0?utm_source=share&utm_medium=member_desktop&rcm=ACoAADPgNGEBpP3LMMzqA5o7c4gzpHxl6U5K-os