공부한 것 꼭꼭 씹어먹기

Airflow 시작하기 본문

소소한 개발 지식

Airflow 시작하기

젤라솜 2022. 10. 23. 18:00
반응형

요즘은 새로 시작해보는 툴이 갑자기 많아졌습니다. 저는 갑자기 airflow도 다뤄야만 합니다.

 

airflow는 무엇일까요?

에어플로우는 workflow management tool 입니다. 업무흐름을 관리하는 도구라는 뜻이죠. 아래 설명처럼 에어플로우는 프로그래밍 방식으로 워크플로우를 작성하고 스케줄링(예약)하고 관리(모니터링)하는 오픈 소스입니다.

 

Apache Airflow is an open source platform to programmatically author, schedule, and monitor workflows.

 

간단히 말해서, 코드로 업무를 자동화할 수 있는 툴입니다. 주로 데이터 분야에서 많이 쓰이는 데요, 예를 들면 매일 경쟁사 데이터를 우리 회사의 데이터베이스에 넣어야 한다면? 아마도 similarweb과 같은 경쟁사 분석 데이터 제공 회사로부터 raw데이터를 api로 받아오겠죠. 그 후에 그 데이터를 잘 가공해서 최종적으로 데이터 베이스에 로드해야 합니다. ETL(Extraction->Transformation->Loading)이라고 불리는 데이터 흐름의 과정을 자동화 해서 사람이 수동으로 할 필요없게 하는 툴입니다.

 

출처 : https://airflow.apache.org/docs/apache-airflow/stable/concepts/overview.html

 

 

에어플로우의 개괄적인 개념도 입니다. Scheduler는 에어플로우에서 가장 핵심적인 컴포넌트인데요. 예정된 workflow를 triggering 하기도 하고, executor가 다음 task를 실행할 수 있게 제출하기도 합니다. 이름 그대로 각 task들의 스케줄을 관리하는 매니저 역할이라고 보면 됩니다. 스케줄러와 붙어있는 Executor는 지금 running 중인 task를 핸들링합니다. 또한 어떤 환경에서 task가 실행될지에 대한 타입을 정의하는 역할을 합니다. 어떻게 task가 실행될지에 대한 정의를 하는 것이죠. Worker는 말 그대로 실제 수행을 하는 컴포넌트 입니다. Scheduler, Executor, Worker외에 Webserver와 Database가 있는데요. database에는 task, dag 등의 메타데이터 정보를 보관하는 곳입니다. webserver는 사용자가 dag의 상태나 로그, 그래프 등을 확인할 수 있는 UI를 제공합니다. 그렇다면 DAG는 무엇일까요? dag는 directed acyclic graph를 말합니다. 단방향 비순환 그래프를 뜻하지요.  task가 한 방향으로 흐르고 순환하지 않는다는 (되돌아가지 않는) 뜻입니다. 한 dag안에 각각의 task에 실행 순서를 정해주면 됩니다. 위에서 말한 데이터를 로드하는 스케줄을 예로 들면, 경쟁사 데이터를 받아오고 파이썬 판다스 등의 라이브러리로 데이터를 컨버팅 하고 회사 디비에 로드하는 것을 각각의 task라고 할 수 있습니다. 그리고 이 task들에게 순서를 부여하여 묶어서 실행 시간을 정해주면(예: 매일 오후 3시) 그것이 하나의 dag가 되는 것이죠!

 

또 하나 알아둬야 할 개념으로는 Operator가 있습니다. operator는 종류가 아주 다양합니다. 대표적인 빌트인 오퍼레이터는 다음과 같습니다.

  • BashOperator
  • PythonOperator
  • EmailOperator

차례대로 bash command를 실행하거나, 파이썬 코드를 실행하거나, 이메일을 보내는 기능을 가지고 있는데요. 이런 core operator외에 필요한 것은 https://airflow.apache.org/docs/apache-airflow-providers/operators-and-hooks-ref/index.html 에서 찾아볼 수 있습니다.  예를 들어, postgre DB와 연결을 하고 싶다면 PostgresOperator를 사용하면 되는 것이죠. 아주 개괄적으로 airflow에 대해 알아봤습니다. 나머지는 직접 해보면서 더 익힐 수 있을 것 같습니다.

 

 

반응형
Comments