292. ETL 프로세스

핵심 인사이트 (3줄 요약)

  1. 본질: ETL(Extract, Transform, Load)은 운영 시스템에서 데이터를 추출(Extract)하고, 분석에 적합한 형태로 변환(Transform)한 후, 데이터 웨어하우스(DW)에 적재(Load)하는 일련의 데이터 통합 프로세스이다.
  2. 가치: 이기종 데이터 소스의 통합, 데이터 품질 확보, DW 구축의 핵심 공정이자 데이터 기반 분석의 기반이 된다.
  3. 융합: ODS, DW, CDC, 데이터 품질 관리, 차원 모델링, 인크리멘탈 로드, 스키마 매핑과 밀접하게 연관된다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

개념 정의

ETL(Extract, Transform, Load)은 데이터 웨어하우스(DW) 구축의 핵심 공정으로, 여러 운영 시스템(OLTP, 외부 데이터 등)에서 데이터를 추출(Extract)하고, 분석에 적합한 형태로 정제·변환(Transform)한 후, 최종 목표인 DW나 데이터 마트에 적재(Load)하는 일련의 데이터 통합 파이프라인이다. ETL은 DW가 "통합된, 주제 지향적, 시계열적, 비휘발적" 데이터라는 특성을 충족시키는 구체적 구현 메커니즘이며, Inmon의 DW 정의에서 말하는 4대 특징을 ETL을 통해 구현한다.

필요성

기업 내 다양한 운영 시스템(ERP, CRM, SCM, 웹 로그 등)은 각각 고유한 데이터 모델,编码,命名 규칙을 가진다. 이러한 이기종 데이터를 그대로 DW에 적재하면 분석 결과의 정확성을 보장할 수 없다. ETL의 Transform 단계에서는 이기종 데이터를 통합하고, 数据 품질 문제를 해결하며, 분석에 적합한 차원 모델(스타 스키마 등)로 변환한다. 또한 운영 시스템의 부하를 최소화하면서 DW에 데이터를 제공할 수 있어, 24/7 작동하는 운영 시스템의 안정성을 유지하는 데도 기여한다.

배경

ETL은 1990년대 데이터 웨어하우스 개념과 함께 등장했다. Bill Inmon과 Ralph Kimball이 제시한 DW 방법론에서 ETL은 핵심 공정이었고, 이에따른 ETL 도구( Informatica, IBM DataStage, Microsoft SSIS, Talend 등) 시장도 성장했다. 초기의 ETL은주로 배치(Batch) 모드로 작동하여 야간에大批량 데이터를処理했다. 그러나 최근에는 CDC(Change Data Capture), 스트림 처리等技术의 발전과 함께 준실시간/실시간 ETL도 가능해졌으며, ELT(Extract, Load, Transform)라는新しい 패러다임도 등장했다.

비유

ETL은大型음식점의食材 조달 및 조리 과정과 같다. 각 공급업체(추출: Extract)에서 재료를 받아오고(Extract), 중앙 주방(변환: Transform)에서 세척, 손질, 조리를 통해 완성된 요리로 만들고, 손님 테이블(적재: Load)으로 서빙하는 과정이다. 공급업체마다 재료의規格이 다르고(이기종 데이터), 중앙 주방에서는统一的 비법(통합된 데이터 모델)으로 조리하며(Transform), 최종적으로는 손님이 먹기 좋은 형태로 테이블에 제공된다(Load). 야간 재고 보충(배치 ETL)과 당일 신선 재료 배송(실시간 ETL)이 있을 수 있다.

📢 섹션 요약: ETL은 이기종 운영 시스템의 데이터를 추출·변환·적재하여 DW를 구축하는 핵심 공정으로, 데이터 통합, 품질 확보, 차원 모델 변환을 담당한다.


Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)

ETL 3단계 상세

