Apache Airflow는 다양한 시스템과의 연동을 위해 Provider 패키지(공급자 모듈) 개념을 사용합니다.
이번 글에서는 Provider의 구성, 동작 원리, 확장 방식을 자세히 살펴봅니다.
Airflow에서 Postgres를 연결할 때,
가장 중요한 포인트는 Provider 설치 → Connection 등록 → Operator 실행 흐름입니다.
이 글에서는 직접 Docker Compose로 Postgres를 띄우고,
Airflow에서 PostgresOperator로 SQL을 실행하는 과정을 정리했습니다.
Airflow Provider란?
Airflow Provider는 Airflow와 외부 서비스 간의 연결을 담당하는 플러그인 세트입니다.
각 Provider는 특정 기술 스택(PostgreSQL, AWS, GCP, Slack 등)과 상호작용하기 위한
Hook, Operator, Sensor, Connection 정의를 포함합니다.
쉽게 말해, Airflow의 Provider는 “Airflow가 세상과 대화하는 언어 팩”입니다.
예시:
- apache-airflow-providers-postgres
- apache-airflow-providers-google
- apache-airflow-providers-amazon
이러한 Provider는 Airflow 설치 시 pip install apache-airflow-providers-xxx 형태로 추가할 수 있습니다.
Postgres 컨테이너 실행하기
먼저 Postgres를 Docker로 띄워 Airflow가 접근할 수 있는 환경을 만듭니다.
version: "3.9"
services:
db:
image: postgres:13.6
restart: always
environment:
POSTGRES_DATABASE: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password1234
ports:
- "5432:5432"
이후 터미널에서 실행합니다.
$ docker compose up
이제 Postgres 서버가 5432 포트에서 대기 중입니다.
✅ 주의: Airflow와 Postgres를 서로 다른 docker-compose 파일에서 띄웠다면,
기본적으로 네트워크가 분리되어 있기 때문에
127.0.0.1이나 db로는 접근할 수 없습니다.
이 경우에는 아래 두 가지 중 하나로 설정해야 합니다:
1️⃣ 두 compose 파일이 같은 external network를 공유하도록 설정하고 Host=db 사용
2️⃣ 또는 docker inspect로 Postgres 컨테이너의 IP 주소를 확인해 Host=172.xx.x.x 형태로 입력
Airflow Provider 설치
Airflow는 기본적으로 데이터베이스에 직접 접근하지 않습니다.
이를 가능하게 해주는 게 바로 Airflow Provider입니다.
Postgres를 사용하기 위해 다음 명령을 실행합니다.
pip install apache-airflow-providers-postgres
이 패키지가 설치되면 PostgresHook, PostgresOperator, PostgresSensor 등이 자동 등록됩니다.
Airflow Connection 설정

이제 Airflow 웹 UI에서 Connection을 등록합니다.
Admin → Connections → + 버튼을 클릭하세요.
| 필드 | 값 |
| Connection Id | my_postgres_connection |
| Connection Type | postgres |
| Host | db |
| Schema | postgres |
| Login | postgres |
| Password | password1234 |
| port | 5432:5432 |
Host를 0.0.0.0이나 127.0.0.1로 입력하면 연결이 거절됩니다.
Airflow와 Postgres는 Docker 네트워크에서 별도 컨테이너로 동작하므로
docker inspect로 Postgres 컨테이너의 IP 주소를 확인해 Host=172.xx.x.x 형태로 입력
DAG 작성 — PostgresOperator
이제 실제 DAG 코드에서 PostgresOperator를 이용해 SQL을 실행해봅시다.
from airflow import DAG
from airflow.providers.postgres.operators.postgres import PostgresOperator
from datetime import datetime
default_args = {"start_date": datetime(2025, 10, 14)}
with DAG(
'postgres_loader',
description='PostgreSQL Loader Example',
default_args=default_args,
schedule_interval='0 0 * * *',
catchup=False
) as dag:
sql_query = """
INSERT INTO sample_table (key, value)
VALUES ('hello', 'world');
"""
postgres_task = PostgresOperator(
task_id='execute_sql_query',
postgres_conn_id='my_postgres_connection',
sql=sql_query,
dag=dag
)
이 DAG는 PostgresOperator를 통해
앞서 등록한 Connection(my_postgres_connection)을 참조하여
Postgres DB에 SQL을 실행합니다.
실행 결과 & 트러블슈팅
이제 DAG를 트리거하면, Airflow가 다음 순서로 동작합니다.
- PostgresOperator → 내부적으로 PostgresHook 호출
- Hook이 my_postgres_connection 정보를 불러옴
- psycopg2를 이용해 DB 연결
- SQL 실행 (INSERT INTO sample_table ...)
전체 흐름 정리
| 단계 | 구성 요소 | 설명 |
| 1 | docker-compose-yaml | Postgres 컨테이너 실행 |
| 2 | Provider 설치 | apache-airflow-providers-potgres 패키지 설치 |
| 3 | Connection 등록 | Airflow UI에서 DB 연결 정보 설정 |
| 4 | Operator 실행 | DAG 내 PostgresOperator로 SQL로 실 |
정리하면
이 과정을 통해 Airflow가 단순 스케줄러가 아니라
데이터 파이프라인 오케스트레이터로서
DB 작업을 자동화하는 방법을 직접 확인했습니다.
'컨테이너·워크플로우 자동화 > Airflow로 워크플로우 자동화하기' 카테고리의 다른 글
| Airflow의 PythonVirtualenvOperator — 왜 함수 안에 import를 넣어야 할까? (0) | 2025.10.17 |
|---|---|
| Airflow의 Operator와 Sensor — 태스크의 핵심 구성요소 이해하기 (0) | 2025.10.14 |
| Airflow Operator — 하나의 작업에는 하나의 오퍼레이터 (0) | 2025.10.13 |
| Airflow Web UI용 관리자 계정 생성 방법 (0) | 2025.10.13 |
| Apache Airflow 설치 및 Docker Compose 활용 가이드 (0) | 2025.10.13 |