Apache Airflow® 3 이제 사용 가능합니다!

2024년 9월 Airflow Summit에서 Apache Airflow 3.0®을 Airflow 프로젝트의 다음 큰 이정표로 삼겠다는 의도를 밝혔습니다. 이제 Airflow 3.0이 출시되었음을 기쁘게 발표합니다!

장장 4년의 준비 끝에 나온 대규모 릴리즈

Airflow 3.0은 Airflow 역사상 가장 큰 릴리즈입니다. 2.0은 2020년에 출시되었고, 이후 4년간 매분기 점진적인 업데이트와 릴리즈가 진행되어 2024년 4분기에 버전 2.10이 출시되었습니다. 월간 다운로드 수가 3천만 건 이상(2020년 대비 30배 이상 증가)이고, 80,000개 조직(2020년 25,000개 조직에서 증가)이 Airflow를 사용하고 있으며, 2.0 이후로 큰 인기를 얻고 있습니다.

지난 4년 동안 Airflow는 모든 규모의 조직 내에서 비즈니스에 중요한 데이터 워크플로를 지원하며 성장했습니다. ETL, ELT 및 Reverse ETL에서 시작해 Airflow 사용 사례가 기하급수적으로 증가하였으며, Airflow 사용자 중 30% 이상이 MLOps에 사용하고, 10%가 GenAI 워크플로에 사용합니다. Airflow 3는 이러한 사용 사례의 확장에 대한 반응이며, 기업 전반에 걸쳐 데이터 응용 프로그램 개발의 표준입니다.

다음은 몇 가지 주요 사항입니다:

  • Airflow 3는 데이터 전문가들에게 상당히 사용하기 쉬워졌으며, 이들의 주요 요청을 반영하여 Airflow에 중요한 변경 사항을 포함했습니다. 새로운 React 기반 UI, DAG 버전 관리 및 개선된 Backfill 지원과 같은 기능에 대한 초기 사용자 반응은 매우 긍정적입니다. 최근 Airflow 밋업에서 이를 시연했을 때 데이터 엔지니어들의 반응에 저는 매우 흥분했습니다.

  • Asset 지향 워크플로와 Task 지향 워크플로 간의 매끄러운 UI 전환은 매우 아름답습니다. Airflow는 다시 한 번 개발자가 제한 없이 원하는 대로 개발 및 탐색할 수 있도록 합니다.

  • 이벤트 기반 스케줄링의 도입으로 Airflow는 메시징 공급자와 매끄럽게 통합되고 Airflow 외부에서 일어나는 이벤트 및 데이터 자산 업데이트에 반응할 수 있게 되었습니다.

  • Task Execution Interface 및 Task SDK의 도입으로 대규모 보안 모델을 실행할 수 있어, 여러 클라우드, 하이브리드 클라우드 및 로컬 데이터 센터 배포 간에 안전하고 확장 가능한 실행을 가능하게 합니다.

이는 Airflow 커뮤니티 내 300명이 넘는 개발자가 몇 달간 열정적으로 함께 작업한 결과이며, 이 멋진 팀의 일원이 되어 자랑스럽습니다. 릴리즈의 추가 세부 정보는 다음과 같습니다.

많은 요청이 있었던 UX 기능

DAG 버전 관리

DAG 버전 관리는 Airflow 연간 설문 조사에서 가장 많이 요청된 기능입니다. Airflow 3에 구현된 대로 DAG는 시작 시점의 버전으로 완료되며, 실행 중에 새로운 버전이 업로드되더라도 문제가 없습니다. 이제 UI 내 모든 DAG 실행은 실행 시점의 DAG 버전과 관련되어 있으며, 이는 Task 구조, 코드, 로그 등을 포함합니다. 이 내용은 두 개의 AIP에 설명되어 있습니다: DAG 역사 개선 (AIP-65), DAG 번들 및 파싱 (AIP-66).

DAG 버전 관리 UI

Backfills 개선

또 다른 오랜 사용자 요청은 Backfills 지원 향상이었습니다. 머신러닝 문맥에서 주로 논의되지만, Backfills는 전통적인 ETL 및 ELT 사용 사례에도 적용됩니다. Airflow 3에서는 스케줄러 내에서 Backfills가 실행되어 제어, 확장성 및 진단이 개선되었습니다. 이제 Backfills는 UI 또는 API에서 시작할 수 있으며 UI에서 모니터링할 수 있습니다.

이는 “스케줄러 관리 Backfills” (AIP-78)의 일부로 정의되었으며, 아래는 예제 스크린샷입니다:

