Post

ETL(Workflow)

데이터를 추출·변환·적재하는 자동화 워크플로우

개념 설명:

추출, 전환, 적재(ETL)는 다양한 소스의 데이터를 데이터 웨어하우스라고 부르는 대형 중앙 집중식 리포지토리에 결합하는 과정입니다. ETL은 원시 데이터를 정리 및 구성해서 스토리지, 데이터 분석, 기계 학습(ML)용으로 준비하기 위한 비즈니스 규칙 세트입니다. 사용자는 데이터 분석(비즈니스 의사 결정의 결과 예측, 보고서 및 대시보드 생성, 운영 비효율성 저감 등)을 통해 특정 비즈니스 인텔리전스 요구 사항을 해결할 수 있습니다.
AWS - 추출 변환 적재(ETL)란 무엇인가요?

  • Extract: 다양한 소스(RDB, API, 파일 등)에서 데이터 수집
  • Transform: 정제, 필터링, 집계 등의 변환 로직 적용
  • Load: 대상 시스템(DB, DW, S3 등)으로 적재

vs ELT:

ELT는 데이터를 먼저 적재한 후 변환을 수행하는 방식으로, BigQuery, Snowflake 등 클라우드 기반 DW에서 자주 사용됨

vs 데이터 스트리밍:

ETL은 주로 배치 중심, 스트리밍은 실시간 처리 중심

WHEN?

  • 배치 처리 기반의 데이터 파이프라인이 필요한 경우
  • 정기적으로 반복되는 데이터 수집·가공 작업이 있는 경우
  • 데이터 웨어하우스 구축이나 BI 도구 연동 목적이 있을 때

HOW? (example)

1. 워크플로우 설계 도구 선택

  • Apache Airflow: Python 기반 DAG(Directed Acyclic Graph) 정의
  • AWS Glue: Serverless 방식으로 스크립트 기반 ETL 지원
  • Apache NiFi: GUI 기반 데이터 흐름 정의

2. 예시 (Airflow로 MySQL → S3 적재)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime

def extract():
    print("MySQL에서 데이터 추출")

def transform():
    print("데이터 변환")

def load():
    print("S3 버킷에 적재 - s3://enginrect-data/etl/")

with DAG('enginrect_etl_pipeline', start_date=datetime(2023, 1, 1), schedule_interval='@daily') as dag:
    t1 = PythonOperator(task_id='extract', python_callable=extract)
    t2 = PythonOperator(task_id='transform', python_callable=transform)
    t3 = PythonOperator(task_id='load', python_callable=load)

    t1 >> t2 >> t3

3. Tip! (운영 시 고려사항)

  • 재시도 및 알림 설정: 실패 시 Slack, Email 알림
  • 로그 관리 및 모니터링: 로그 기반 에러 파악 및 지표 수집
  • 스케줄 관리: cron 표현식 또는 @hourly, @daily 등
This post is licensed under CC BY 4.0 by the author.