Snowflake는 3개의 레이어가 완전히 분리된 구조로 이루어져 있습니다.
┌──────────────────────────────────┐
│ Cloud Services Layer │ ← 인증, 메타데이터, 최적화
├──────────────────────────────────┤
│ Query Processing Layer │ ← 💡 이번 포스트의 주제
├──────────────────────────────────┤
│ Storage Layer │ ← 데이터 저장 (S3, Azure Blob 등)
└──────────────────────────────────┘
💡 핵심 포인트: 컴퓨팅(Query Processing)과 스토리지(Storage)가 완전히 분리되어 있어 각각 독립적으로 확장 가능합니다.
Query Processing Layer는 "Virtual Warehouse"로 구성됩니다.
A Virtual Warehouse is a named abstraction for a cluster of cloud-based compute instances that Snowflake manages.
쉽게 말하면:
CREATE WAREHOUSE MY_WH WAREHOUSE_SIZE = LARGE;
하나의 Virtual Warehouse는 다음으로 구성됩니다.
┌─────────────────────────────────────┐
│ Virtual Warehouse │
│ │
│ [CPU Node] [CPU Node] [CPU Node]│ ← 컴퓨팅 노드 (병렬 처리)
│ │
│ [Cache] [Cache] [Cache] │ ← 로컬 디스크 캐시 (SSD)
└─────────────────────────────────────┘
│ 데이터 읽기/쓰기
▼
┌───────────────────┐
│ Storage Layer │
└───────────────────┘
| 구성 요소 | 역할 |
|---|---|
| CPU 노드 | 쿼리를 병렬로 분산 처리 |
| 로컬 캐시 (SSD) | 자주 사용하는 데이터를 로컬에 저장 → 반복 쿼리 속도 향상 |
| Storage Layer 연결 | 실제 데이터는 Storage에서 읽어옴 |
Underlying nodes of a Virtual Warehouse cooperate in a similar way to shared-nothing compute clusters making use of local caching.
-- 생성
CREATE WAREHOUSE MY_WH WAREHOUSE_SIZE = MEDIUM;
-- 삭제
DROP WAREHOUSE MY_WH;
-- 일시정지 (비용 발생 중단)
ALTER WAREHOUSE MY_WH SUSPEND;
-- 재개
ALTER WAREHOUSE MY_WH RESUME;
AUTO_SUSPEND 설정으로 일정 시간 미사용 시 자동 정지 가능AUTO_RESUME 설정으로 쿼리 실행 시 자동 재개 가능CREATE WAREHOUSE MY_WH
WAREHOUSE_SIZE = SMALL
AUTO_SUSPEND = 300 -- 5분 후 자동 정지
AUTO_RESUME = TRUE; -- 쿼리 시 자동 재개
| Warehouse 이름 | 용도 | 크기 |
|---|---|---|
ANALYTICS_WH | 데이터 분석팀 | Large |
DEV_WH | 개발팀 | Small |
ETL_WH | 데이터 파이프라인 | Medium |
REPORTING_WH | 리포트 생성 | X-Small |
Virtual Warehouse는 옷 사이즈처럼 크기를 선택합니다.
| 사이즈 | 노드 수 | 크레딧/시간 | 사용 케이스 |
|---|---|---|---|
| X-Small (XS) | 1 | 1 | 간단한 쿼리, 개발 테스트 |
| Small (S) | 2 | 2 | 소규모 작업 |
| Medium (M) | 4 | 4 | 일반 분석 |
| Large (L) | 8 | 8 | 복잡한 쿼리 |
| X-Large (XL) | 16 | 16 | 대규모 데이터 처리 |
| 2X-Large | 32 | 32 | 매우 큰 데이터셋 |
| 3X-Large | 64 | 64 | 엔터프라이즈급 |
| 4X-Large | 128 | 128 | 최대 규모 |
💡 크기를 2배 올리면 → 노드 수 2배, 처리 속도 약 2배, 비용 2배
즉, 빠른 처리가 필요하면 크기를 키우고, 비용을 줄이려면 크기를 낮춥니다.
[ANALYTICS_WH] ──┐
├──→ [ Storage Layer (같은 데이터) ]
[DEV_WH] ──┘
회사 데이터 팀 구성 예시:
데이터 분석팀 → ANALYTICS_WH (Large) ─┐
BI/리포트팀 → REPORTING_WH (Medium) ─┼─→ 같은 Storage Layer
ETL 파이프라인 → ETL_WH (X-Large) ─┘
→ 각자 독립적으로 쿼리 실행, 서로 간섭 없음!
✅ 반드시 기억할 것들