Apache Airflow에 대해 알아보자

정성헌·2026년 4월 8일
post-thumbnail

데이터 파이프라인을 구축하고 운영하다 보면, 수많은 작업(Task)들의 순서를 제어하고 실패 시 재시도 처리 등을 관리해야 하는 상황에 직면하게 됩니다. 기존에는 운영체제의 Cron을 사용하여 스케줄링을 처리하는 경우가 많았으나, 작업 간의 복잡한 의존성을 관리하거나 모니터링하기에는 한계가 명확했습니다.

이러한 문제를 해결하기 위해 에어비앤비(Airbnb)에서 개발하여 오픈소스로 공개한 워크플로우 관리 플랫폼이 바로 Apache Airflow입니다. 오늘은 Airflow의 핵심 개념과 내부 아키텍처에 대해 정리해 봅니다.


1. Apache Airflow란?

Airflow는 복잡한 데이터 파이프라인을 파이썬 코드로 작성하고, 스케줄링 및 모니터링할 수 있는 플랫폼입니다. "Configuration as Code" 원칙을 따르기 때문에, 모든 워크플로우를 파이썬 스크립트로 정의할 수 있어 버전 관리 및 유지보수에 매우 유리합니다.

주요 특징

  • 동적 파이프라인: 파이썬 코드를 이용해 동적으로 파이프라인을 구성할 수 있습니다.
  • 확장성: 다양한 시스템(AWS, GCP, Hadoop 등)과 연동할 수 있는 수많은 플러그인과 오퍼레이터를 지원합니다.
  • 우수한 UI: 작업의 상태, 로그, 실행 시간 등을 웹 대시보드에서 직관적으로 파악할 수 있습니다.

2. 핵심 개념

Airflow를 다루기 위해 반드시 알아야 할 3가지 핵심 요소가 있습니다.

DAG (Directed Acyclic Graph)

Airflow에서 워크플로우를 구성하는 가장 기본이 되는 단위입니다. 수학적 개념인 '방향성 비순환 그래프'를 의미하며, 작업들이 실행되는 순서와 의존성을 정의하지만 절대 순환(Loop) 구조를 가지지 않는 것이 특징입니다.

Operator와 Task

  • Operator (오퍼레이터): 수행하고자 하는 작업의 '템플릿' 또는 '클래스'입니다. 어떤 작업을 할 것인지(예: 파이썬 함수 실행, Bash 명령어 실행 등)를 정의합니다. (ex. BashOperator, PythonOperator)
  • Task (태스크): 오퍼레이터가 DAG 내에서 인스턴스화되어 실제 실행을 위해 구체화된 객체입니다. DAG를 구성하는 하나의 노드(Node)가 됩니다.

3. Airflow 내부 아키텍처

Airflow가 어떻게 수많은 스케줄을 누락 없이 관리하고 실행하는지 이해하려면 내부 아키텍처를 살펴보아야 합니다. Airflow는 단일 프로그램이 아니라, 여러 컴포넌트가 유기적으로 통신하는 분산 시스템에 가깝습니다.

주요 컴포넌트

  1. Scheduler (스케줄러): 가장 핵심적인 데몬입니다. 주기적으로 DAG 폴더를 파싱하여 예약된 작업이 있는지 확인하고, 실행 조건이 충족된 Task를 실행 큐(Queue)에 넣습니다.
  2. Executor (익스큐터): 큐에 들어온 Task를 어떻게 실행할지 결정하는 메커니즘입니다. 로컬에서 프로세스를 띄울지(LocalExecutor), Celery를 통해 분산 워커로 보낼지(CeleryExecutor), Kubernetes Pod으로 실행할지(KubernetesExecutor)를 결정합니다.
  3. Worker (워커): Executor의 명령을 받아 실제 Task 작업을 수행하는 프로세스입니다.
  4. Metadata Database: DAG의 정의, 현재 상태, Task의 실행 이력 등 Airflow의 모든 상태 정보를 저장하는 RDBMS(PostgreSQL, MySQL 등)입니다.
  5. Web Server: Metadata DB에 저장된 상태 정보를 읽어와 사용자에게 웹 UI로 제공합니다.

4. Task의 생명 주기 (Lifecycle)

스케줄러에 의해 Task가 실행될 때, Task는 여러 상태(State)를 거치게 됩니다. 이 상태 변화를 이해해야 파이프라인 디버깅이 수월해집니다.

  • No status (None): 스케줄러가 인지하기 전의 초기 상태
  • Scheduled: 스케줄러가 실행 조건이 충족되었다고 판단한 상태
  • Queued: Executor에게 실행을 요청하여 큐에 대기 중인 상태
  • Running: Worker가 Task를 할당받아 실제로 실행 중인 상태
  • Success / Failed: 작업이 정상적으로 완료되었거나 오류로 종료된 상태

5. 강력한 모니터링 UI

작성한 코드(DAG)가 의도대로 동작하는지, 병목 현상이 발생하는 구간은 없는지 파악하는 것은 데이터 엔지니어링의 핵심입니다. Airflow는 이를 위해 다양한 View를 제공합니다.

  • Grid View: 과거의 실행 이력(DAG Runs)을 그리드 형태로 배열하여, 특정 날짜에 어떤 Task가 실패했는지 직관적으로 파악할 수 있습니다.
  • Gantt Chart: 작업들의 병렬 처리 상태와 소요 시간을 확인하여 파이프라인의 성능을 최적화(Tuning)할 때 유용합니다.

마무리

Airflow는 코드로 인프라와 워크플로우를 관리한다는 점에서 강력한 유연성을 제공합니다. 단, 구조가 복잡하여 러닝 커브가 존재하고 초기 세팅(Metadata DB, 메세지 브로커 등)에 비용이 든다는 점은 고려해야 합니다. 다음 포스팅에선 vscode에서 직접 DAG를 생성해보기 위해 docker-compose.yaml 파일를 이용하여 docker에 여러개의 컨테이너를 생성해 airflow에 필요한 각각의 프로그램을 설치해 실습해보겠습니다.

profile
develop myself

0개의 댓글