┌─────────────────────────────────────────────────────────────────────────────┐
│                    ETL 3단계 상세                                              │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │  ① Extract (추출)                                                     │  │
│  │  ─────────────────                                                     │  │
│  │                                                                       │  │
│  │  목적: 운영 시스템의 데이터를 DW 환경으로 가져오기                       │  │
│  │                                                                       │  │
│  │  추출 방식:                                                           │  │
│  │  ┌───────────────────────────────────────────────────────────────┐  │  │
│  │  │  [1] Full Extract (전체 추출)                                  │  │  │
│  │  │  • 매번 전체 데이터를 추출                                      │  │  │
│  │  │  • 단순하지만 비효율적 (대량 데이터)                            │  │  │
│  │  │  • 초기 DW 구축 시 활용                                        │  │  │
│  │  │                                                              │  │  │
│  │  │  [2] Incremental Extract (증분 추출)                          │  │  │
│  │  │  • 변경분만 추출 (CDC, 타임스탬프 기반)                          │  │  │
│  │  │  • 효율적, 운영 시스템 부하 최소화                               │  │  │
│  │  │  •日常적 ETL에 활용                                            │  │  │
│  │  │                                                              │  │  │
│  │  │  [3] Log-based Extract (로그 기반 추출)                        │  │  │
│  │  │  • DB 리두/아카이브 로그 활용                                   │  │  │
│  │  │  • 운영 시스템에 무부하                                           │  │  │
│  │  │  • Debezium, Oracle GoldenGate 등                              │  │  │
│  │  └───────────────────────────────────────────────────────────────┘  │  │
│  │                                                                       │  │
│  │  추출 시 고려사항:                                                     │  │
│  │  • 운영 시스템의peak 시간 회피                                      │  │
│  │  • 네트워크帯域폭 고려                                               │  │
│  │  • 추출 중 데이터 일관성 확보 (트랜잭션 경계)                         │  │
│  │                                                                       │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │  ② Transform (변환)                                                 │  │
│  │  ───────────────────                                                 │  │
│  │                                                                       │  │
│  │  목적: 추출된 원시 데이터를 분석에 적합한 형태로 변환                   │  │
│  │                                                                       │  │
│  │  주요 변환 작업:                                                     │  │
│  │  ┌───────────────────────────────────────────────────────────────┐  │  │
│  │  │  [1] 데이터 정제 (Cleansing)                                    │  │  │
│  │  │  • NULL 값 처리, 중복 제거, 이상치(outlier) 제거                │  │  │
│  │  │  • 예: customer_name이 NULL → 'UNKNOWN'으로 대체              │  │  │
│  │  │                                                              │  │  │
│  │  │  [2] Encoding/Format 통일                                      │  │  │
│  │  │  • 'M'/'Male'/'남' → 'M' 통일                                 │  │  │
│  │  │  • 날짜 형식, 숫자 형식 통일                                    │  │  │
│  │  │                                                              │  │  │
│  │  │  [3] 키 관리 (Key Management)                                  │  │  │
│  │  │  • 자연 키(Natural Key) → 외래 키(Foreign Key) 매핑            │  │  │
│  │  │  • 합성 키(Surrogate Key) 생성                                  │  │  │
│  │  │                                                              │  │  │
│  │  │  [4] 차원 변환 (Dimension Transformation)                      │  │  │
│  │  │  • 정규화 → 차원 모델 (스타 스키마) 변환                        │  │  │
│  │  │  • SCD (Slowly Changing Dimension) 처리                       │  │  │
│  │  │                                                              │  │  │
│  │  │  [5] 데이터 통합 (Integration)                                 │  │  │
│  │  │  • 여러 소스의 동일 entity 통합                                │  │  │
│  │  │  • 예: CRM 고객 + ERP 고객 → 통합 고객 차원                    │  │  │
│  │  └───────────────────────────────────────────────────────────────┘  │  │
│  │                                                                       │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │  ③ Load (적재)                                                      │  │
│  │  ─────────────                                                      │  │
│  │                                                                       │  │
│  │  목적: 변환된 데이터를 DW의 최종 테이블에 저장                          │  │
│  │                                                                       │  │
│  │  적재 방식:                                                         │  │
│  │  ┌───────────────────────────────────────────────────────────────┐  │  │
│  │  │  [1] Full Load (전체 적재)                                     │  │  │
│  │  │  • 대상 테이블의 모든 데이터를 삭제 후 다시 적재                 │  │  │
│  │  │  • 초기 적재 또는 복구 시 활용                                  │  │  │
│  │  │                                                              │  │  │
│  │  │  [2] Incremental Load (증분 적재)                             │  │  │
│  │  │  • 변경분(INSERT)만 추가                                       │  │  │
│  │  │  • 대부분의日常적 ETL에 활용                                   │  │  │
│  │  │                                                              │  │  │
│  │  │  [3] Upsert (Insert + Update)                                 │  │  │
│  │  │  • 기존 데이터는 UPDATE, 신규 데이터는 INSERT                    │  │  │
│  │  │  • SCD Type 1, 2 처리에 필수                                   │  │  │
│  │  └───────────────────────────────────────────────────────────────┘  │  │
│  │                                                                       │  │
│  │  적재 후 작업:                                                       │  │
│  │  • 인덱스 재생성                                                     │  │
│  │  • 통계정보 갱신 (Optimizer용)                                      │  │
│  │  • DW 테이블 constraints 재검증                                      │  │
│  │                                                                       │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

