Skip to Content
Data EngineeringApache Airflow 실전 구축 및 보안 가이드
📊 Data Engineering2018년 12월 17일

Apache Airflow 실전 구축 및 보안 가이드

#airflow#data-engineering#architecture#security#centos

1. 데이터 파이프라인 스케줄러 도입 배경

에서 대용량 빅데이터 통합 플랫폼을 구축하면서 가장 큰 숙제 중 하나는 수많은 데이터 파이프라인의 의존성과 스케줄링을 어떻게 안정적으로 관리할 것인가였습니다. 기존의 단순 Cron 기반 스케줄링이나 파편화된 스크립트 실행 방식으로는 수백 개의 Hadoop, Spark 작업들이 얽히고설킨 복잡한 워크플로우를 모니터링하고 제어하기 불가능했습니다.

이를 해결하기 위해 데이터 파이프라인(DAG)을 코드로 관리하고 현황을 한눈에 볼 수 있는 Apache Airflow를 도입하게 되었습니다. 본 문서는 당시 현장에서 마주했던 Airflow의 기본 설치부터 필수 아키텍처 설정, 운영 데몬화, 그리고 보안 강화까지의 여정을 총망라한 통합 가이드입니다.


1. 기반 환경 및 설치 (Installation)

Apache Airflow는 복잡한 데이터 파이프라인을 방향성 비순환 그래프(DAG) 형태로 정의하여 스케줄링하고 모니터링할 수 있는 플랫폼입니다. 파이썬 기반으로 동작하므로, 시스템에 Python 3 환경이 필수로 구성되어야 진행할 수 있습니다.

Python 3 환경 세팅

CentOS 7 환경에 IUS 저장소를 통해 최신 Python 3.6 환경을 세팅합니다.

bash
$ sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm $ sudo yum search python3 $ sudo yum install -y python36u python36u-libs python36u-devel python36u-pip $ sudo pip3.6 install --upgrade pip

Airflow 패키지 설치

pip를 이용하여 Airflow 패키지를 설치합니다.

bash
$ pip3.6 install apache-airflow

설치 직후 주의할 점은, Airflow가 기본적으로 Sequential Executor를 사용한다는 점입니다. 이 방식은 내장된 SQLite를 사용하므로 병렬 처리가 불가하며 어디까지나 로컬 테스트 용도로만 적합합니다.


2. 아키텍처 및 Executor 설정 (Configuration)

기본 스케줄러 세팅인 Sequential Executor는 수십 개의 데이터를 동시에 수집하고 정제해야 하는 프로덕션 환경의 병목이 됩니다. платфор의 규모별 상황에 맞춰 Executor(실행기)메타데이터 DB를 알맞게 설정(airflow.cfg)하는 과정이 필수적입니다.

Executor 비교 및 아키텍처 특성

  1. Sequential Executor: SQLite 기반. 병렬 처리 불가. (로컬 테스트용)
  2. Local Executor: RDBMS(PostgreSQL/MySQL) 기반. 단일 노드 내 수직적 스케일링(Scale-up).
    • 특징: 스케줄러 프로세스를 통해 단일 노드 내에서 멀티 프로세싱으로 처리합니다. 외부 Broker(메시지 큐)가 필요 없으므로 구조가 매우 단순하고 유지보수가 간편합니다.
  3. Celery Executor: RDBMS + Message Broker(Redis/RabbitMQ) 기반. 다중 Worker 노드로 수평적 스케일링(Scale-out).
    • 특징: 다중 머신(Worker)으로 부하를 분산시키기 위해 메시지 큐(Broker)를 활용합니다. 수평적 스케일링이 가능하여 대용량 분산 처리에 특화되어 있으나 인프라 관리 부담이 따릅니다.

airflow.cfg 기본 설정 변경 사항

DB를 변경하기 위해 환경 설정 파일(airflow.cfg)의 연결 정보를 필수로 수정해야 합니다.

ini
[core] .... # db를 사용한다면 아래 정보를 필수로 바꿔줘야 한다. sql_alchemy_conn=postgresql+psycopg2://airflow:password@postgres-host:5432/airflow ...

💡 데이터베이스 현장 경험 팁 (PostgreSQL 권장): 플랫폼 기반 위에서 여러 번 테스트해 본 결과, 개인적으로 PostgreSQL을 강력히 추천합니다. 초기 MySQL 연결 시도에서 인코딩 문제 및 연결 세션 관리 등 잔고장이 많아 운영 안정성을 위해 PostgreSQL로 최종 정착하게 되었습니다.


