[Snowflake] Query Processing Layer

차지예·2026년 5월 6일

Snowflake

목록 보기
4/49
post-thumbnail

Snowflake 아키텍처 전체 구조 (복습)

Snowflake는 3개의 레이어가 완전히 분리된 구조로 이루어져 있습니다.

┌──────────────────────────────────┐
│      Cloud Services Layer        │  ← 인증, 메타데이터, 최적화
├──────────────────────────────────┤
│    Query Processing Layer        │  ← 💡 이번 포스트의 주제
├──────────────────────────────────┤
│       Storage Layer              │  ← 데이터 저장 (S3, Azure Blob 등)
└──────────────────────────────────┘

💡 핵심 포인트: 컴퓨팅(Query Processing)과 스토리지(Storage)가 완전히 분리되어 있어 각각 독립적으로 확장 가능합니다.


Virtual Warehouse란?

Query Processing Layer는 "Virtual Warehouse"로 구성됩니다.

A Virtual Warehouse is a named abstraction for a cluster of cloud-based compute instances that Snowflake manages.

쉽게 말하면:

  • SQL 쿼리를 실제로 실행하는 컴퓨팅 엔진
  • AWS EC2, Azure VM 같은 서버들을 Snowflake가 대신 프로비저닝하고 관리
  • 사용자는 아래 한 줄로 생성 가능
CREATE WAREHOUSE MY_WH WAREHOUSE_SIZE = LARGE;

Virtual Warehouse 내부 구조

하나의 Virtual Warehouse는 다음으로 구성됩니다.

┌─────────────────────────────────────┐
│         Virtual Warehouse        │
│                                  │
│  [CPU Node] [CPU Node] [CPU Node]│  ← 컴퓨팅 노드 (병렬 처리)
│                                  │
│   [Cache]   [Cache]   [Cache]    │  ← 로컬 디스크 캐시 (SSD)
└─────────────────────────────────────┘
                 │ 데이터 읽기/쓰기
                 ▼  
        ┌───────────────────┐
        │  Storage Layer  │ 
        └───────────────────┘

구성 요소 설명

구성 요소역할
CPU 노드쿼리를 병렬로 분산 처리
로컬 캐시 (SSD)자주 사용하는 데이터를 로컬에 저장 → 반복 쿼리 속도 향상
Storage Layer 연결실제 데이터는 Storage에서 읽어옴

Shared-Nothing 아키텍처

Underlying nodes of a Virtual Warehouse cooperate in a similar way to shared-nothing compute clusters making use of local caching.

  • 각 노드는 독립적인 캐시를 보유
  • 노드 간에 메모리/디스크를 공유하지 않음
  • 노드 하나가 느려져도 다른 노드에 영향 없음 → 고가용성

Virtual Warehouse의 핵심 특징 5가지

1. 즉시 생성 / 삭제 가능

-- 생성
CREATE WAREHOUSE MY_WH WAREHOUSE_SIZE = MEDIUM;

-- 삭제
DROP WAREHOUSE MY_WH;
  • 수 초 내에 생성 및 제거 가능
  • 필요할 때만 만들고, 끝나면 삭제 → 비용 최적화

2. 일시정지 (Pause) / 재개 (Resume) 가능

-- 일시정지 (비용 발생 중단)
ALTER WAREHOUSE MY_WH SUSPEND;

-- 재개
ALTER WAREHOUSE MY_WH RESUME;
  • Pause 상태에서는 크레딧(비용) 소모 없음
  • AUTO_SUSPEND 설정으로 일정 시간 미사용 시 자동 정지 가능
  • AUTO_RESUME 설정으로 쿼리 실행 시 자동 재개 가능
CREATE WAREHOUSE MY_WH
  WAREHOUSE_SIZE = SMALL
  AUTO_SUSPEND = 300       -- 5분 후 자동 정지
  AUTO_RESUME = TRUE;      -- 쿼리 시 자동 재개

3. 사실상 무제한 개수 생성 가능

  • 팀별, 용도별로 각각 독립적인 Virtual Warehouse 운영 가능
  • 각 Warehouse는 독립적인 설정을 가짐
  • 예시:
Warehouse 이름용도크기
ANALYTICS_WH데이터 분석팀Large
DEV_WH개발팀Small
ETL_WH데이터 파이프라인Medium
REPORTING_WH리포트 생성X-Small

4. T-shirt 사이즈 기반 컴퓨팅 파워 선택

Virtual Warehouse는 옷 사이즈처럼 크기를 선택합니다.

사이즈노드 수크레딧/시간사용 케이스
X-Small (XS)11간단한 쿼리, 개발 테스트
Small (S)22소규모 작업
Medium (M)44일반 분석
Large (L)88복잡한 쿼리
X-Large (XL)1616대규모 데이터 처리
2X-Large3232매우 큰 데이터셋
3X-Large6464엔터프라이즈급
4X-Large128128최대 규모

💡 크기를 2배 올리면 → 노드 수 2배, 처리 속도 약 2배, 비용 2배
즉, 빠른 처리가 필요하면 크기를 키우고, 비용을 줄이려면 크기를 낮춥니다.


5. 모든 Warehouse는 동일한 Storage에 접근

[ANALYTICS_WH] ──┐
                  ├──→ [ Storage Layer (같은 데이터) ]
[DEV_WH]       ──┘
  • 여러 Warehouse가 동시에 같은 데이터에 접근 가능
  • 한 팀이 무거운 쿼리를 실행해도 다른 팀의 쿼리 성능에 영향 없음
  • 데이터 복사 없이 즉시 공유 가능

실전 예시: Multi-Warehouse 운영

회사 데이터 팀 구성 예시:

데이터 분석팀 → ANALYTICS_WH (Large)  ─┐
BI/리포트팀   → REPORTING_WH (Medium) ─┼─→ 같은 Storage Layer
ETL 파이프라인 → ETL_WH (X-Large)    ─┘

→ 각자 독립적으로 쿼리 실행, 서로 간섭 없음!

반드시 기억할 것들

  1. Virtual Warehouse = 컴퓨팅 클러스터 (SQL 실행 담당)
  2. Shared-Nothing 구조 + 로컬 캐시 사용
  3. 생성/삭제/정지/재개 모두 즉시 가능
  4. 크기(Size) 가 컴퓨팅 파워와 비용을 결정
  5. 모든 Warehouse는 동일한 Storage Layer를 바라봄
  6. 컴퓨팅과 스토리지가 분리되어 독립적 확장 가능

0개의 댓글