본문 바로가기
Data

[Python] ETL(Extract, Transform, Load) 각 단계의 의미

by clolee 2025. 5. 9.

✅ ETL(Extract, Transform, Load) 각 단계의 의미

ETL은 Extract, Transform, Load의 약자로, **데이터를 추출(Extract) → 변환(Transform) → 적재(Load)**하는 데이터 처리 파이프라인의 핵심 절차를 의미합니다.
실무에서는 다양한 원천 데이터(파일, API, DB)를 가져와, 의미 있게 가공하고, 데이터 웨어하우스나 분석용 DB에 저장하기 위한 중간처리 전용 프로세스입니다.

1. 🟡 Extract (추출)

원천 데이터를 수집하는 단계
CSV, API, DB, Excel, Kafka 등 다양한 소스로부터 가져옴

실무 예시:

  • 공공데이터 API에서 JSON/CSV 형태로 주기적 호출
  • 운영 DB에서 특정 테이블을 시간 기준으로 덤프
  • 크롤링/스크래핑으로 웹사이트에서 실시간 시세 추출
  • ngrok 등으로 외부 DB에 접근하여 수집

목적:

  • 다양한 위치의 데이터 획득
  • 가능한 최신의 변화된 상태 유지

2. 🟠 Transform (변환)

추출한 데이터를 분석 또는 저장 가능한 구조로 가공

주요 작업:

  • 타입 정리 (문자열 → 날짜, null → 0)
  • 중복 제거, 이상치 필터링
  • 조인(join), 필터(filter), 집계(groupby), 파생변수 생성
  • 단위 통일 (ex: 천 단위 → 억 단위, %, 소수점 반올림 등)
  • 업무 로직 반영: 예를 들어 “금리 상승일만 추출”, “연체율 3% 이상만 필터링”

실무 예시:

  • 기준금리와 소비자물가를 date 기준으로 join
  • 전일 대비 CPI 상승률 계산해 새로운 컬럼 만들기
  • 연도별로 묶어 평균을 낸 뒤 이상치 제거
  • 머신러닝 학습용 피처 생성

3. 🔵 Load (적재)

처리된 데이터를 DB나 분석 시스템에 저장하는 단계

저장 위치 예시:

  • MySQL, MariaDB, PostgreSQL (RDB)
  • BigQuery, Redshift, Snowflake (DWH)
  • Parquet, CSV, Excel (파일 기반 저장)
  • ElasticSearch, MongoDB (NoSQL 저장)

실무 고려사항:

  • 중복 저장 방지 (if_exists='append' vs replace)
  • 키 컬럼 활용 (date, user_id 등)
  • 스키마 변경 시 자동 반영 또는 에러 처리
  • 저장된 데이터를 대시보드, 리포트, 모델링에 활용

✅ ETL 실무에서 왜 중요한가?

이유 설명
📦 데이터 신뢰성 확보 이상치 제거, 정형화 등을 통해 분석 가능한 형태로 만듦
🔁 자동화 용이 크론탭, Airflow, Prefect 등과 연계해 반복적 데이터 처리
🧠 업무 로직 내재화 "어떤 데이터를 어떤 기준으로" 가공하는지를 명확하게 코드화
📊 분석 기반 마련 BI도구(Tableau, PowerBI)나 AI 모델링에 바로 사용 가능
🌐 데이터 통합 서로 다른 시스템/API/DB 간 정보를 결합해 통합 인사이트 생성

✅ 예시: 한국은행 금리 + 소비자물가지수 ETL

단계 처리 내용
Extract 한국은행 웹사이트에서 기준금리 HTML 테이블 추출, CPI CSV 파일 로드
Transform 날짜 기준 정규화 → date 기준으로 join → 전일 대비 증감률 파생
Load MySQL 테이블 joined_rate_cpi에 append 저장 (날짜 기준 중복 제거 포함)

✅ 실무 팁

  • ETL이 단순 정제 수준이면 가치 없음 → *"왜 이 가공을 하는가?"*를 설명할 수 있어야 함
  • ELT 구조도 존재: 데이터를 먼저 저장(Load)한 뒤, DB 내부에서 변환(Transform)하는 방식 (대용량 처리 최적화에 유리)
  • ETL 자동화는 DevOps+DataOps의 핵심 → cron, airflow, systemd, Docker, logging 까지 포함 가능

'Data' 카테고리의 다른 글

[FastAPI] FastAPI에서 POST 요청 시 Content-Type 설정  (0) 2025.05.07
[Kaggle] kaggle.json 인증키 발급  (0) 2025.05.02

댓글