Post

[자동화] AirFlow 개념

[자동화] AirFlow 개념


기업에서 많이 사용하는 자동화 플랫폼 Airflow에 대해서 공부했는데요. 학부 때는 경험해 보지 못하는 플랫폼들을 많이 다룰 수 있어서, 업무 시간에 많이 공부하고 배워가는 중입니다. 첫 실무를 경험하고 계신다면 해당 게시글 참고하셔서 도움되시면 좋겠습니다 ( •̀ ω •́ )✧


1. AirFlow의 개념


AirFlow 란 AirBnB 에서 만든 workflow management tool 이다.

쉽게 말하면, 데이터를 추출하고, 변환하고, 정제하고, 저장하는 등 사용자가 원하는 작업 흐름을 Python 코드로 정의하면, 이를 자동으로 실행해주는 워크플로우(=특정 작업을 완료하기 위한 단계 또는 절차를 체계적으로 정리한 것) 스케줄링, 모니터링 시스템이다.

즉, 특정 작업을 정해진 순서와 조건에 따라 자동화해주는 플랫폼이라고 보면 된다.

약간, 매일 9시에 전날 대비 구매율이 얼마나 상승/하락 했는지 집계한 내용을 slack 봇으로 만드는 혹은 DB에 올려주는 프로세스 같은 것으로 이해하면 쉽다.


2. 각 구성 요소의 이해와 쓰임


Airflow는 여러가지의 구성요소를 가지고 있으며, 각각의 역할이 존재한다.

image.png

크게는 4가지 구성 요소(Webserver, Scheduler, Executor, Workers)로 이루어져 있으며, DAG (Directed Acyclic Graph)라는 것을 통해 workflow를 작성한다.

  • Webserver : Airflow의 웹 UI 서버이다.
  • Scheduler : 모든 DAG와 Task에 대하여 모니터링 및 관리하고, 실행해야할 Task를 스케줄링 해준다.
  • Database : Airflow에 존재하는 DAG와 Task들의 메타데이터를 저장하는 데이터베이스이다.
  • Worker : 실제 Task를 실행하는 주체이다. Executor 종류에 따라 동작 방식이 다양하다.
  • Executor: Scheduler로부터 실행할 Task를 받아 적절한 Worker에게 전달하고 실행을 지시하는 컴포넌트이다. 사용하는 Executor 종류에 따라 Task 실행 방식(로컬, 분산, 쿠버네티스 등)이 달라진다.
  • DAG : Directed Acyclic Graph로 개발자가 Python으로 작성한 워크플로우이다. Task들의 dependency를 정의해준다.

용어를 처음 보면, 이해가 잘 가지 않기 때문에 ^^;;.. 아래의 예시를 통해서 이해하면 쉽다.

구성역할요리 비유
DAG 파일무엇을, 어떻게 할지 정의레시피북
Scheduler언제 할지 판단요리 알람: “지금 요리 시작해!”
Executor누가 할지 할당주방장: “이 요리는 이 직원이 맡아”
Worker실제 실행요리사: 레시피 따라 요리함
Metadata DB결과 기록요리 일지: 성공/실패, 시간 등 기록
Webserver상태 확인대시보드: 어떤 요리가 언제 진행 중인지 보여줌

Airflow는 다음과 같은 플로우로 실행이 된다.

  1. 개발자가 Python으로 DAG을 작성하면
    • 사용자가 작성한 DAG이 매일 아침 9시에 실행되도록 설정돼 있음
  2. Airflow의 Scheduler가 해당 내용을 읽고 “언제 어떤 작업을 실행할지” 정한다.
    • Scheduler가 9시에 해당 DAG의 Task를 큐에 넣음
  3. 그 다음에는 Worker가 Task를 실제로 실행한다. (scheduler에서 요청을 queue로 넣으면 worker가 해당 내용을 직접 실행)
    • Worker가 큐를 보고, 거기에 있는 Task를 가져와서 실행
  4. 작업이 성공했는지 실패했는지 같은 실행 결과는 데이터베이스에 저장되고,
    • Python 코드나 SQL, 쉘 명령 등을 실제로 수행
  5. 사용자는 웹 화면(UI)을 통해 그 결과를 확인하게 된다.
    • 성공/실패 등의 결과를 DB에 저장


2-1) DAG(Directed Acyclic Graph)

레시피 북이다.

우선 DAG는 비순환 그래프로써 순환하는 싸이클이 없는 그래프이다. 즉, 노드와 노드가 단방향으로 연결되어 있어 그 노드로 향하게 되면 돌아오지 않는다는 특성을 가지고 있다. Airflow 에서는 이러한 DAG 를 이용해 Workflow 를 구성하여 어떤 순서로 task를 실행시킬 것인지 dependency 를 어떻게 표현할 것인지 등을 설정하게 된다. 이때, DAG를 정확하게 설정해야, task를 원하는 대로 스케쥴링할 수 있다.

