✅ 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'
vsreplace
) - 키 컬럼 활용 (
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 |
댓글