쿼카러버의 기술 블로그

[Airflow] Airflow 온보딩 가이드: 뭐부터 배워야할지 학습 순서만 다룸 본문

[Infra & Server]

[Airflow] Airflow 온보딩 가이드: 뭐부터 배워야할지 학습 순서만 다룸

quokkalover 2025. 5. 9. 22:49

이 글을 적는 목적 :

사실 Airflow 개념 설명이나 이런 건 이미 너무 잘 정리되어 있고, 공식 Docs + GPT 활용하면 개념 학습은 훨씬 더 쉬울 거라고 생각한다.
다만 처음 접하게 될 경우 봐야 할 정보가 너무 많다 보니, 실질적으로 온보딩할 때 뭐에 집중해야 하는지 감을 잡는데 도움이 되기 위해 글을 작성했다.
 
이 글을 읽으면, 뭐부터 봐야하는지, 그리고 그 개념들을 왜 봐야하는지 간단하게 설명했으니 온보딩하기전에 한번쯤 참고해보는 것을 추천한다. 
 
보고나서 마음에 들었다면 내가 개인적으로 이왕 공부한거 나중에 보기 위해 정리한 개념 정리 문서도 있으니.. 봐주시면..

Airflow 개념 중요한 것들만 골라서 정리

 

 

Airflow의 본질: 데이터 워크플로우 자동화

Airflow는 시간에 맞춰 여러 단계의 데이터 작업을 자동으로 실행해주는 도구다. 단순히 일정에 맞춰 실행하는 cron이나 Jenkins와는 달리, 데이터 흐름 관리에 특화되어 있다.

 

Airflow가 해결하는 문제

매일, 매시간, 또는 특정 이벤트가 발생했을 때 실행해야 하는 수많은 데이터 처리 작업들이 있는데, 이런 작업들은 대부분 서로 연결되어 있다.

  • A 작업이 끝나야 B 작업을 시작할 수 있고
  • 때로는 여러 작업이 동시에 실행되어야 하며
  • 특정 조건에 따라 다른 경로로 진행해야 할 수도 있다

이렇게 시간에 따라 실행되면서 작업 간 의존성을 가진 데이터 처리 파이프라인을 관리하는 것이 Airflow의 핵심 기능이다.

 

왜 일반 스케줄러로는 부족한가?

작업을 그냥 순서대로 실행하는 것만 필요하다면 Jenkins나 cron 같은 도구로도 충분할 수 있다. 하지만 데이터 작업은 좀 더 복잡한 요구사항이 있다:

  1. 데이터 흐름 관리: 데이터는 한 작업에서 다음 작업으로 흘러가며 변환된다
  2. 조건부 실행: 데이터 상태나 외부 조건에 따라 워크플로우가 달라질 수 있다
  3. 모니터링과 재시도: 데이터 작업은 실패했을 때 적절한 대응이 중요하다

Airflow는 이런 복잡한 데이터 파이프라인 관리를 위해 다양한 기능을 제공한다.

 

Airflow의 강력한 기능 예시

 

데이터 전달: XCom을 사용하면 한 작업의 출력값(파일 경로, 처리 결과 등)을 다음 작업의 입력으로 바로 사용할 수 있다. 이게 왜 중요하냐면, 작업 간에 데이터를 주고받을 때 임시 파일이나 DB를 거치지 않고도 바로 전달할 수 있기 때문이다.
조건부 대기: Sensor 같은 특수 오퍼레이터를 쓰면 "특정 파일이 생성될 때까지 대기" 같은 조건부 실행을 쉽게 구현할 수 있다. 예를 들어:

  • FileSensor는 지정된 파일이 존재하는지 확인할 때까지 기다린다
  • S3KeySensor는 S3 버킷에 특정 객체가 나타날 때까지 대기한다

이런 기능들이 있어서 복잡한 데이터 의존성 관리가 훨씬 단순해진다.

 

필수 개념과 내가 제안하는 학습 순서

 

1. DAG (Directed Acyclic Graph)

