본문으로 건너뛰기
김신건의 로그

데이터 레이크

· 수정 · 📖 약 5분 · 2,002자/단어 #data-engineering #data-lake #s3 #big-data #storage #analytics
Data Lake, 데이터레이크, S3 data lake, medallion architecture

정의

데이터 레이크 (Data Lake) 는 구조 여부와 무관하게 모든 종류의 데이터를 원본 형식 그대로 저장하는 중앙 저장소. 스키마를 미리 강제하지 않고 (schema-on-read), 필요할 때 쿼리 엔진 / 프레임워크가 스키마를 해석. S3 / GCS / Azure Data Lake Storage 가 사실상 표준 백엔드.

핵심 대비: 데이터 웨어하우스schema-on-write (미리 정제된 데이터), 데이터 레이크는 schema-on-read (원본 저장 후 해석).

왜 데이터 레이크인가

전통 DW 만으로는 부족한 이유:

  • 비정형 / 반정형 데이터 (로그, JSON, 이미지, 오디오, 비디오) 를 DW 에 넣기 어려움
  • DW 저장은 비쌈, 원본 raw 를 모두 DW 에 두면 비용 폭발
  • ML 학습은 종종 원본 그대로 가 필요 (변환된 것이 아닌)
  • 데이터 소스가 폭증 -> 스키마 강제가 병목

데이터 레이크의 답:

  • S3 같은 저비용 객체 스토리지에 원본 그대로 저장
  • 소비 시점에 필요한 엔진이 스키마 해석 (Athena SQL, EMR Spark, ML 학습)
  • 여러 워크로드가 같은 데이터 한 벌 을 공유

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

Data LakeData Warehouse
주 저장원본 파일 (Parquet, JSON, CSV, 이미지, …)정제된 컬럼형 테이블
스키마Schema-on-readSchema-on-write
엔진다양 (Athena, EMR, Spark, Presto)자체 SQL (Redshift, BigQuery)
데이터 종류구조 + 반구조 + 비구조 (전부)구조 (테이블)
저장 비용매우 저렴 (S3 $0.023/GB)비쌈 (Redshift RMS 등)
컴퓨트 비용쿼리별 과금 (스캔량)클러스터 시간
워크로드ML, batch, 로그, 애드혹BI, 대시보드, SQL 분석
트랜잭션없음 (원시), Iceberg/Delta 로 가능ACID
거버넌스어려움 (Lake Formation)성숙
거버넌스 안 잡히면data swamp사일로
대표 스택S3 + Glue + AthenaRedshift / Snowflake / BigQuery

현대적 결론: 둘 중 하나 가 아님. Lakehouse 로 통합하는 방향 (아래).

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

flowchart TB
    subgraph DW["Data Warehouse (전통)"]
        DW_S["정제된 컬럼형 저장"]
        DW_E["자체 SQL 엔진"]
        DW_A["ACID 트랜잭션"]
    end

    subgraph DL["Data Lake (2010s)"]
        DL_S["원본 파일 저장<br/>Parquet/JSON/Image"]
        DL_E["여러 엔진 (Athena, Spark, ...)"]
        DL_N["트랜잭션 없음"]
    end

    subgraph LH["Data Lakehouse (현재)"]
        LH_S["원본 파일 저장 + 트랜잭션 메타"]
        LH_F["Iceberg / Delta / Hudi"]
        LH_A["ACID + Time travel + Schema evolution"]
    end

    DW -.-> LH
    DL -.-> LH

Lakehouse = 데이터 레이크의 유연성 + DW 의 트랜잭션/거버넌스. Apache Iceberg, Delta Lake, Apache Hudi 같은 오픈 테이블 포맷이 핵심.

데이터 조직화: 계층 (Zones)

원본 그대로 다 섞이면 data swamp 가 됨. 계층을 나누는 것이 표준.

Medallion (Databricks 대중화)

계층별칭내용
BronzeRaw소스에서 온 그대로. 재처리 가능하도록 immutable
SilverCleaned타입 정리, dedup, join 가능한 상태
GoldCurated비즈니스 도메인별 aggregate. BI 소비

Kimball 스타일 (전통 DW 관용)

계층내용
Landing / Staging원본 착륙
Core / Integrated정규화된 통합 저장
Marts비즈니스별 fact/dim

둘은 사실상 같은 개념. 이름과 표기가 다를 뿐.

표준 아키텍처 (AWS 위)

flowchart LR
    subgraph Sources
        DB[("RDS/Aurora")]
        Kafka[Kinesis/MSK]
        Logs[Application Logs]
        SaaS["SaaS API"]
        Files["파일 업로드"]
    end

    Sources -->|"Extract"| Bronze["S3 Bronze/<br/>(raw)"]
    Bronze -->|"Glue Spark"| Silver["S3 Silver/<br/>(Parquet, cleaned)"]
    Silver -->|"CTAS / Spark"| Gold["S3 Gold/<br/>(aggregates)"]

    Catalog[("Glue Data Catalog")] -.->|"schema"| Bronze
    Catalog -.-> Silver
    Catalog -.-> Gold

    Gold --> Athena["Athena SQL"]
    Gold --> Spectrum["Redshift Spectrum"]
    Gold --> EMR["EMR Spark"]
    Gold --> SM["SageMaker ML"]
    Athena --> BI[QuickSight]

    LF["Lake Formation<br/>(권한/거버넌스)"] -.-> Catalog

