Skip to main content

데이터 레이크 vs 데이터 웨어하우스

데이터 웨어하우스 (Data Warehouse)

데이터 웨어하우스는 분석을 위해 여러 소스의 정형 데이터를 통합 저장하는 시스템입니다. 1990년대부터 기업 분석(Business Intelligence)의 핵심이었습니다.
특성내용
스키마Schema-on-Write: 데이터를 저장하기 전에 스키마를 정의
데이터 형태정형 데이터 (SQL 테이블)
처리 방식OLAP (Online Analytical Processing)
저장 비용높음 (전용 스토리지 + 컴퓨팅)
성능SQL 분석에 최적화, 매우 빠름
유연성낮음 (스키마 변경 어려움)
대표 솔루션Teradata, Oracle, Snowflake, BigQuery, Redshift
장점: 높은 쿼리 성능, 강력한 거버넌스, ACID 트랜잭션, BI 도구와 완벽한 통합 단점: 비구조화 데이터 처리 불가, 높은 비용, 스키마 변경의 어려움

데이터 레이크 (Data Lake)

데이터 레이크는 정형, 반정형, 비정형 데이터를 원본 형태 그대로 저장하는 중앙 저장소입니다. 2010년대 Hadoop의 등장과 함께 대중화되었으며, 이후 클라우드 오브젝트 스토리지(S3, ADLS, GCS)가 그 역할을 대신하게 되었습니다.
특성내용
스키마Schema-on-Read: 데이터를 읽을 때 스키마를 적용
데이터 형태정형 + 반정형 + 비정형 모두 가능
저장 포맷CSV, JSON, Parquet, Avro, 이미지, 동영상 등
저장 비용낮음 (오브젝트 스토리지는 매우 저렴)
성능정형 데이터 쿼리는 웨어하우스보다 느릴 수 있음
유연성높음 (어떤 데이터든 원본 그대로 저장)
대표 솔루션AWS S3, Azure ADLS, Google GCS + Hadoop/Spark
장점: 유연성, 낮은 저장 비용, ML을 위한 비정형 데이터 지원, 오픈 포맷 단점: 데이터 품질 보장 어려움, ACID 없음, “데이터 늪(Data Swamp)” 위험
💡 데이터 늪(Data Swamp)이란? 레이크에 데이터를 마구 쌓기만 하고 거버넌스와 카탈로그가 부재하면, 어떤 데이터가 어디에 있는지, 신뢰할 수 있는 데이터인지 알 수 없게 됩니다. 많은 기업이 데이터 레이크 구축 후 “데이터는 많은데 쓸 수 있는 데이터는 없다”는 상황에 빠지는 원인입니다.

왜 레이크하우스 (Lakehouse)가 등장했는가

데이터 레이크와 데이터 웨어하우스는 각각 상충되는 장단점을 갖고 있습니다. 기업들은 두 가지를 모두 운영하는 경우가 많았는데, 이는 비용 중복, 데이터 복제, 동기화 지연 등의 문제를 야기했습니다.
기존 아키텍처의 문제점:

[소스 시스템] → [데이터 레이크 (S3)] → [ETL] → [데이터 웨어하우스 (Redshift)]
                      ↓ ML팀                              ↓ SQL 분석팀
                  (비정형 데이터)                       (정형 데이터)

문제: 같은 데이터가 레이크와 웨어하우스에 이중으로 존재
     → 비용 2배, 동기화 지연, 데이터 불일치 위험
레이크하우스 는 데이터 레이크의 저비용·유연성과 데이터 웨어하우스의 ACID 트랜잭션·성능·거버넌스를 단일 플랫폼에서 제공하는 개념입니다. Databricks가 2020년 논문과 함께 공식화했으며, Delta Lake가 핵심 기술입니다.
특성데이터 웨어하우스데이터 레이크레이크하우스
저장 비용높음낮음낮음
ACID 트랜잭션있음없음있음
스키마 강제있음없음있음 (선택적)
비정형 데이터불가가능가능
BI/SQL 성능매우 빠름느림빠름 (Photon/최적화)
ML/AI 지원제한적가능가능
데이터 복제필요원본 저장원본 저장
참고: Databricks: What is a Data Lakehouse? | 논문: Lakehouse: A New Generation of Open Platforms

테이블 포맷 전쟁 — Delta Lake vs Iceberg vs Hudi

왜 오픈 테이블 포맷이 필요한가