3. 서비스 구동 및 데몬화 (Start Service)

설정 완료 후, 이를 실제 데몬 서비스로 구동하여 무중단 환경을 만들어야 합니다. 운영 서버(CentOS 7)에 반영하기 위해서는 systemd 서비스로 등록하여 OS 재부팅 시에도 자동으로 스케줄러와 웹 서버가 구동되도록 구성합니다.

3.1 DB 초기화 (초기 1회 필수)

서비스를 시작하기 전에 반드시 Airflow 메인 홈 경로 환경 변수(AIRFLOW_HOME)를 명시적으로 지정하고 DB 스키마를 생성합니다.

bash
$ export AIRFLOW_HOME=~/airflow $ airflow initdb

3.2 웹 서버 및 스케줄러 구동

DAG 목록과 실행 상태를 확인할 수 있는 UI, 그리고 실제 DAG 스케줄링을 담당하는 뼈대를 구동합니다.

bash
# Foreground 실행 (로그 확인용 테스트) $ airflow webserver -p 8080 $ airflow scheduler # systemd Background 서비스 실행 (운영용) $ systemctl start airflow-webserver.service $ systemctl start airflow-scheduler.service

모든 서비스가 올라오면 http://localhost:8080을 통해 대시보드 접근이 가능합니다.

⚠️ 주의사항: AIRFLOW_HOME 변수가 누락되거나 시스템 환경 변수에 등록되지 않으면 systemctl 데몬 스크립트가 실행될 때 설정 파일을 찾지 못해 엉뚱한 기본 경로(~/airflow)에 SQLite 초기 DB를 새로 만들어버리는 치명적인 실수가 발생합니다. 서비스 등록 스크립트(systemd unit file) 내부에 Environment="AIRFLOW_HOME=/지정경로"를 명확히 박아두는 것이 필수입니다.


4. 보안 체계 구축 (Security & RBAC Auth)

엔터프라이즈 환경에서는 개발자, 오퍼레이터, 관리자에 따라 세밀한 권한 제어가 필요합니다. 누구나 IP 포트(8080)만 알면 중요 파이프라인 배치 작업을 끄거나 켤 수 있는 치명적 보안 취약점을 막기 위해, 접속 시 패스워드 인증(Authentication) 시스템을 활성화하고 초기 관리자(Admin) 계정을 생성해야 합니다.

권한 인증 세팅 활성화

airflow.cfg[webserver] 섹션에서 authenticate = True로 설정하고 인증 백엔드(auth_backend) 모듈을 지정합니다.

관리자 계정 생성 프로비저닝 (Python 스크립트)

파이썬 대화형 쉘(python)이나 .py 스크립트를 통해 Airflow Session 모델 DB에 암호화된 계정 정보를 직접 밀어넣습니다.

python
import airflow from airflow import models, settings from airflow.contrib.auth.backends.password_auth import PasswordUser # User 모델 인스턴스화 user = PasswordUser(models.User()) # 관리자로 사용할 계정 정보 user.username = 'admin' user.email = 'ersione@exem.ai' user.password = 'passwords' # 프로덕션에서는 안전한 비밀번호로 대체 # Airflow 메인 DB 세션을 열어 유저 정보 적재 session = settings.Session() session.add(user) session.commit() session.close() exit()

4. 구축 회고 및 팁

도입 초기에는 스케줄러를 파이썬 스크립트로 제어할 수 있다는 점에 포커스가 맞춰졌지만, 사실 Airflow 아키텍처의 핵심은 DB 엔진(Postgres)과 Message Broker(Celery, Redis)의 결합을 통한 수평적 스케일 아웃의 유연함, 그리고 파이썬 코어의 강점을 활용해 보안 코드 삽입 및 배포 자동화(IaC) 파이프라인과 쉽게 연동해버릴 수 있는 확장성에 있었습니다.

처음부터 너무 복잡한 오버엔지니어링(규모도 적은데 Celery 투입)을 고민하기보다, 플랫폼이 감당해야 할 스케일에 맞춰 순차적으로 Local 단계에서 Celery 단계로 유연하게 마이그레이션 전략을 짤 수 있었던 것이 현장 프로젝트의 가장 큰 수학이었습니다.

Last updated on