데이터 파이프라인은 원하는 결과를 얻기 위해 실행되는 여러 테스크 또는 동작으로 구성합니다.
가령 실시간 날씨 대시보드를 구현하려면,
1. API를 통해 날씨 예보 데이터를 가져옴.
2. 데이터 정제 변환
3. 변환된 데이터를 날씨 대시보드로 전송
파이프라인은 서로 다른 태스크로 구성되어 있으며, 정해진 순서대로 진행합니다.
앞선 태스크가 완료되지 않은 상태에서는 뒤의 태스크는 진행될 수 없고 무의미하기 때문입니다.
이러한 순서를 태스크간의 의존성이라고 하며 의존성을 명확하게 표현하는 방법이 그래프입니다.
방향성 그래프 DAG를 사용하여 태스크는 노드로 의존성은 간선으로 표현하여 태스크 파이프라인을 그릴 수 있습니다.
DAG는 파이프라인을 실행하기 위한 단순한 알고리즘을 제공합니다.
실행되면 완료 여부를 체크하며 대기열에 추가하여 다음 태스크를 진행하도록 순차적으로 진행됩니다.
그럼 지금까지 한 작업을 여러 태스크로 나눠 데이터 파이프라인을 구성하는 방법을 알아보았습니다.
그럼 여거시 Airflow가 어떻게 적용되는 지 알아봅시다.
Airflow를 사용하면 파이프라인이나 워크플로 태스크를 DAG로 정의할 수 있습니다.
Airflow는 DAG 구조를 식별하기 위해 코드를 파싱합니다.
DAG 파일에는 Airflow 실행방법과 시간 등을 정의한 몇가지 추가 메타테이터가 포함될 수 있습니다.
에어플로우는 data orchestrator 이다.
데이터를 원하는 시간에 원하는 순서, 방식으로 데이터를 다룰 수 있게 해주기 때문!
파이프라인 스케줄링 및 실행 기능이 있다.
이를 통해 Airflow가 파이프라인을 언제 실행할 것인지 DAG의 실행 주기를 정의할 수 있습니다.
- Python을 사용하여 DAG를 정의한다.
- 태스크간의 의존성, 순서 정의, 리소스 등을 자유롭게 정의하고 처리 가능
- 모니터링 등을 쉽게 할 수 있도록 UI 제공
- 다양한 외부 툴과 협업이 가능하다 (ex. db, slack 알림 등)
배치 지향 데이터 파이프라인을 구현하는데 적합하다.
- 파이썬 코드를 사용해서 파이프라인 구현, 파이썬으로 직접 구현 등 모두 가능
- 쉬운 확장성, 다양한 시스템과의 통합성
- 스케줄링 기법으로 파이프라인 정기적 실행, 점진적 처리로 전체 재실행이 아닌 부분 처리 가능
- 실행 결과를 모니터링할 수 있고 오류를 디버깅하기 편리함.
Airflow가 다양한 기능을 가지고 있지만 다음의 사례에서는 적합하지 않을 수 있습니다.
1. 스트리밍 워크플로우
Airflow는 반복적, 배치 태스크에 적합
2. 동적 파이프라인
구현은 가능하나... 웹 인터페이스는 DAG의 가장 최근 실행 버전의 정의만 표현