ETL 아키텍처 및 스케줄링

┌─────────────────────────────────────────────────────────────────────────────┐
│                    ETL 아키텍처 및 스케줄링                                    │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  [ETL 파이프라인 아키텍처]                                                   │
│                                                                             │
│       ┌──────────────────────────────────────────────────────────────┐    │
│       │                    ETL Pipeline                               │    │
│       │  ──────────────────────────────────────────────────────────  │    │
│       │                                                               │    │
│       │   ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐   │    │
│       │   │ Source  │───▶│ Staging │───▶│Transform│───▶│  Load   │   │    │
│       │   │ Extract │    │  Area   │    │  Area   │    │  Area   │   │    │
│       │   └─────────┘    └─────────┘    └─────────┘    └────┬────┘   │    │
│       │        │                                             │        │    │
│       │        │    운영 시스템들                DW/Data Mart ◀──────┘    │
│       │        │    (OLTP, CRM, ERP 등)                               │    │
│       │        ▼                                                        │    │
│       │   ┌─────────────────────────────────────────────────────────┐ │    │
│       │   │              ETL Management Layer                        │ │    │
│       │   │  스케줄링 | 모니터링 | 오류 처리 | 재시작 | lineage 추적   │ │    │
│       │   └─────────────────────────────────────────────────────────┘ │    │
│       │                                                               │    │
│       └──────────────────────────────────────────────────────────────┘    │
│                                                                             │
│  [ETL 스케줄링 주기]                                                       │
│  ───────────────────                                                       │
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐ │
│  │  주기        │頻度     │ 적용场景                                      │ │
│  │ ──────────────────────────────────────────────────────────────────│ │
│  │  실시간     │ 수초~수분 │ 금융 거래, 모니터링, 긴급报警                  │ │
│  │  준실시간   │ 15분~1시간│ KPI 대시보드,_OPERATIONAL 보고서            │ │
│  │  일별       │ 1일       │ 일일 매출/재무 보고서, 야간 배치 처리         │ │
│  │  주별       │ 1주       │ 주간 분석, 주간 KPI                          │ │
│  │  월별       │ 1달       │ 월말 마감, 재무 보고, 규제 보고               │ │
│  └─────────────────────────────────────────────────────────────────────┘ │
│                                                                             │
│  [ETL 실패 시 대처]                                                        │
│  ───────────────────                                                       │
│                                                                             │
│  1. Checkpoint/Restart: 실패 지점부터 재시작 가능                            │
│  2. Rollback: 실패 시 이전 상태로 복원                                       │
│  3. Alerting: 실패 시 관리자에게 즉시通报                                      │
│  4. Idempotent 설계: 재실행해도 결과가 동일하게 보장                          │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

ETL vs ELT 비교

┌─────────────────────────────────────────────────────────────────────────────┐
│                    ETL vs ELT 비교                                           │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌──────────────────┬────────────────────────┬────────────────────────┐     │
│  │      특성         │         ETL           │          ELT          │     │
│  │                  │                        │                       │     │
│  ├──────────────────┼────────────────────────┼────────────────────────┤     │
│  │ 정의             │ 추출→변환→적재         │ 추출→적재→변환         │     │
│  │                  │ (DW 외부에서 변환)      │ (DW 내부에서 변환)      │     │
│  │ 변환 위치        │ ETL 서버/도구           │ DW 내부 (SQL 기반)     │     │
│  │ DW 부담          │ 낮음                   │ 높음 (DW 컴퓨팅 활용)  │     │
│  │ ETL 서버 필요    │ 별도 ETL 서버 필요       │ 불필요 (Cloud DW 경우) │     │
│  │ 데이터量处理     │ 대량 데이터 비효율적     │ 대량 데이터 효율적      │     │
│  │ SQL 활용         │ 제한적                 │ 완전 SQL 활용          │     │
│  │ 개발 난이도      │ 높음 (전문 도구 필요)    │ 낮음 (SQL만으로 가능)   │     │
│  │ 적합场景        │ 기존 DW, 온프레미스      │ Cloud DW (Redshift,   │     │
│  │                  │                        │  BigQuery, Snowflake)  │     │
│  └──────────────────┴────────────────────────┴────────────────────────┘     │
│                                                                             │
│  [ELT 선택이 적절한 경우]                                                  │
│  ✅ Cloud DW (Redshift, BigQuery, Snowflake) 사용 시                       │
│  ✅ 데이터量가 매우 큰 경우 (DW 컴퓨팅 파워 활용)                            │
│  ✅ SQL에 익숙한 팀 (빠른 개발, 낮은 학습 곡선)                              │
│  ✅ 변환 로직이 복잡하지 않은 경우                                          │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] ETL은 전통적으로 DW 구축의 핵심 공정이었으며, 데이터 통합, 품질 관리, 차원 모델 변환 등의 역할을 담당했다. 그러나 Cloud DW가 등장하면서 ELT(Extract, Load, Transform)라는新しい 패러다임이 주목받고 있다. ELT는 DW의强大한 컴퓨팅 파워를 활용하여 변환을 DW 내부에서 수행하므로, ETL 서버가 별도로 필요 없고, 대량 데이터 처리에도 효율적이다. 다만 변환 로직이 복잡한 경우 여전히 ETL 도구가 유용하며, 전통적인 온프레미스 DW에서는 ETL이依然是 표준이다.