클라우드 오브젝트 스토리지(S3 등)에 데이터를 저장하면 비용이 낮지만, 기본적으로는 단순한 파일 저장소에 불과합니다. Parquet 파일을 S3에 저장하면:
  • ACID 없음: 두 작업이 동시에 파일을 수정하면 데이터 손상 가능
  • 업데이트/삭제 불가: Parquet은 불변(Immutable) 파일 포맷
  • 스키마 변경 어려움: 컬럼 추가/변경이 복잡
  • 타임 트래블 없음: 과거 데이터 조회 불가
오픈 테이블 포맷은 이런 문제를 해결하기 위해, Parquet 파일 위에 메타데이터 레이어 를 추가합니다. 실제 데이터는 Parquet으로 저장하되, 변경 이력, 스키마, 트랜잭션 로그를 별도로 관리합니다.

세 포맷 비교

특성Delta LakeApache IcebergApache Hudi
개발사Databricks (2019년 오픈소스화)Netflix → Apache (2020년)Uber → Apache (2020년)
ACID 트랜잭션있음있음있음
스키마 진화있음있음 (더 유연함)있음
타임 트래블있음있음있음
파티션 진화제한적매우 유연함있음
엔진 지원Spark 중심, 타 엔진 점진적 지원광범위 (Spark, Flink, Trino, Snowflake 등)Spark, Flink 중심
강점Spark 생태계, 성숙도, Databricks 통합엔진 독립성, 파티션 유연성증분 처리(Incremental Processing)
채택 현황Databricks, Microsoft FabricSnowflake, AWS, Google 지원Uber, 증분 처리 워크로드
Delta Lake의 핵심 기능
Delta Lake 디렉토리 구조:
/my-table/
  _delta_log/        ← 트랜잭션 로그 (JSON/Parquet)
    00000.json       ← 1번째 트랜잭션
    00001.json       ← 2번째 트랜잭션
    ...
  part-0000.parquet  ← 실제 데이터
  part-0001.parquet
  ...
  • Transaction Log: 모든 변경 사항을 JSON으로 기록하여 ACID 보장
  • Time Travel: VERSION AS OF n 또는 TIMESTAMP AS OF 'date' 구문으로 과거 스냅샷 조회
  • MERGE INTO: Upsert (Insert + Update) 연산을 단일 명령으로 처리
  • Z-Ordering: 자주 필터링하는 컬럼 기준으로 데이터를 클러스터링하여 쿼리 성능 향상
  • Auto Optimize / VACUUM: 소규모 파일 자동 병합, 오래된 파일 정리
Iceberg의 차별점 Iceberg는 Netflix가 수만 개의 테이블, PB급 데이터를 관리하면서 필요한 기능을 설계했습니다.
  • Hidden Partitioning: 파티션 컬럼을 쿼리에 명시하지 않아도 자동으로 최적화
  • Partition Evolution: 테이블 재작성 없이 파티션 전략 변경 가능
  • 엔진 독립: Spark, Flink, Trino, Hive, Snowflake 등 다양한 엔진이 동일한 Iceberg 테이블을 읽고 쓸 수 있음

UniForm — 테이블 포맷의 수렴

포맷 전쟁의 최종 결론은 “공존”입니다. Databricks는 UniForm (Universal Format) 을 통해 Delta Lake 테이블을 Iceberg 또는 Hudi 형식으로도 읽을 수 있게 지원합니다.
-- UniForm 활성화: Snowflake, Trino 등이 Delta 테이블을 Iceberg로 읽을 수 있음
CREATE TABLE my_table (id INT, name STRING)
TBLPROPERTIES ('delta.universalFormat.enabledFormats' = 'iceberg');
이는 벤더 종속(Vendor Lock-in) 우려를 줄이고, 멀티 엔진 환경에서 동일한 데이터를 공유할 수 있게 합니다. 참고: Delta Lake 공식 문서 | Apache Iceberg 공식 문서 | Databricks: UniForm

모던 데이터 스택 (Modern Data Stack)

개요

모던 데이터 스택 은 2010년대 후반 클라우드 네이티브 환경에서 부상한 데이터 파이프라인 아키텍처입니다. 핵심 원칙은 전문화 입니다. 하나의 대형 플랫폼 대신, 각 단계에서 최적의 도구를 조합(Best-of-Breed)합니다.
모던 데이터 스택의 전형적인 구성:

