Airflow
Apache Airflow는 반복적으로 실행되는 일련의 작업들의 묶음(워크플로우 혹은 파이프라인이라고 합니다.)을 스케줄링 하고 모니터링하는 도구
입니다. 처리하려는 큰 틀에서의 작업(DAG)과 그것을 이루는 작은 단위의 작업(TASK) 들을 구조화하고, 이들간의 순서나 의존성을 부여할 수 있습니다. 그리고 작업이 특정 조건에 따라 실행되도록 스케줄링 하고, Web UI를 통해서 작업 상태를 모니터링 할 수 있습니다.
Airflow가 데이터 분석을 해주는 도구로 잘못 알려지는 경우도 있는데요, 그건 아닙니다. 데이터와 관련된 작업, 예를 들어 데이터 수집, 전처리, 머신러닝 파이프라인 등의 작업이 일련의 흐름과 반복성을 가지기 때문에 이를 관리하고 모니터링 하는 도구로 Airflow를 많이 사용할 뿐이지, Airflow가 데이터 분석을 해주는 도구는 아닙니다.
그렇다고 하더라도 Airflow는 웹 UI를 제공하여 직관적으로 데이터 관련 작업을 파악하고, 관리할 수 있다는 장점과, Python 기반으로 원하는 작업을 유연하게 정의할 수 있다는 확장성이 있어 데이터 사이언티스트나 머신러닝 개발시에 많이 사용됩니다.
이제부터 여러 번에 걸쳐 포스팅할 Airflow 시리즈를 통해 Airflow의 개념과 기본적인 사용 방법에 대해서 살펴보도록 하겠습니다.
Airflow의 기능과 주요 특징
1. 작업 스케줄링 및 자동화
Airflow를 사용하면 특정 시간, 주기에 따라 반복적으로 작업을 실행하거나 특정 조건에 따라 작업이 실행되게 할 수 있습니다. 기존에는 Cron Job 혹은 프로그래밍 언어에서 제공하는 스케줄링 기능을 이용해서 구축해야 했지만, Airflow는 보다 직관적이고 간단한 방식으로 스케줄링을 할 수 있습니다.
2. 모니터링
Airflow는 Web UI를 통해 작업의 흐름과 작동 현황, 성공과 실패 여부를 한 눈에 파악할 수 있습니다. 또한 Web UI에서 작업을 수동으로 실행시킬 수도 있습니다.
3. 작업 간 의존성 관리와 순서 파악
Airflow는 작은 단위의 작업(Task)들과 이들로 이루어진 일련의 작업 묶음(DAG)으로 쉽게 작업 워크플로우를 구축할 수 있게 합니다. Airflow에서 제공하는 기능을 통해 수동으로 의존성을 관리하는 것보다 훨씬 직관적이고, 효율적으로 워크플로우를 구성할 수 있습니다.
4. 작업 실패 시 후속 조치와 알림
Airflow는 작업이 실패했을 때 자동으로 재시도하는 기능을 제공합니다. 또한 작업 실패 이력이 남고, 로그를 남길 수 있기 때문에 DAG 내 어떤 Task 에서 작업이 실패했는지, 왜 실패했는지에 대한 디버깅이 수월합니다.
또한 이메일이나 Slack 등의 알림 시스템과 연동하면 작업의 상태나 실패 여부를 실시간으로 확인할 수도 있습니다.
5. 병렬 처리
Airflow는 여러 작업을 동시에 실행하는 병렬 처리를 지원합니다. 또한 다른 곳에 있는 여러 자원들을 유기적으로 사용하는 분산 처리 또한 지원하므로, 대규모의 워크플로우를 관리하는 데에도 적합합니다.
6. 외부 서비스와의 연동
Airflow는 AWS, Google Cloud, Spark, Haddop, Kubernetes등 다양한 서비스들과 쉽게 연동할 수 있도록 설계되어 있습니다.
7. 라이선스
Airflow는 Apache2.0 라이선스를 적용한 오픈소스 프로젝트로, 누구나 자유롭게 사용하고 수정할 수 있습니다.
비교표 - Airflow 없이 운영 vs Airflow 사용
구분 | Airflow 없이 수작업 | Airflow |
---|---|---|
스케줄링 | 각 작업을 Cron Job으로 예약 | Airflow의 스케줄 도구를 이용 |
모니터링 | 시각적인 모니터링이 어려움 | Web UI를 통한 작업 현황 모니터링 |
작업간 의존성 | 코드로 의존성을 관리해 복잡함 | DAG, TASK 간 명료한 의존성 설정 |
작업의 순서 | 코드 내의 순서를 파악하기 어려움 | 작업 워크플로우를 DAG로 정의 |
작업 실패 시 | 수동으로 로그 확인 후 재실행 | 자동 재시도, 로그 확인 용이 |
병렬 처리 | 수동으로 병렬 처리 구성 | 병렬 처리 지원 |
Comments