마치 요리책처럼, 어떤 재료를 어떤 순서로 조리할지 Task 간의 의존성을 담고 있다.

image.png

Airflow Operator

1
2
3
4
with DAG(...) as dag:
    t1 = BashOperator(...)
    t2 = PythonOperator(...)
    t1 >> t2  # 실행 순서 정의: t1  t2

Airflow에서 Task 하나하나는 Operator로 만들어진다. Operator는 Airflow에서 개별 작업을 수행하는 도구이며, 해당 task에서 어떤 일을 할지를 정해주는 역할을 한다. 쉽게 말해 “이 Task는 Python 코드 실행해”, “이건 이메일 보내”, “이건 SQL 쿼리 돌려” 이런 걸 Operator로 지정하는 것이다.

Operator하는 일
BashOperator터미널에서 명령어 실행 (ls, echo, python script.py 등)
PythonOperatorPython 함수 실행
EmailOperator이메일 전송
MySqlOperatorMySQL 쿼리 실행
Sensor어떤 조건이 충족될 때까지 기다리는 역할 (예: 파일이 생길 때까지 대기)

Airflow는 기본적인 Operator 외에도, GCS, BigQuery, S3, Slack, Docker 등 다양한 클라우드/도구용 Operator 도 지원하고 있으며, Custom Operator도 만들 수 있다고 한다.


2-2) Scheduler

요리 알람: “지금 요리 시작해!”

Scheduler는 작성된 DAG을 보고, “어떤 DAG을 언제 실행할지” 판단해서 실행 시점을 정해준다. 예를 들어, 매일 오전 9시에 실행하도록 설정해두면 Scheduler는 9시에 해당 DAG의 Task들을 큐에 넣게 된다.


2-3) Executor

주방장: “이 요리는 이 직원이 맡아”

Executor는 Scheduler가 큐에 넣은 Task들을 보고, “이 Task는 어떤 Worker가 실행할지” 결정해주는 컴포넌트이다. 즉, Scheduler가 “이 Task를 실행해!” 라고 요청하면, Executor는 그 요청을 받아 적절한 방식으로 실행하게 해준다. 사용하는 Executor에 따라 실행 방식이 달라지고, 운영 방식도 달라진다.

Executor의 종류에 따라 작업 방식이 달라진다.

Executor특징설명
SequentialExecutor테스트용Task를 한 번에 하나만 실행. 초보자 실습에 적합.
LocalExecutor로컬 병렬 처리한 머신 내에서 여러 Task를 동시에 실행 가능. 개발 환경에서 자주 사용.
CeleryExecutor분산 처리여러 Worker 노드에 Task를 분산해서 실행. 실무에서 가장 많이 사용됨.
KubernetesExecutor클라우드 기반각 Task를 Kubernetes Pod로 띄워 실행. 확장성과 격리성이 뛰어남.

실무에선 보통 CeleryExecutor 또는 KubernetesExecutor 를 사용한다고 한다. 둘 다 Task를 분산 처리할 수 있어서, 대용량 파이프라인에 적합하다.


2-4) Worker

요리사: 레시피 따라 요리함

Worker는 Executor가 전달한 Task를 실제로 코드로 실행하는 주체이다. 즉, Python 함수든, Bash 명령이든, SQL 쿼리든 실제 작업을 수행하는 것이 Worker라고 이해하면 된다. 작업이 끝나면 성공/실패 여부도 함께 보고한다.


2-5) Metadata DB

요리 일지: 성공/실패, 시간 등 기록

Task 실행 결과(성공, 실패, 언제 시작했는지 등)는 전부 Metadata Database에 저장된다. Airflow는 기본적으로 SQLite를 사용하지만, 실무에서는 보통 PostgreSQL이나 MySQL을 쓴다. 이 데이터는 UI에서 상태를 시각화할 때 사용된다.


2-6) Webserver

Webserver는 사용자가 Airflow를 시각적으로 사용할 수 있게 해주는 웹 UI 서버이다. DAG 상태, Task 성공 여부, 실행 로그, 재실행 버튼 등 모든 정보와 기능을 한눈에 확인하고 조작할 수 있다.




코드 예제들을 보면서 공부하면 이해하는 데 보다 수월할 것 같아요!…ㅎㅎ 참고에 있는 내용들도 다 좋으니 한 번씩 보면 이해하는데 도움이 더 잘 될 것이라 생각합니다! (❁´◡`❁)



🔗 참고 링크

This post is licensed under CC BY 4.0 by the author.