반응형
1. 개요
데이터 파이프라인 자동화는 현대 데이터 엔지니어링에서 매우 중요한 부분입니다. 이번 포스팅에서는 Docker 환경에서 Apache Airflow를 설치하고, MSSQL Server와 연동하여 데이터를 자동으로 적재하는 전체 과정을 상세히 다루어보겠습니다.
2. 환경 구성
2.1 사전 요구사항
- Docker Desktop 설치
- Python 3.x
- MSSQL Server
2.2 프로젝트 구조
3. Airflow 설치 및 설정
3.1 Docker Compose 파일 작성
version: '3'
services:
airflow:
build: .
image: apache/airflow:2.7.3
ports:
- "8080:8080"
volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
- ./plugins:/opt/airflow/plugins
- ./data:/opt/airflow/data
environment:
- AIRFLOW__CORE__EXECUTOR=LocalExecutor
- AIRFLOW__CORE__SQL_ALCHEMY_CONN=sqlite:////opt/airflow/airflow.db
위 구조에서 각 디렉토리의 역할은 다음과 같습니다:
- dags: Airflow DAG 파일들이 위치하는 디렉토리입니다.
- logs: Airflow 실행 로그가 저장되는 공간입니다.
- plugins: 커스텀 플러그인을 저장할 수 있는 디렉토리입니다.
- data: 적재할 데이터 파일이 위치하는 곳입니다.
- ports: 8080 포트를 통해 Airflow 웹 인터페이스에 접근할 수 있습니다.
- volumes: 로컬 디렉토리와 컨테이너를 연결하여 파일을 공유합니다.
- environment: Airflow의 기본 실행 환경을 설정합니다.
3.2 Dockerfile 작성
FROM apache/airflow:2.7.3
USER root
# MSSQL ODBC Driver 설치
RUN curl <https://packages.microsoft.com/keys/microsoft.asc> | apt-key add - \\
&& curl <https://packages.microsoft.com/config/debian/11/prod.list> > /etc/apt/sources.list.d/mssql-release.list \\
&& apt-get update \\
&& ACCEPT_EULA=Y apt-get install -y msodbcsql17 unixodbc-dev \\
&& apt-get clean \\
&& rm -rf /var/lib/apt/lists/*
USER airflow
# Python 패키지 설치
RUN pip install --no-cache-dir \\
pandas \\
pyodbc
- MSSQL ODBC Driver 설치: MSSQL Server와의 연결을 위해 필수적입니다.
- Python 패키지 설치: pandas와 pyodbc 등 필요한 라이브러리를 설치합니다.
4. DAG 작성
4.1 MSSQL 연결 DAG 작성
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
import pandas as pd
import pyodbc
# MSSQL 연결 문자열
CONN_STR = (
"DRIVER={ODBC Driver 17 for SQL Server};"
"SERVER=<MSSQL 서버 주소>;" # 예: localhost 또는 IP 주소
"DATABASE=<데이터베이스명>;" # 사용할 DB 이름
"UID=<사용자명>;" # MSSQL 로그인 사용자
"PWD=<비밀번호>;" # 사용자 비밀번호
"TrustServerCertificate=Yes;"
)
def load_csv_to_mssql():
# CSV 파일 읽기 - 데이터 파일 경로 지정
df = pd.read_csv('/opt/airflow/data/economic_data_kor.csv')
# MSSQL 연결 및 데이터 적재
with pyodbc.connect(CONN_STR) as conn:
# 테이블 생성 및 데이터 삽입 로직
...
# DAG 기본 설정
default_args = {
'owner': 'airflow', # DAG 소유자
'start_date': datetime(2024, 1, 1), # DAG 시작일
'retries': 1, # 실패시 재시도 횟수
'retry_delay': timedelta(minutes=5), # 재시도 간격
}
# DAG 정의
dag = DAG(
'mssql_load_dag', # DAG ID
default_args=default_args,
description='Load CSV to MSSQL Server', # DAG 설명
schedule_interval=timedelta(days=1), # 실행 주기 (1일)
)
# 태스크 정의
load_task = PythonOperator(
task_id='load_csv_to_mssql', # 태스크 ID
python_callable=load_csv_to_mssql, # 실행할 함수
dag=dag,
)
- MSSQL 연결 문자열: 데이터베이스 연결에 필요한 정보를 설정합니다.
- load_csv_to_mssql 함수: CSV 파일을 읽어 MSSQL에 적재하는 핵심 로직입니다. 저는 경제 지표 데이터를 csv로 준비해서 MSSQL에 새로운 테이블로 넣는 함수를 작성했었습니다.
- DAG 설정: 실행 주기, 재시도 횟수 등 워크플로우의 기본 동작을 정의합니다.
5. 실행 및 테스트
5.1 Docker 컨테이너 실행
docker-compose down
docker-compose build
docker-compose up -d
- 실행이 완료되면 컨테이너가 정상적으로 동작하는 것을 확인할 수 있습니다. 특히 'healthy' 상태는 모든 서비스가 정상 작동함을 의미합니다.
5.2 Airflow UI 접속
Airflow 웹 인터페이스는 http://localhost:8080에서 접근할 수 있습니다. 초기 로그인 정보는 다음과 같습니다:
- Username: admin
- Password: admin
이 인터페이스를 통해 DAG의 상태를 모니터링하고 관리할 수 있습니다.
5.3 DAG 활성화 및 실행
DAG 목록에서 'mssql_load_dag'를 찾을 수 있습니다. 이 DAG는 처음에는 비활성화 상태이며, 다음 단계로 활성화합니다:
- 토글 버튼을 클릭하여 DAG 활성화
- 수동으로 첫 실행을 트리거하여 정상 작동 확인
시작 날짜가 2024.01.01로 설정되어 있어 다수의 백필(backfill) 작업이 실행되는 것을 확인할 수 있습니다.
5.4 실행 결과 확인
- Grid 뷰에서 각 태스크의 실행 상태를 다음과 같이 구분할 수 있습니다:
- 초록색: 태스크 성공
- 빨간색: 태스크 실패
- 노란색: 실행 중
그렇다면 실제 데이터가 제대로 들어갔는지 확인해볼까요?
5.5 MSSQL 접속
- 로컬에 설치한 MSSQL에 들어갑니다.
- 만들고자 했던 테이블인 economic_data_kor이 제대로 들어가있는것을 확인할 수 있습니다.
6. 자동화 설정
자동화 운영은 다음과 같이 설정됩니다:
- 매일 자정(00:00)에 자동 실행
- DAG 활성화 상태에서 지속적인 실행
- 필요시 토글 버튼으로 실행 중지 가능
7. 문제 해결
7.1 ODBC 드라이버 오류
오류 메시지
Can't open lib 'ODBC Driver 17 for SQL Server' : file not found
해결: Dockerfile에서 ODBC 드라이버 설치 확인
8. 결론
Docker와 Apache Airflow를 사용하여 MSSQL 데이터 적재 자동화 파이프라인을 성공적으로 구축했습니다. 이를 통해 매일 자동으로 데이터가 업데이트되며, 필요에 따라 스케줄 조정이 가능합니다.
참고 자료
- Apache Airflow 공식 문서
- Docker 공식 문서
- Microsoft ODBC Driver 설치 가이드
반응형
'Study' 카테고리의 다른 글
[뉴스 기사 요약 📰] 신한은행, AI로 언어장벽을 허물다 - '뱅킹 포 에브리원' 서비스 도입 (1) | 2024.11.19 |
---|---|
[뉴스 기사 요약 📰] KB국민은행의 AI 혁신 - 초개인화 자산관리의 새 지평을 열다 (0) | 2024.11.17 |
[뉴스 기사 요약 📰 ]빗썸은 왜 NH농협은행을 떠나려 할까? - 가상자산 거래소와 은행의 특별한 관계 살펴보기 (0) | 2024.11.16 |