DAG(Directed Acyclic Graph)는 DAG객체가 정의된 파이썬 스크립트다.
DAG가 중요한 이유는 Airflow에서 어떤 작업을 하려면 반드시 DAG 파일을 만들고, 그 안에 작업 순서를 정의해야 하기 때문이다. 아무리 간단한 작업이라도 예외는 없다. 그래서 Airflow의 모든 작업은 DAG 파일을 쓰는 것으로 시작된다. DAG는 단순히 작업 목록이 아니라, 작업 간의 관계와 실행 규칙을 모두 포함하는 완전한 워크플로우 설계도라고 볼 수 있다. DAG를 정의할 때는:

  • 실행 일정(스케줄)
  • 재시도 정책
  • 작업 간 의존성
  • 실패 시 동작

등을 함께 설정하게 된다. 이것이 DAG를 가장 먼저 이해해야 하는 이유다.

 

2. Task와 Operator

Operator는 간단히 말해 "Airflow를 통해 실행할 코드"다. Python 함수를 실행하거나, Bash 명령어를 실행하거나, SQL 쿼리를 날리는 등 "무슨 일을 할지"를 Operator라는 클래스로 정의한다.
DAG는 작업 흐름을 정의하고, 그 안에 Operator들이 들어가서 실질적인 작업을 수행하는 구조다.
Task는 간단히 말해 DAG 안에서 실행되는 Operator의 인스턴스다. 같은 PythonOperator를 사용해도 다른 함수를 실행하면 다른 Task가 된다.
더 자세한 내용은 별도 문서에서 다루므로, 여기서는 "DAG가 언제, 무엇을 할지 정의하고, Operator는 그 '무엇'의 구체적인 내용을 담당한다"는 핵심만 기억하자.

 

3. 실행 흐름 제어하기: 의존성과 스케줄링

DAG와 Task를 정의했다면, 이제 이들을 언제, 어떤 순서로 실행할지 제어해야 한다. 이는 의존성 설정과 스케줄링을 통해 이루어진다.

의존성(Dependencies)

Task 간의 실행 순서를 정하는 관계다. task_A >> task_B 같은 비트 시프트 연산자로 간단히 정의할 수 있다.

의존성은 단순히 순서만 정하는 게 아니라 더 중요한 역할을 한다:

  • 한 작업이 실패하면 그에 의존하는 다음 작업들은 실행되지 않는다
  • 병렬 실행이 가능한 작업들은 동시에 실행될 수 있다
  • 복잡한 분기 처리도 가능하다 (예: 조건에 따라 다른 경로로 실행)

이런 의존성 관리 덕분에 복잡한 데이터 파이프라인도 안정적으로 운영할 수 있다.

 

스케줄링(Scheduling)

DAG가 언제 실행될지 결정하는 부분이다. "매일 오전 9시" 같은 규칙을 cron 표현식으로 설정한다.
스케줄링은 단순히 언제 실행할지만 정하는 게 아니라, 데이터 처리의 시간적 측면을 전체적으로 관리한다:

  • 데이터 배치 처리의 주기를 결정하고
  • 비즈니스 요구사항에 맞게 워크플로우가 실행되도록 하며
  • 데이터 업데이트 시점과 보고서 생성 시점을 조율한다

의존성과 스케줄링은 밀접하게 연관되어 있으며, 함께 Airflow 워크플로우의 실행 흐름을 제어한다.

 

4. 로컬에 온보딩하기

공식 문서를 참고해 로컬 환경에 Airflow를 설치했다면, 생각보다 쉽게 시작할 수 있다:

  1. DAG 정의만 하면 된다: ~/airflow/dags 폴더에 Python 파일(.py)을 만들고 DAG를 정의하기만 하면 Airflow가 자동으로 인식해준다.
  2. 코드 위치는 자유롭다: 실제 실행할 함수나 코드는 dags 폴더 안에 직접 넣어도 되고, 외부 패키지로 만들어서 import해도 된다. import만 가능하다면 어디에 있어도 상관없다.
  3. 실행 확인이 중요하다: UI에서 DAG를 켜고(unpause), 개별 Task를 선택해 "Run" 버튼으로 바로 실행해볼 수 있다. 이렇게 작은 단위로 테스트하면서 이해도를 높이는 게 좋다.

