회원가입

[Airflow] Airflow 실습

Beany 2025-06-07

ChatGPT 요약

Airflow를 Docker를 통해 설치하는 방법을 설명합니다. 먼저 Airflow 프로젝트 폴더를 만들고, Docker Compose 파일을 다운로드하여 설정합니다. 필요한 폴더 구조와 환경 변수를 설정한 후, Airflow를 초기화하고 실행합니다. 웹 UI에 접속 후 로그인하여 DAG 목록을 확인할 수 있으며, 간단한 DAG를 작성해 스케줄링 및 트리거 방식으로 실행하는 방법도 소개합니다.

Airflow 실습


 

Airflow 설치

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 접속

여러 초기화 작업이 와다다다 실행됩니다.

준비가 끝나면 아래 주소로 접속해보세요:

http://localhost:8080/

 

브라우저에 접속하면 아래와 같은 Airflow 웹 UI 화면이 나타납니다.
Airflow 웹 UI에 접속하면 로그인 화면이 나타납니다.


아이디와 비밀번호는 docker-compose.yaml 파일에 미리 정의되어 있습니다.

  • ID: airflow

  • PW: airflow

 

로그인에 성공하면 아래와 같은 Airflow의 웹 UI 화면이 나타납니다.
DAG 목록, 실행 상태, 스케줄 주기 등을 한눈에 확인할 수 있으며,
왼쪽 사이드바를 통해 DAG 생성, 로그 확인, 관리자 설정 등의 기능에 접근할 수 있습니다.

 

Dags 탭을 클릭한 후 들어가봅시다.

 

그리고 가독성이 저는 떨어져서 저걸 클릭했습니다.

 

처음 접속하면 아래와 같이 여러 DAG들이 목록에 표시됩니다.
이 DAG들은 모두 Airflow에서 제공하는 예제들입니다

 

 

Airflow Dag 정의

예제 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 들을 보고 공부하면 좋을 것 같습니다.

0 0
꿀팁-개발
개발 중에 발견한 다양한 꿀팁들을 모아 두어, 미래의 나 또는 다른 개발자가 이 글을 통해 유용한 정보를 얻을 수 있는 게시글들이 모여 있는 게시판. 효율적이고 창의적인 개발을 지원하는 소중한 자료들이 모여 있는 공간입니다.
Yesterday: 128
Today: 137