[Snowflake] Storage Layer

차지예·2026년 5월 6일

Snowflake

목록 보기
3/49
post-thumbnail

목차

  1. Storage Layer 개요
  2. 무한 확장 & 고내구성
  3. 데이터 구조: DB → Schema → Table
  4. 지원 파일 포맷
  5. 내부 저장 방식: 컬럼형 압축 포맷
  6. 과금 방식
  7. 데이터 접근: SQL Only
  8. 핵심 요약

1. Storage Layer 개요

Snowflake는 스토리지 / 컴퓨팅 / 클라우드 서비스 3개 레이어로 구성된 아키텍처를 가진다.
그 중 Storage Layer는 실제 데이터가 저장되는 최하단 계층이다.

Cloud Services Layer
        ↓
Compute Layer (Virtual Warehouse)
        ↓
Storage Layer  ← 여기!
        ↓
AWS S3 / Azure Blob Storage / GCP Cloud Storage

💡 핵심 포인트
Snowflake는 자체 스토리지 하드웨어를 보유하지 않는다.
AWS S3, Azure Blob Storage, GCP Cloud Storage 같은 클라우드 제공업체의 오브젝트 스토리지 위에서 동작한다.


2. 무한 확장 & 고내구성

클라우드 오브젝트 스토리지 위에서 동작하기 때문에 두 가지 강력한 특성을 자동으로 얻는다.

특성내용
확장성용량 제한 없이 무한 확장 가능
내구성99.9999999% (eleven nines) — AWS S3 기준

💡 왜 내구성이 높은가?
Snowflake 자체가 내구성을 만드는 것이 아니라, AWS S3의 내구성을 by proxy(위임) 방식으로 그대로 받는다.
즉, Snowflake 사용자는 자동으로 클라우드 제공업체의 SLA 보장을 받는다.


3. 데이터 구조: DB → Schema → Table

Snowflake에 올라간 데이터는 전통적인 관계형 DB와 동일한 3단계 계층 구조로 관리된다.

Database
  └── Schema A
  │     ├── Table 1
  │     └── Table 2
  └── Schema B
        ├── Table 3
        └── Table 4

MySQL이나 PostgreSQL을 사용해 본 경험이 있다면 바로 익숙한 구조다.
USE DATABASEUSE SCHEMASELECT * FROM table 순서로 접근한다.


4. 지원 파일 포맷

외부에서 데이터를 적재(Load)할 때 정형 데이터와 반정형 데이터 모두 지원한다.

정형 데이터 (Structured)

포맷설명
CSV쉼표로 구분된 텍스트 파일, 가장 일반적인 정형 데이터 포맷

반정형 데이터 (Semi-structured)

포맷설명
JSON키-값 쌍 기반의 유연한 데이터 포맷
Avro스키마 포함 바이너리 직렬화 포맷 (Kafka와 주로 사용)
ORCHadoop 생태계의 컬럼형 스토리지 포맷
ParquetApache 계열의 컬럼형 스토리지 포맷 (분석에 최적화)
XML태그 기반 마크업 언어

💡 반정형 데이터(Semi-structured)란?
스키마가 고정되지 않은 유연한 구조의 데이터.
JSON처럼 키-값 쌍으로 이루어져 있고, 필드가 행마다 다를 수 있다.
Snowflake는 VARIANT 타입으로 이를 저장하고 SQL로 쿼리할 수 있게 지원한다.


5. 내부 저장 방식: 컬럼형 압축 포맷

파일을 업로드하거나 INSERT를 실행하면, Snowflake는 데이터를 원본 포맷 그대로 보관하지 않고
자체적인 압축 컬럼형(Columnar) 파일 포맷으로 자동 변환해서 저장한다.

Row 저장 vs Column 저장 — 왜 컬럼형이 유리한가?

Row-oriented (전통 RDBMS)

[id=1, name=Kim, age=25]
[id=2, name=Lee, age=30]
[id=3, name=Park, age=22]