처음에는 이론보다 직접 해보는 게 훨씬 효과적이다. 위에서 설명한 1, 2, 3번 영역의 개념이 어떻게 실제로 적용되는지 체험해보자.
특히 Airflow 2.0버전 이상부터 지원되는 XCom으로 task 간에 데이터를 주고받는 간단한 예제를 만들어보면 Airflow의 강력함을 직접 느낄 수 있다:

# XCom 예제: 첫 Task에서 생성한 값을 두 번째 Task에서 사용하기

@task
def generate_value():
    return {"count": 100, "date": "2023-01-01"}

@task
def use_value(value_dict):
    print(f"받은 값: {value_dict['count']}개, 날짜: {value_dict['date']}")

with DAG(...) as dag:
    value = generate_value()
    use_value(value)

한 Task의 출력이 다른 Task의 입력으로 자동 전달되는 예시다. 복잡한 데이터 처리 흐름에서는 이런 데이터 전달이 핵심이다.

 

5. 시스템 아키텍처 이해하기: Executor와 컴포넌트

기본 작동 방식을 이해했다면, 이제 Airflow가 시스템 수준에서 어떻게 동작하는지 알아볼 차례다.

 

Executor

Task를 어떻게 실행할지 결정하는 실행 엔진이다. 단일 프로세스부터 분산 시스템까지 다양한 환경에서 작업을 실행할 수 있게 해준다.
Executor의 종류에 따라 Airflow의 성능과 확장성이 크게 달라진다:

  • SequentialExecutor: 기본값이지만 한 번에 하나의 작업만 실행 가능하다 (개발용)
  • LocalExecutor: 로컬 머신에서 병렬 실행을 지원하며, 중소 규모에 적합하다
  • CeleryExecutor: 여러 워커 노드에 작업을 분산해서 대규모 처리에 적합하다
  • KubernetesExecutor: Kubernetes 환경에서 작업마다 Pod를 생성해 실행하는 방식으로, 리소스 활용이 효율적이다

워크로드가 커질수록 Executor의 선택이 정말 중요해진다. 적절한 Executor를 선택하면 같은 하드웨어로도 훨씬 많은 작업을 처리할 수 있다.

아키텍처 컴포넌트

Airflow 시스템을 구성하는 핵심 부품들인데, 각각의 역할을 이해하면 문제 해결이나 시스템 확장 시 도움이 많이 된다:

  • Scheduler: DAG와 Task를 스케줄링하고 실행을 트리거하는 핵심 요소
  • Webserver: UI를 제공하며 DAG와 Task 모니터링 및 관리 기능 제공
  • Worker: 실제 Task를 실행하는 프로세스 (Executor에 따라 구성이 달라진다)
  • Database: 메타데이터 저장소로 DAG, Task 실행 이력 등을 관리
  • DAG 파일: Python으로 작성된, 워크플로우를 정의한 파일들

이 컴포넌트들이 어떻게 상호작용하는지 이해하면 Airflow 설정과 운영이 한결 수월해진다.

 

학습 경로 요약

Airflow를 배우는 과정은 이런 순서로 진행하는 게 가장 논리적인 것 같다:

  1. DAG: 워크플로우의 기본 구조 이해하기
  2. Task와 Operator: 실제 작업 단위와 그 구w현 방법 이해하기
  3. 의존성과 스케줄링: 워크플로우 실행 흐름을 제어하는 방법 배우기
  4. 로컬 실행: 위 개념들을 한 번 실행해보면서 체득하기
  5. 시스템 아키텍처: Executor와 컴포넌트를 학습해 시스템 수준의 이해 높이기
    • 우리 회사는 Kubernetes Executor를 사용하고 있으니, 특히 이 부분은 잘 이해해두면 좋을 것 같다.

이 순서는 Airflow의 본질적인 목적에서 출발해서 점점 세부적인 구현 방식으로 확장되는 경로라고 생각한다. 이렇게 학습하면 Airflow의 개념을 차근차근 쌓아나갈 수 있고, 각 개념이 왜 필요한지, 어떻게 다른 개념과 연결되는지를 더 잘 이해할 수 있을 것이다.

 


위 글을 보고나서 마음에 들었다면 내가 개인적으로 이왕 공부한거 나중에 보기 위해 정리한 개념 정리 문서도 있으니.. 봐주시면..

Airflow 개념 중요한 것들만 골라서 정리

Comments