📢 섹션 요약: ETL은 Extract→Transform→Load 3단계로 구성되며, 데이터 통합과 품질 확보, 차원 모델 변환을 담당한다. Cloud DW 시대에는 ELT(Load 먼저, Transform은 DW 내부 SQL로)가 대안으로 부상하고 있다.


Ⅲ. 결론

ETL은 DW 구축의 핵심 공정으로, 이기종 운영 시스템의 데이터를 추출·변환·적재하여 분석에 적합한 형태의 데이터를 제공한다. Extract 단계에서 데이터를 DW 환경으로 가져오고, Transform 단계에서 데이터 품질 문제를 해결하며 차원 모델로 변환하고, Load 단계에서 DW에 적재한다. 전통적으로 배치 모드로 작동하지만, CDC와 스트림 처리 기술의 발전으로 준실시간 ETL도 가능해졌다. 또한 Cloud DW 시대에는 ELT(Extract-Load-Transform)라는新しい 패러다임도 등장하여, DW 내부 SQL로 변환을 수행하는 효율적 접근이 가능해졌다.

📢 섹션 요약: ETL은 Extract→Transform→Load 3단계로 DW에 분석용 데이터를 제공하는 핵심 공정이며, Cloud DW 기반에서는 ELT로의 전환도 활발히 진행되고 있다.


핵심 인사이트 ASCII 다이어그램 (Concept Map)

┌─────────────────────────────────────────────────────────────────────────────┐
│                    ETL Process Concept Map                                     │
│                                                                             │
│              ┌─────────────────────────────────┐                           │
│              │        ETL Process              │                           │
│              │   (Extract, Transform, Load)    │                           │
              └───────────────┬─────────────────┘                           │
│                              │                                               │
│         ┌────────────────────┼────────────────────┐                        │
│         ▼                    ▼                    ▼                        │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐               │
│  │   Extract   │    │   Transform  │    │     Load     │               │
│  │   (추출)     │    │   (변환)     │    │   (적재)     │               │
│  │  Full/Incre  │    │ Cleansing    │    │ Full/Incre   │               │
│  │  CDC/Log-based│   │ Encoding     │    │ Upsert       │               │
│  └──────────────┘    └──────────────┘    └──────────────┘               │
│         │                    │                    │                       │
│         └────────────────────┼────────────────────┘                        │
│                              ▼                                               │
│                   ┌─────────────────────┐                                  │
│                   │      ELT          │                                  │
│                   │  (Cloud DW)       │                                  │
│                   │  Load → Transform │                                  │
│                   └─────────────────────┘                                  │
│                                                                             │
│  역할: 데이터 통합 | 품질 확보 | DW 구축                                     │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

참고

  • ETL은 Extract(추출), Transform(변환), Load(적재) 3단계로 구성된다.
  • 이기종 데이터 소스의 통합과 데이터 품질 확보를 담당한다.
  • Full/Incremental/Log-based 등 다양한 추출 방식이 있다.
  • Transform에서 데이터 정제, encoding 통일, 차원 변환을 수행한다.
  • Cloud DW 시대에는 ELT(Extract-Load-Transform)로의 전환也在进行中이다.
  • ETL 파이프라인의 모니터링, 재시작, 오류 처리가 중요하다.