어디서나, 언제든지, 어떤 언어로든 실행

어디서든, 어떤 언어로든 실행

Airflow 3의 기본 목표는 어떤 환경에서든, 어떤 언어로든 실행이 가능하게 하는 것입니다. 중요한 구성 요소는 Task Execution Interface (AIP-72)로, Airflow는 이제 클라이언트-서버 아키텍처로 진화할 수 있게 해줍니다. 이는 Airflow 역사상 가장 중요한 아키텍처 변화 중 하나를 나타냅니다. 이 아키텍처는 Celery, Kubernetes, 그리고 로컬 Executor를 지원하며 새로운 기능도 가능하게 합니다. 이 변화의 구성 요소는 Task Execution Interface의 입력을 나타내는 API 서버입니다. 이 기본적인 기능은 다중 클라우드 배포 및 다중 언어 지원을 가능하게 합니다. Airflow 3 릴리즈는 기존 DAG의 하위 호환성을 가능하게 해주는 Python TaskSDK를 포함합니다. 추가 언어에 대한 TaskSDK는 곧 Golang부터 시작하여 릴리즈될 예정입니다.

에지 장치, 코어 데이터 센터 및 클라우드 외부에서 데이터 파이프라인을 실행할 수 있도록 하기 위해, Airflow 3에서는 Edge Executor (AIP-69)가 제공자 패키지로 사용할 수 있습니다. 이는 Task Execution Interface를 기반으로 한 점진적인 기능입니다. 초기 형태는 Airflow 2x를 기반으로 실험 모드로 릴리스되었으며, 이 Executor는 이제 Airflow 3 API 서버를 활용하도록 진화했습니다.

이벤트 중심 스케줄링 및 데이터 자산

Airflow 3는 Airflow 외부에서 발생하는 이벤트, 특히 외부 데이터 시스템에 의해 생성되거나 업데이트되는 데이터 자산에 Airflow가 반응할 수 있도록 하는 중요한 도약을 나타냅니다. 이는 데이터세트를 데이터 자산으로 진화시킴으로써 기반이 되었으며, 아래에 자세히 설명된 여러 AIP로 나뉘어 있습니다.

데이터세트를 데이터 자산으로 진화시키는 근본적인 변화는 “데이터 자산 소개” (AIP-74)의 일환으로 이루어졌습니다. 이는 DAG와 Python 데코레이터 구문을 사용하여 쉽게 자산을 정의할 수 있는 새로운 자산 중심 구문 (AIP-75)을 도입하는 것입니다. 이 릴리즈의 일부로 Watchers라는 개념이 도입되었으며, 이는 아래에 자세히 설명된 다른 기능에서 활용됩니다.

외부 이벤트 기반 스케줄링 (AIP-82)은 위에서 설명한 기본적인 데이터 자산 작업, 특히 Watchers를 기반으로 합니다. AIP에 정의된 초기 범위가 완료되었으며, 이제 “Common Message Bus” 인터페이스를 포함합니다. 이번 릴리즈에서는 “박스에서 꺼내 쓸 수 있는” 통합으로 AWS SQS에 대한 구현을 포함하며, AWS SQS에 메시지가 도착할 때 DAG가 트리거되는 것을 보여줍니다.

추론 실행과 하이퍼 파라미터 튜닝

많은 머신러닝 및 AI 엔지니어는 이미 Airflow를 ML/AI 운영에 사용 중이며, 특히 모델 훈련에 활용하고 있습니다. 그러나 추론 실행에 대한 도전과제가 있었습니다. Airflow를 향상시켜 비데이터 간격 DAG를 지원하도록 추가함으로써(inference execution을 위한) 중요한 변화를 가져옵니다. 이는 “DAG 실행에서 실행 날짜 고유 제한 제거” (AIP-83) 작업의 일환으로 다뤄집니다.

보안 및 사용성 개선

UI 현대화

Airflow 3의 일환으로 Airflow UI는 완전히 새로 작성되었으며, 자산 지향 워크플로와 Task 지향 워크플로를 매끄럽게 결합하는 사용자 경험을 획기적으로 개선했습니다. 이는 개발자가 "정확한 방법"에 대해 의견을 갖지 않고 원하는 방식으로 DAG를 작성할 수 있게 하는 엄청난 개선입니다.

Airflow 3.0의 새로운 UI 화면

문서의 스크린샷에서 더 많은 것을 확인할 수 있습니다.

React와 FastAPI를 기반으로 다시 만드는 것은 큰 프로젝트였으며 아래에 자세히 설명된 몇 가지 AIP로 나뉘었습니다.