오픈 테이블 포맷 (Lakehouse 의 핵심)

포맷특징지원 엔진
Apache IcebergAWS/Netflix 표준화, hidden partitioning, schema evolution, snapshotAthena, EMR, Spark, Trino, Flink
Delta LakeDatabricks 원류, transaction log, time travelSpark, EMR, Databricks
Apache HudiUber 원류, upsert 최적화, streaming ingestSpark, Flink, EMR

공통 기능:

  • ACID 트랜잭션 (concurrent read/write)
  • Time travel (스냅샷 이력)
  • Schema evolution (컬럼 추가/제거)
  • Hidden partitioning (사용자가 파티션 계산 안 해도 됨)
  • Compaction / vacuum (small files 자동 관리)

2024 이후 방향: S3 Tables (관리형 Iceberg), Snowflake Iceberg 지원, Redshift + Iceberg, Databricks + UniForm.

S3 데이터 레이크 파일 구조 관용

s3://company-data-lake/
├── bronze/                              # raw
│   ├── source=rds_orders/
│   │   └── year=2026/month=07/day=30/
│   │       └── part-00000.parquet
│   ├── source=kinesis_events/
│   │   └── year=2026/month=07/day=30/hour=15/
├── silver/                              # cleaned
│   ├── db=analytics/table=orders/
│   │   └── year=2026/month=07/
│   │       └── part-00000.parquet
├── gold/                                # marts
│   ├── db=marts/table=daily_sales/
├── _catalog/                            # Iceberg/Delta metadata
├── _archive/                            # 오래된 raw (Glacier lifecycle)
└── _tmp/                                # 임시 (life 3d)

파티션 관용:

  • 시계열: year=YYYY/month=MM/day=DD
  • 다중 소스: source=xxx/year=.../...
  • 테이블 단위: db=xxx/table=yyy/

데이터 레이크 성숙도 단계

  1. Raw dump: 소스에서 그대로. 카탈로그 없음. -> data swamp 위험.
  2. Cataloged: Glue Catalog 로 스키마 등록. Athena 로 쿼리 가능.
  3. Zoned: Bronze/Silver/Gold 계층. 정제/승격 프로세스.
  4. Governed: Lake Formation 로 세분화 권한, PII 관리, lineage.
  5. Lakehouse: Iceberg/Delta 로 트랜잭션, time travel, BI/ML 통합.

흔한 실패 패턴: Data Swamp

정제/카탈로그/권한 없이 데이터만 쌓임 -> 아무도 못 씀.

증상:

  • 팀마다 다른 파일을 “orders” 로 부름
  • 파일이 수백만 개 (small files)
  • CSV 파일이 컬럼 순서/개수 다름
  • PII 가 사방에 흩어짐
  • 누가 언제 만든 파일인지 모름

예방:

  • 데이터 계약 (contract): 소스와 파이프라인 간 스키마/의미 합의
  • Glue Catalog 등록 필수
  • Compaction job: 작은 파일 -> 256 MB+
  • Lifecycle 정책: 오래된 raw 는 Glacier
  • PII 스캔: Macie 등으로 자동 탐지
  • 소유자 (owner) 태그: 모든 폴더/테이블에

파일 포맷 선택

데이터 종류포맷이유
이벤트 스트림 원본JSON / ParquetJSON = 유연, Parquet = 쿼리 빠름
분석용 정제 데이터Parquet + ZSTD압축 + 컬럼 프루닝
트랜잭션 필요Iceberg / Delta (Parquet 위)ACID + time travel
임시 / debugCSV / JSON사람이 읽기 편함
이미지 / 오디오원본 (binary)압축 이미 되어 있음
ML 학습 tensorParquet / TFRecord / WebDataset병렬 read

성능 & 비용의 3 축

  1. 파일 포맷 - Parquet vs CSV 는 Athena 스캔비에서 10-100배 차이
  2. 파티션 프루닝 - 시계열 파티션으로 스캔 대상 축소
  3. 파일 크기 - 256 MB - 1 GB 범위 (small files 회피)

자세히: Apache Parquet, Athena 함정 섹션.

스토리지 계층화 (Lifecycle)

Raw 를 영구 보관하되 비용을 줄이는 관용:

Bronze/ (30일)     : S3 Standard
Bronze/ (90일)     : S3 Standard-IA
Bronze/ (1년+)     : S3 Glacier Flexible Retrieval
Bronze/ (7년+)     : S3 Glacier Deep Archive
Silver/            : Standard (자주 read)
Gold/              : Standard

자세히: S3 Glacier, S3 Lifecycle.

데이터 레이크 서비스 (AWS)

