Airflow를 실행하기 위해, Airflow 코드를 정의할 폴더를 새로 만듭니다.
mkdir airflow && cd airflow
Airflow는 여러 가지 방법으로 설치할 수 있습니다.
(자세한 내용은 공식 문서를 참고하세요: https://airflow.apache.org/docs/apache-airflow/stable/installation/index.html)
이번 과정에서는 Docker 기반으로 설치할 예정입니다.
우선 docker-compose
파일을 다운로드합니다: https://airflow.apache.org/docs/apache-airflow/3.0.1/docker-compose.yaml
다운로드한 docker-compose.yaml
파일을 앞서 만든 airflow
폴더에 넣습니다.
docker-compose
파일 내용을 살펴보면, postgres
항목에 포트 설정이 되어 있지 않습니다.
이 부분은 직접 포트를 지정해 주면 됩니다.
저는 ports
항목을 postgres
용으로 따로 지정하지 않은 이유가 있습니다.
제 로컬 컴퓨터에서 이미 postgres
포트를 사용 중이어서, 포트 충돌을 방지하기 위해 해당 설정을 생략했습니다.
만약 로컬에서 postgres
포트를 사용하고 있지 않다면, 컨테이너와 호스트 모두 동일한 포트로 설정해도 무방합니다.
마지막으로, Airflow 실행에 필요한 폴더들을 생성합니다.
airflow
폴더에서 아래 명령어를 실행하면 됩니다:
mkdir -p ./dags ./logs ./plugins ./config
또한 .env
파일을 생성하여 AIRFLOW_UID
값을 정의해주어야 합니다.
아래 명령어를 실행하세요:
echo -e "AIRFLOW_UID=$(id -u)" > .env
이제 Airflow를 실행해봅시다:
docker compose up airflow-init
정상적으로 실행되면 여러 로그가 출력되면서 Airflow가 초기화됩니다.
이제 Airflow 환경이 준비되었습니다!
이제 실행해봅시다.
docker compose up
여러 초기화 작업이 와다다다 실행됩니다.
준비가 끝나면 아래 주소로 접속해보세요:
브라우저에 접속하면 아래와 같은 Airflow 웹 UI 화면이 나타납니다.
Airflow 웹 UI에 접속하면 로그인 화면이 나타납니다.
아이디와 비밀번호는 docker-compose.yaml
파일에 미리 정의되어 있습니다.
ID: airflow
PW: airflow
로그인에 성공하면 아래와 같은 Airflow의 웹 UI 화면이 나타납니다.
DAG 목록, 실행 상태, 스케줄 주기 등을 한눈에 확인할 수 있으며,
왼쪽 사이드바를 통해 DAG 생성, 로그 확인, 관리자 설정 등의 기능에 접근할 수 있습니다.
Dags 탭을 클릭한 후 들어가봅시다.
그리고 가독성이 저는 떨어져서 저걸 클릭했습니다.
처음 접속하면 아래와 같이 여러 DAG들이 목록에 표시됩니다.
이 DAG들은 모두 Airflow에서 제공하는 예제들입니다
예제 DAG들은 나중에 천천히 살펴보기로 하고,
우선 간단하게 현재 날짜를 출력하는 DAG를 하나 만들어보겠습니다.
DAG 정의는 airflow
폴더에 만들었던 dags
폴더 안에 Python 파일로 작성하면 됩니다.
예를 들어, 아래와 같이 python_print.py 파일을 생성해봅시다:
아래 예제와 같이 현재 날짜를 반환하는 코드를 만듭시다.
from __future__ import annotations
from datetime import datetime
# Operators; we need this to operate!
from airflow.providers.standard.operators.python import PythonOperator
# The DAG object; we'll need this to instantiate a DAG
from airflow.sdk import DAG
def print_now():
print(f"지금 시간: {datetime.now()}")
with DAG(
"python_print",
description="A simple tutorial python print DAG",
schedule="* * * * *",
start_date=datetime(2025, 6, 7),
catchup=False,
tags=["python_print"],
) as dag:
print_now = PythonOperator(
task_id="print_now",
python_callable=print_now,
)
파일 생성 후, 검색으로 찾으면 바로 싱킹돼서 내용이 나옵니다.
스케줄링을 통해 자동 실행되도록 설정해보겠습니다.
기존에는 CRON 표현식을 기준으로 매 분마다 실행되도록 설정했습니다.
DAG 목록에서 방금 만든 python_print
DAG을 클릭해 들어가면,
상단 메뉴에 여러 탭이 있습니다.
그중에서 Runs
탭을 클릭하면, 지금까지 이 DAG이 실행된 기록을 확인할 수 있습니다.
하나를 클릭해서 들어가면 Logs 에서 실행된 결과가 나옵니다.
여기 부분을 클릭해도 Log 를 볼 수 있습니다.
이번에는 스케줄링 방식이 아닌, 직접 실행(Trigger)하는 방식을 사용해보겠습니다.
Airflow 웹 UI에서 실행시키고 싶은 DAG 항목의 오른쪽을 보면,
작은 Trigger
버튼이 있습니다.
Single Run 을 클릭하고 Trigger 를 클릭하면 실행 됩니다.
이제 잘 manual 로 실행되는 게 보입니다.
참고로 manual 로 실행되는 것은 아래 이미지와 같이 플레이 표시처럼 보입니다.
참 쉽죠? 더 자세한 내용은 예제 Dag 들을 보고 공부하면 좋을 것 같습니다.