새 UI의 기반은 REST API와 UI 운영을 위한 내부 API 세트입니다 (AIP-84). 이 API는 위에 설명된 태스크 실행 프레임워크의 일부로 API 서버에서 제공됩니다.

Airflow 3.0 UI는 크게 개선되었으며, 그리드 및 그래프 보기 전반에 걸쳐 매우 세련된 사용자 경험 워크플로를 포함합니다. DAG와 자산 간의 상호작용도 더욱 효율적입니다. 사용자 경험은 항상 진행 중인 작업이며 여러분의 피드백을 매우 소중히 평가합니다. 이는 현대적 웹 애플리케이션 제안서 (AIP-38)의 일부로 매우 자세하게 다뤄집니다.

이 프로젝트의 일환으로 Flask AppBuilder는 이제 별도의 제공자 패키지로 이동되었으며, 더 이상 Core Airflow 패키지의 일부가 아닙니다. 이는 보안 및 유지보수 업데이트 프로세스를 더 쉽고, 하위 호환성을 유지하면서 쉽게 만듭니다. 이는 “Flask App Builder를 코어 종속성에서 제거” 제안서 (AIP-79)의 일부로 문서화되어 있습니다.

보안

Task Execution Interface와 API 서버의 주요 이점은 Task 격리입니다. 이는 여러 팀이 Airflow 배포를 공유하는 경우 더 나은 보안 입지를 위해 간혹 Airflow 엔터프라이즈 배포에서 요청된 것입니다. 자세한 요구사항이 파악됨에 따라 더 많은 보안 및 권한 패턴이 이 기반 위에 개발될 수 있습니다.

CLI 개선 및 유지보수 부담을 줄이고 CLI가 Airflow API를 사용하여 통합하도록 하는 것은 Airflow의 중요한 진화입니다. 이제 코어 Airflow CLI를 두 부분으로 분리했습니다. 첫 번째는 로컬 개발 및 하위 호환성을 위한 것이고 두 번째는 API를 사용한 원격 액세스를 위한 것입니다. 두 번째는 Core Airflow와 함께 선택적으로 설치할 수 있는 새로운 제공자 패키지 "airflowctl"이 될 것입니다. 이는 “API 통합을 통한 CLI의 향상된 보안” 제안서 (AIP-81)의 일부로 더 자세히 문서화되어 있습니다.

놀라운 커뮤니티

이번 릴리즈는 위에 나열된 AIP를 이끈 주요 기여자들의 영감과 기술적 리더십 없이는 불가능했을 것입니다. 여기서 모든 분들께 감사드립니다: Ash Berlin-Taylor, Brent Bovenzi, Bugra Ozturk, Constance Martineau, Daniel Standish, Jed Cunningham, Jens Scheffler, Kaxil Naik, Pierre Jeambrun, Vincent Beck, Vikram Koka. 또한 중요한 개발 인프라와 퍼키징 작업을 해준 Jarek Potiuk, 그리고 필수 제공자 변경사항을 연준하게 도와준 Elad Kalif에게 감사드립니다. 사용자들이 Airflow 3으로 쉽게 업그레이드할 수 있도록 업그레이드 유틸리티 작업을 해준 Wei Lee와 Ankit Chaurasia를 인정하고자 합니다.

마지막으로 릴리즈 관리를 맡아준 Jed Cunningham과 Kaxil Naik에게 큰 경의를 표합니다!