Column-oriented (Snowflake)

[id:   1,   2,    3  ]
[name: Kim, Lee,  Park]
[age:  25,  30,   22  ]

분석 쿼리는 보통 전체 행이 아니라 특정 컬럼 몇 개만 읽는다.
컬럼형은 필요한 컬럼만 I/O하므로 쿼리가 빠르고 압축률도 높다.


5-1. 마이크로 파티션(Micro-Partition)

데이터가 저장될 때 Snowflake는 자동으로 데이터를 마이크로 파티션이라는 작은 단위로 나눠서 보관한다.

┌────┬────┬────┬────┬────┬────┬────┬─────┐
│ P1 │ P2 │ P3 │ P4 │ P5 │ P6 │ P7 │ ... │
└────┴────┴────┴────┴────┴────┴────┴─────┘
항목내용
파티션 크기 (압축 전)50 ~ 500 MB
파티션 지정 방식자동 (사용자가 직접 설정 불필요)
저장 방식각 파티션 내부도 컬럼형으로 저장

💡 Partition Pruning — 마이크로 파티션이 쿼리 성능에 미치는 영향
쿼리를 실행하면 Snowflake는 조건에 맞는 파티션만 골라서 읽는다.
예를 들어 WHERE date = '2025-01-01' 조건이면, 해당 날짜 데이터가 있는 파티션만 스캔하므로
전체 데이터를 읽지 않아도 되어 성능이 크게 향상된다.


6. 과금 방식

스토리지 비용은 쿼리 횟수와 무관하게 저장된 데이터의 용량 기준 월정액으로 청구된다.

비용 = 저장된 데이터 용량(TB) × 단가($/TB/월)

📌 예시 요금 (AWS 유럽 런던 리전 기준)
$42.00 / TB / 월
실제 사용 리전과 클라우드 제공업체에 따라 가격이 다르므로 반드시 공식 가격표를 확인해야 한다.

⚠️ 주의: Time Travel & Fail-safe 비용
Snowflake는 변경/삭제된 데이터도 일정 기간 보관하는 Time Travel(최대 90일)과 Fail-safe 기능을 제공한다.
이 보존 데이터도 스토리지 비용에 포함되므로 비용 계획 시 반드시 고려해야 한다.


7. 데이터 접근: SQL Only

스토리지 레이어의 데이터는 S3 버킷에 직접 접근하는 방식으로는 열 수 없다.
반드시 SQL 명령어를 통해서만 접근 가능하다.

-- 테이블 전체 조회
SELECT * FROM my_table;

-- 특정 컬럼만 조회
SELECT user_id, created_at
FROM my_table
WHERE created_at >= '2025-01-01';

💡 왜 SQL만 허용하는가?
내부 파일이 Snowflake 고유 포맷으로 변환되어 있어 외부에서 직접 열어도 읽을 수 없다.
이 추상화 덕분에 사용자는 파일 포맷이나 파티션 구조를 전혀 신경 쓰지 않고 SQL만으로 데이터를 다룰 수 있다.


8. 핵심 요약

항목내용
저장 위치클라우드 Blob Storage (AWS S3 등) — 위임 구조
확장성무제한 (자동)
내구성99.9999999% (eleven nines, AWS S3 기준)
저장 포맷독자 압축 컬럼형(Columnar) 포맷 — 자동 변환
파티셔닝마이크로 파티션 (50~500MB) — 자동
지원 입력 포맷CSV, JSON, Avro, ORC, Parquet, XML
과금 기준저장 용량 × 월정액 (쿼리 횟수 무관)
데이터 접근SQL 명령어만 가능 (직접 파일 접근 불가)

  1. 컬럼형 저장 방식 — 왜 분석 쿼리에 유리한지 이해하기
  2. 마이크로 파티션의 Partition Pruning — 쿼리 성능 향상 메커니즘
  3. 과금이 쿼리 횟수와 무관 — 저장 용량 기준 월정액 청구

0개의 댓글