1. Snowflake란?
Snowflake는 완전 관리형(Managed) 클라우드 데이터 플랫폼으로, 데이터 웨어하우징, 데이터 레이크, 데이터 공유 및 머신러닝/애널리틱스 워크로드를 위한 단일 서비스를 제공합니다. 전통적인 아키텍처와 달리 스토리지와 컴퓨팅이 분리되어 독립적으로 확장 가능하며, SQL 기반의 인터페이스를 제공합니다.
분리된 스토리지 & 컴퓨팅
데이터 스토리지 비용과 쿼리/변환 컴퓨팅 비용이 독립적입니다. 웨어하우스(가상 웨어하우스)를 필요할 때만 실행/중지하여 비용을 최적화할 수 있습니다.
다중 클라우드 네이티브
AWS, Azure, GCP 중 선택하여 배포 가능하며, 동일한 경험과 기능을 제공합니다. 리전 간 데이터 복제 및 페일오버도 지원합니다.
데이터 공유 & 마켓플레이스
보안된 방식으로 계정 간 라이브 데이터를 공유할 수 있습니다. 데이터 마켓플레이스를 통해 외부 데이터 세트를 바로 활용 가능합니다.
2. 왜 써야 하는가? (기존 대안과 비교)
| 솔루션 | 장점 | 단점 (vs Snowflake) | 적합한 경우 |
|---|---|---|---|
| Snowflake | 완전 관리형, 스토리지/컴퓨팅 분리, 자동 스케일링, 다중 클라우드, 시간 여행/제로 카피 클론, 보안 데이터 공유 | 비용이 상대적으로 높을 수 있음, 벤더 락인 가능성 | 빠른 프로토타이핑, 변동성 큰 워크로드, 다팀/다중 클라우드 환경, 데이터 마켓플레이스 활용 |
| 전통 RDBMS (Redshift, BigQuery, Synapse) | 높은 성숙도, 특정 클라우드에 깊은 통합, 특정 패턴에서 매우 효율적 | 컴퓨팅-스토리지 결합으로 인한 비용 비효율, 관리 부담(Redshift), 확장성 제한 | 예측 가능한 워크로드, 특정 클라우드 생태계 깊은 활용, 매우 큰 배치 처리(BigQuery) |
| 오픈소스 (PostgreSQL, Trino + HDFS/S3) | 비용 통제력 높음, 커스터마이징 자유도 극대화, 벤더 락인 회피 | 운영/관리/튜닝 부담 큼, 통합 및 보안 구현 복잡, 전문 인력 필요 | 예산 제약 심함, 특수한 요구사항 존재, 인하우스 전문팀 보유 |
3. 핵심 개념
아키텍처 다이어그램
주요 용어
- 가상 웨어하우스 (Virtual Warehouse): 쿼리 실행을 위한 컴퓨팅 클러스터. 크기와 개수를 선택/조정.
- 데이터베이스 & 스키마: 전통적인 RDBMS의 Database > Schema > Table 구조와 유사.
- 스테이지 (Stage): 데이터를 업로드/다운로드할 수 있는 위치 (내부/외부).
- 파일 형식 (File Format): CSV, JSON, Parquet, Avro 등 로드/언로드 시 형식 정의.
- 시간 여행 (Time Travel): 지난 특정 시점(최대 90일)의 데이터 상태를 쿼리 가능.
- 제로 카피 클론 (Zero-Copy Clone): 데이터를 복사하지 않고 메타데이터만 복제하여 테스트/백업.
4. 퀵스타트
Step 1: 설치 및 연결 (Python)
Snowflake Connector for Python 설치
pip install snowflake-connector-python pandas
Step 2: 계정 연결 설정
계정 URL, 사용자, 비밀번호, 역할, 웨어하우스, 데이터베이스, 스키마 정보를 준비합니다.
Step 3: 첫 연결 및 쿼리 실행
import snowflake.connector
import pandas as pd
# 연결 설정
conn = snowflake.connector.connect(
user='YOUR_USERNAME',
password='YOUR_PASSWORD',
account='your_account_identifier', # e.g., xy12345.ap-northeast-2
warehouse='COMPUTE_WH',
database='SNOWFLAKE_SAMPLE_DATA',
schema='TPCH_SF1',
role='SYSADMIN'
)
# 쿼리 실행
try:
cur = conn.cursor()
cur.execute("SELECT N_NAME, SUM(O_TOTALPRICE) as total \
FROM ORDERS o JOIN CUSTOMER c ON o.O_CUSTKEY = c.C_CUSTKEY \
JOIN NATION n ON c.C_NATIONKEY = n.N_NATIONKEY \
GROUP BY N_NAME ORDER BY total DESC LIMIT 10;")
results = cur.fetchall()
for row in results:
print(row)
finally:
cur.close()
conn.close()
Step 4: CLI (SnowSQL)에서 작업
# 설치 (macOS 예시)
brew install snowflake-snowsql
# 연결
snowsql -a your_account_identifier -u YOUR_USERNAME
# 웨어하우스, DB, 스키마 설정
USE WAREHOUSE COMPUTE_WH;
USE DATABASE MY_DB;
USE SCHEMA PUBLIC;
# 테이블 생성 및 데이터 로드
CREATE OR REPLACE TABLE users (id INT, name STRING, email STRING);
INSERT INTO users VALUES (1, 'John Doe', 'john@example.com');
SELECT * FROM users;
5. 핵심 설정 레퍼런스
| 설정 항목 | 권장값/옵션 | 설명 |
|---|---|---|
| WAREHOUSE SIZE | X-Small, Small, Medium, Large, ... | 작업 부하에 맞춰 선택. 작은 웨어하우스 여러 개 vs 큰 웨어하우스 하나 고려. |
| AUTO_SUSPEND | 60 ~ 300 (초) | 유휴 시간 후 웨어하우스 자동 중지. 비용 절감 핵심. 개발용은 짧게, 프로덕션은 길게. |
| AUTO_RESUME | TRUE (기본값) | 쿼리 요청 시 웨어하우스 자동 재개. 일반적으로 TRUE 유지. |
| SCALING POLICY | STANDARD, ECONOMY | ECONOMY는 추가 클러스터 시작을 더 오래 기다려 비용 절감. |
| DATA_RETENTION_TIME_IN_DAYS | 1 (기본), 최대 90 | Time Travel 및 Fail-safe 보관 기간. 기간 길수록 스토리지 비용 증가. |
| CLONE | ZERO-COPY | CREATE TABLE dev_table CLONE prod_table; 메타데이터만 복제, 즉시 생성. |
6. 실무 팁 & 트러블슈팅
처음에는 X-Small 또는 Small로 시작하고, 쿼리 성능을 모니터링하며 조정하세요. 많은 소형 쿼리가 동시에 실행된다면, Medium 하나보다 Small 여러 개(Multi-cluster)가 더 효율적일 수 있습니다.
Snowflake는 자동 마이크로 파티셔닝을 사용합니다. 대용량 테이블의 쿼리 성능을 높이려면 자주 조인되거나 필터링되는 컬럼을 CLUSTER BY 키로 지정하세요.
CREATE OR REPLACE TABLE large_table (...) CLUSTER BY (date_key, customer_id);
원인: 웨어하우스 크기 부족, 클러스터링 키 미설정, 비효율적 쿼리(과도한 조인, SELECT *).
해결: 웨어하우스 크기 업스케일, 클러스터링 키 설정, 쿼리 프로파일링(QUERY_PROFILE) 확인 후 최적화.
원인: 웨어하우스 AUTO_SUSPEND 설정 없음(24시간 가동), 너무 큰 웨어하우스 사용, 불필요한 데이터 복제.
해결: AUTO_SUSPEND 300초 이하로 설정, 웨어하우스 크기 다운스케일 검토, Time Travel 기간 줄이기.
INSERT 문보다 내부/외부 스테이지에서 COPY 명령어를 사용하면 훨씬 빠르고 효율적입니다.
COPY INTO my_table
FROM @my_internal_stage/data_files/
FILE_FORMAT = (TYPE = 'PARQUET')
PATTERN = '.*[.]parquet';
7. 참고 자료
- 📚 공식 문서 (Snowflake Documentation) - 가장 상세하고 최신의 정보원
- 💬 Snowflake Community - Q&A 및 사용자 사례
- 🛒 Snowflake Data Marketplace - 공개 데이터셋 탐색
- 🐍 Python Connector GitHub - 커넥터 소스코드 및 이슈
- 🚀 Snowflake Quickstarts - 실습형 가이드