전 세계 300명 이상의 개발자가 이 릴리즈를 현실로 만드는데 기여해주셨습니다. 모든 기여자들께 감사드리며, 이들은 다음과 같이 알파벳순으로 나옵니다:

  • Aakcht
  • Aaron Chen
  • Abhishek
  • Adam Turner
  • Adan
  • Aditya Yadav
  • Adrian Lazar
  • Adrian Perea
  • Ajit J Gupta
  • Albert Okiri
  • Alex Waygood
  • Alexander Millin
  • AlteredOracle
  • Amar Prakash Pandey
  • Amir Mor
  • Amogh Desai
  • Amol Saini
  • Anakin Skywalker Pactores
  • Andor Markus
  • Andre Miranda
  • Andres Lowrie
  • Andrew Arochukwu
  • Andrew Stein
  • Andrii Abramov
  • Andrii Korotkov
  • Andrii Yerko
  • Ankit Chaurasia
  • Anthony Lin
  • Antony Southworth
  • Aritra Basu
  • Arjun Pathak
  • Arnel Jan Sarmiento
  • Arnout Engelen
  • Artem Suslov
  • Arthur Braveheart
  • Artour
  • Artur Skarżyński
  • Arunav Gupta
  • Aryan Khurana
  • Ash Berlin-Taylor
  • AshKatzEm
  • AutomationDev85
  • Avihais12344
  • Azhar Izzannada E
  • Baitur Ulukbekov
  • Balthazar Rouberol
  • Bartosz Jankiewicz
  • Bas
  • Ben Chen
  • Benoit Perigaud
  • Biswamitra Biswas
  • Bjorn Olsen
  • Bluefox9x5
  • Bohdan Udovenko
  • Bonnie Why
  • Boris Morel
  • Bowrna
  • Brent Bovenzi
  • Bugra Ozturk
  • Błażej Tecław
  • Castle Cheng
  • Chris Luedtke
  • Christian Yarros
  • Christos Bisias
  • Collin McNulty
  • Computer Network Investigation
  • Constance Martineau
  • D. Ferruzzi
  • DShi
  • Daniel Gellert
  • Daniel Imberman
  • Daniel Standish
  • Daniel van der Ende
  • Danish Amjad
  • Danny Liu
  • David Blain
  • Derek
  • Detlev V.
  • Dewen Kong
  • Dheeraj Turaga
  • Diogo Rodrigues
  • Dmitry Astankov
  • Dmitry Pustoshilov
  • Dominic Leung
  • Dong-yeong0
  • Doug Guthrie
  • Dylan Melotik
  • Elad Kalif
  • Eldar Kasmamytov
  • Ephraim Anierobi
  • Eric
  • Everton Seiei Arakaki
  • Farhan
  • Fedor Kobak
  • Felix Uellendall
  • Fred Thomsen
  • Fully.is(풀리)
  • GPK
  • Gagan Bhullar
  • Geonwoo Kim
  • GlenboLake
  • Gopal Dirisala
  • Gregory Borodin
  • Guan Ming(Wesley) Chiu
  • Guangyang Li
  • Guillaume Lostis
  • Hari Selvarajan
  • HassanAlahmed
  • Hojin Jun
  • Howard Yoo
  • Huanjie Guo
  • Hung
  • Hussein Awala
  • Hyunsoo Kang
  • Ian Buss
  • Idris Adebisi
  • Igor Kholopov
  • IlaiGigi
  • Indrale Dnyaneshwar
  • JISHAN GARGACHARYA
  • Jaejun
  • Jake Ferriero
  • Jake Roach
  • Jakub Dardzinski
  • James Chaldecott
  • James Regan
  • Jarek Potiuk
  • Jasmin Patel
  • Jason
  • Jed Cunningham
  • Jeff Harrison
  • Jens Scheffler
  • Jianzhun Du
  • Jimmy McBroom
  • Joao Amaral
  • João Pedro M Miguel
  • Joel Labes
  • Joey Cumines
  • Joffrey Bienvenu
  • John Bampton
  • John C. Merfeld
  • Johnny1cyber
  • José Joaquín Virtudes Castro
  • Joseph Ang
  • JoshuaXOng
  • Josix
  • Julian Maicher
  • Kacper Kulczak
  • Kacper Muda
  • Kalyan R
  • Kamil Breguła
  • Karen Braganza
  • Karthik Dulam
  • Karthik Ravi
  • Karthikeyan Singaravelan
  • Kaxil Naik
  • Kevin Allen
  • Kim
  • Kris
  • Kunal Bhattacharya
  • LIU ZHE YOU
  • Lennox Stevenson
  • Linh
  • Lorin Dawson
  • Lou :sparkles:
  • Lucy Hu
  • Lukas Mikelionis
  • Luyang Liu
  • Lyndon Fan
  • M. Olcay Tercanlı
  • Maciej Obuchowski
  • Madison Swain-Bowden
  • Maksim
  • Marcelo Trylesinski
  • Marcos Marx
  • Maria
  • Mark Andreev
  • Mark H
  • Matt Burke
  • Matt Dupree
  • Maxim Martynov
  • Mayuresh Kedari
  • Mehul Goyal
  • Mike
  • Mike Beckhusen
  • Mikhail Dengin
  • MishchenkoYuriy
  • Muhammad Hanif Mohamad Musa
  • Myles Hollowed
  • Narendra-Neerukonda
  • Natsu
  • Nikita
  • Niko Oliveira
  • Nishant Gupta
  • Nitesh Kumar Dubey Samsung
  • Nitochkin
  • Oleg Ovcharuk
  • Oleksandr Slynko
  • Omkar P
  • Owen Leung
  • Pandycool
  • Pankaj Koti
  • Park Jiwon
  • Pavan Sharma
  • Peng-Jui Wang
  • Peter Debelak
  • Phani Kumar
  • Pierre Jeambrun
  • Po-Yu Hsieh
  • Prajwal7842
  • Pratiksha
  • Purna Chander
  • Rafa
  • Rahul Madan
  • Rahul Vats
  • Ramit Kataria
  • Rishabh Srivastava
  • Rushabh Garambha
  • Ryan Eakman
  • Ryan Hatter
  • Rytis Ulys
  • SAI GANESH S
  • Sam Lendle
  • SamLiaoP
  • Saumil Patel
  • SaurabhhB
  • Sean Gabriel Bayron
  • Sean Rose
  • Sebastian Daum
  • SeonghwanLee
  • Shahar Epstein
  • Shahbaz Aamir
  • Shoaib UR Rehman
  • Shubham Raj
  • Simon Sawicki
  • Siva Kumar Edupuganti
  • Sneha Prabhu
  • Sooter Saalu
  • Srabasti Banerjee
  • Stefan Keidel
  • Steven Loria
  • Steven Shidi Zhou
  • Stijn De Haes
  • Success Moses
  • TakawaAkirayo
  • Tamara Janina Fingerlin
  • Tamas Palinkas
  • Tatiana Al-Chueyr
  • Topher Anderson
  • Tzu-ping Chung
  • Usiel Riedl
  • Utkarsh Sharma
  • Valentyn
  • Venkat VJ
  • Vikram Koka
  • Vikram Medabalimi
  • Vikramaditya Gaonkar
  • Vincent
  • Vincent Kling
  • VladaZakharova
  • Waldemar Hummer
  • Wang Ran (汪然)
  • Wei Lee
  • Wojciech Szlachta
  • Wonseok Yang
  • Yeonguk
  • Yohei Kishimoto
  • Youngha, Park
  • Yuan Li
  • Zach Liu
  • Zhen-Lun (Kevin) Hong
  • althati
  • ambikagarg
  • atrbgithub
  • awdavidson
  • codecae
  • dan-js
  • darkag
  • davidfgcorreia
  • dominikhei
  • ellisms
  • enisnazif
  • fritz-astronomer
  • gaurav7261
  • geraj1010
  • got686-yandex
  • harjeevan maan
  • harry.shi
  • hikaruhk
  • hprassad
  • ipsatrivedi
  • jaejun
  • jj.lee
  • jonhspyro
  • kanagaraj
  • kandharvishnu
  • leoguzman
  • lucasmo
  • luoyuliuyin
  • mahdi alizadeh
  • majorosdonat
  • max
  • mayankymailusfedu
  • michaeljs-c
  • morooshka
  • ninad-opsverse
  • olegkachur-e
  • paolomoriello
  • perry2of5
  • pgvishnuram
  • phi-friday
  • rahulgoyal2987
  • raphaelauv
  • rgriffier
  • rom sharon
  • saucoide
  • sbock-slack
  • sc-anssi
  • seyoon-lim
  • simonprydden
  • skandala23
  • sonu4578
  • suyesh-amatya
  • svellaiyan
  • tnk-ysk
  • uzhastik
  • vatsrahul1001
  • vfeldsher
  • xavipuerto
  • xitep
  • yangyulely
  • yunchi
  • 鐘翊修
  • 김영준

다음 계획

여러분의 피드백을 받고 싶습니다. 릴리즈를 사용해보고, 이슈를 열고, PR을 제출하거나, Airflow 개발자 목록, Slack, GitHub에서 대화에 참여해 주세요.
함께 데이터 오케스트레이션의 미래를 만들어 나갑시다.


본 글은 Apache Airflow 블로그 글을 GPT 모델을 활용하여 번역한 내용입니다. 따라서 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다.
관심있는 내용이시라면 원문도 함께 참고해주세요! https://airflow.apache.org/blog/
읽으시면서 어색하거나 잘못된 내용을 발견하시면 댓글로 알려주시면 감사드리겠습니다.

1개의 좋아요

메이저 버전 업그레이드라 그런거 확실히 변화가 크네요 :eyes:

Airflow 2.대에서 3버전으로 업그레드 후, dag-processor부분에서 메모리 누수가 생기는 이슈가 있는데 3.0.2버전에 문제를 해결한 커밋이 올라가니 혹시나 2버전에서 3버전 올리신 분들은 참고해주세욤:+1:

1개의 좋아요