[소스] → [수집: Fivetran/Airbyte] → [저장: Snowflake/BigQuery/Databricks]

                               [변환: dbt] → [데이터 마트]

                              [BI: Tableau/Looker/Power BI]

ELT vs ETL

전통적인 데이터 파이프라인은 ETL (Extract → Transform → Load) 방식이었습니다. 소스에서 데이터를 추출하고, 별도의 변환 서버에서 처리한 뒤, 웨어하우스에 저장했습니다. 모던 데이터 스택에서는 ELT (Extract → Load → Transform) 가 표준입니다. 클라우드 웨어하우스의 처리 능력이 강력해지면서, 원본 데이터를 먼저 적재하고 웨어하우스 내부에서 SQL로 변환하는 방식이 더 효율적입니다.
비교ETLELT
변환 시점적재 전적재 후
변환 위치별도 서버웨어하우스 내부
도구SSIS, Informatica, Talenddbt + Snowflake/BigQuery/Databricks
유연성낮음 (스키마 변경 어려움)높음 (원본 항상 보존)
비용변환 서버 별도웨어하우스 컴퓨팅 비용

dbt (data build tool)

dbt 는 ELT의 T(Transform) 단계를 담당하는 오픈소스 SQL 변환 프레임워크입니다. 2016년 Fishtown Analytics(현 dbt Labs)에서 만들었습니다. 핵심 개념:
  • SQL SELECT 문으로 데이터 변환 모델을 정의
  • 모델 간 의존성을 자동으로 해결하여 올바른 순서로 실행
  • 데이터 테스트(Not Null, Unique, Referential Integrity 등) 내장
  • 문서화 자동 생성, 데이터 리니지(Lineage) 시각화
-- dbt 모델 예시: models/marts/orders_summary.sql
{{ config(materialized='table') }}

WITH orders AS (
    SELECT * FROM {{ ref('stg_orders') }}   -- 다른 dbt 모델 참조
),
customers AS (
    SELECT * FROM {{ ref('stg_customers') }}
)

SELECT
    o.order_id,
    c.customer_name,
    o.amount,
    o.created_at
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE o.status = 'completed'
💡 왜 dbt가 급성장했나? 기존에 데이터 변환은 Python이나 Spark를 잘 아는 엔지니어가 담당했습니다. dbt는 SQL을 아는 분석가도 직접 데이터 파이프라인을 관리할 수 있게 했고, Git 기반 버전 관리, 테스트, 문서화를 하나의 도구로 제공했습니다. “분석가의 소프트웨어 엔지니어링” 이라는 개념이 대중화된 것입니다.
참고: dbt 공식 문서 | dbt + Databricks 통합 가이드

Fivetran / Airbyte — 관리형 수집 도구

Fivetran 은 “EL(Extract-Load) as a Service”입니다. 400개 이상의 소스 커넥터를 제공하며, 스키마 변경 자동 감지, CDC(Change Data Capture), 데이터 정규화를 자동으로 처리합니다. Airbyte 는 Fivetran의 오픈소스 대안입니다. 자체 호스팅이 가능하며, 커스텀 커넥터 개발도 지원합니다.
비교FivetranAirbyteLakeflow Connect
유형SaaS오픈소스Databricks 관리형
커넥터 수400+300+주요 소스 집중
설치/운영불필요자체 관리불필요
비용행(row) 기준오픈소스 무료Databricks에 포함
최적 용도SaaS 소스 수집비용 절감, 커스텀Databricks 통합 환경

오케스트레이션 — Apache Airflow

Apache Airflow 는 Airbnb에서 2014년 개발한 오픈소스 워크플로우 오케스트레이션 도구입니다. 데이터 파이프라인을 DAG (Directed Acyclic Graph) 으로 정의하고, 스케줄링, 의존성 관리, 재시도, 알림을 처리합니다.
# Airflow DAG 예시
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime

with DAG('daily_etl', start_date=datetime(2024, 1, 1), schedule_interval='@daily') as dag:
    extract = PythonOperator(task_id='extract', python_callable=extract_data)
    transform = PythonOperator(task_id='transform', python_callable=transform_data)
    load = PythonOperator(task_id='load', python_callable=load_data)

    extract >> transform >> load  # 의존성 정의
현재는 Prefect, Dagster 같은 더 현대적인 대안도 많습니다. Databricks 환경에서는 Lakeflow Jobs 가 Airflow를 대체하거나 함께 사용됩니다.