컴포넌트서비스
저장S3, S3 Glacier
카탈로그AWS Glue Data Catalog
ETLGlue Spark, EMR, Databricks
거버넌스Lake Formation
쿼리 (SQL)Athena, Redshift Spectrum
쿼리 (Spark)EMR, Glue Spark
인제스션Kinesis, Glue CDC, DMS
BIQuickSight
MLSageMaker
PII 감지Macie
관리형 IcebergS3 Tables (2024+)

함정

WARNING

원본만 쌓고 계층/카탈로그 없음 = data swamp. 처음부터 zone (Bronze/Silver/Gold) + Glue Catalog 등록을 강제하는 파이프라인 규약 필요.

CAUTION

CSV / JSON 을 그대로 유지 = 다운스트림 (Athena, Spectrum) 이 매번 10-100배 스캔량. Silver 계층으로 승격할 때 반드시 Parquet 로.

WARNING

PII 무분별 저장 = 규제 위반 (GDPR, KISA). 로드 전 masking / tokenization, Macie 로 지속 탐지, Lake Formation 로 컬럼 접근 제어.

IMPORTANT

Small files 문제 를 무시 = 파티션 세분화 + 스트리밍 flush 로 수백만 파일 = 성능/비용 폭탄. Compaction job 필수, 또는 Iceberg auto-compact.

CAUTION

트랜잭션 없이 UPDATE/DELETE 필요 = 원본 파일을 다시 쓰다가 partial write / 동시성 문제. Iceberg / Delta 로 승격.

WARNING

접근 제어를 IAM/버킷 정책만으로 = 컬럼/row 단위 제어 불가. Lake Formation 로 세분화.

IMPORTANT

“Data Lake vs Warehouse” 이분법 오류. 현대는 lakehouse 로 병합. DW 는 Gold 계층의 특수 형태로 볼 수 있음.

CAUTION

lineage 없음 = 컬럼 값이 어디서 왔는지 추적 불가 -> 사고 시 원인 파악 불가. Glue Catalog + dbt docs / OpenLineage / Marquez.

관련 위키

이 글의 용어 (11개)
[AWS] Amazon Redshiftcloud
정의 Amazon Redshift 는 AWS 가 관리하는 페타바이트 규모 컬럼형 데이터 웨어하우스 입니다. 2012년 PostgreSQL 8.0.2 를 기반으로 시작해 MPP (…
[AWS] Athena: 서버리스 SQL on S3cloud
정의 Amazon Athena 는 S3 에 있는 데이터를 서버 없이 SQL 로 쿼리 하는 서비스. 클러스터 프로비저닝, 스키마 로딩, 인덱스 생성 없이 데이터 파일 (Parque…
[AWS] EMR: 관리형 빅데이터 클러스터cloud
정의 Amazon EMR (Elastic MapReduce) 은 Hadoop / Spark 등 오픈소스 빅데이터 프레임워크를 관리형 클러스터로 제공 하는 AWS 서비스. AWS …
[AWS] Glue: 서버리스 ETL + Data Catalogcloud
정의 AWS Glue 는 서버리스 ETL + 통합 메타데이터 카탈로그 플랫폼. Apache Spark 로 데이터 변환을 실행하고, Hive 호환 Data Catalog 로 스키마…
[AWS] Lake Formation: Data Lake 거버넌스cloud
정의 AWS Lake Formation (LF) 은 데이터 레이크 의 세분화된 접근 제어 + 거버넌스를 중앙에서 관리 하는 서비스. Glue Data Catalog 위에 얹혀 데…
[AWS] Redshift Spectrum: S3 데이터 직접 쿼리cloud
정의 Redshift Spectrum 은 Redshift 에서 S3 에 있는 데이터를 로드하지 않고 직접 SQL 로 쿼리 하는 기능. 별도 Spectrum 실행 계층 (Spect…
[AWS] S3 Glacier: Instant / Flexible / Deep Archivecloud
정의 Amazon S3 Glacier 는 S3 의 장기 아카이빙 스토리지 클래스 3종. 자주 접근하지 않는 데이터를 극도로 저렴하게 (Standard 대비 최대 95% 절감) 저…
[AWS] S3: object storage, storage classes, lifecyclecloud
정의 S3 = AWS 의 object storage. bucket + key + object. 11 9's durability (99.999999999%), 무한 확장. 2026…
데이터 웨어하우스data-engineering
정의 데이터 웨어하우스 (Data Warehouse, DW) 는 여러 운영 시스템에서 흘러 들어온 이력 데이터를 통합해, 대규모 분석 쿼리를 빠르게 실행하도록 최적화된 중앙 저장…
Apache Parquetdata-engineering
정의 Apache Parquet 은 분석 쿼리에 최적화된 오픈소스 컬럼형 이진 파일 포맷. 2013년 Twitter + Cloudera 가 Google Dremel 논문 (201…
ETL / ELTdata-engineering
정의 ETL = Extract (추출) + Transform (변환) + Load (적재). 여러 소스에서 데이터를 뽑아 정제한 뒤 데이터 웨어하우스 에 저장하는 파이프라인. E…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기