Snowflake 실무 스터디 가이드

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약

Data Warehouse Cloud SQL Python Architecture

1. Snowflake란?

Snowflake는 완전 관리형(Managed) 클라우드 데이터 플랫폼으로, 데이터 웨어하우징, 데이터 레이크, 데이터 공유 및 머신러닝/애널리틱스 워크로드를 위한 단일 서비스를 제공합니다. 전통적인 아키텍처와 달리 스토리지와 컴퓨팅이 분리되어 독립적으로 확장 가능하며, SQL 기반의 인터페이스를 제공합니다.

분리된 스토리지 & 컴퓨팅

데이터 스토리지 비용과 쿼리/변환 컴퓨팅 비용이 독립적입니다. 웨어하우스(가상 웨어하우스)를 필요할 때만 실행/중지하여 비용을 최적화할 수 있습니다.

다중 클라우드 네이티브

AWS, Azure, GCP 중 선택하여 배포 가능하며, 동일한 경험과 기능을 제공합니다. 리전 간 데이터 복제 및 페일오버도 지원합니다.

데이터 공유 & 마켓플레이스

보안된 방식으로 계정 간 라이브 데이터를 공유할 수 있습니다. 데이터 마켓플레이스를 통해 외부 데이터 세트를 바로 활용 가능합니다.

2. 왜 써야 하는가? (기존 대안과 비교)

솔루션 장점 단점 (vs Snowflake) 적합한 경우
Snowflake 완전 관리형, 스토리지/컴퓨팅 분리, 자동 스케일링, 다중 클라우드, 시간 여행/제로 카피 클론, 보안 데이터 공유 비용이 상대적으로 높을 수 있음, 벤더 락인 가능성 빠른 프로토타이핑, 변동성 큰 워크로드, 다팀/다중 클라우드 환경, 데이터 마켓플레이스 활용
전통 RDBMS (Redshift, BigQuery, Synapse) 높은 성숙도, 특정 클라우드에 깊은 통합, 특정 패턴에서 매우 효율적 컴퓨팅-스토리지 결합으로 인한 비용 비효율, 관리 부담(Redshift), 확장성 제한 예측 가능한 워크로드, 특정 클라우드 생태계 깊은 활용, 매우 큰 배치 처리(BigQuery)
오픈소스 (PostgreSQL, Trino + HDFS/S3) 비용 통제력 높음, 커스터마이징 자유도 극대화, 벤더 락인 회피 운영/관리/튜닝 부담 큼, 통합 및 보안 구현 복잡, 전문 인력 필요 예산 제약 심함, 특수한 요구사항 존재, 인하우스 전문팀 보유

3. 핵심 개념

아키텍처 다이어그램

+---------------------------------------------------------------------------------------+ | Cloud Services Layer | | (인증, 메타데이터 관리, 쿼리 최적화, 트랜잭션 관리, 보안) | +------------------------------------------+--------------------------------------------+ | +------------------------------------------v--------------------------------------------+ | Query Processing Layer | | "Virtual Warehouses" (컴퓨팅 클러스터) | | - X-Small, Small, Medium, Large, ... | | - 필요시 자동 확장/축소(Auto-scaling) | | - 웨어하우스 별로 독립적 성능/비용 | +------------------------------------------+--------------------------------------------+ | +------------------------------------------v--------------------------------------------+ | Database Storage Layer | | "스토리지 계층" (내부적으로 컬럼너 형식으로 암호화 저장) | | - 컴퓨팅과 완전 분리 | | - 데이터는 클라우드 오브젝트 스토리지(AWS S3, Azure Blob, GCS)에 저장 | +---------------------------------------------------------------------------------------+

주요 용어

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. 실무 팁 & 트러블슈팅

팁 1: 웨어하우스 크기 선정

처음에는 X-Small 또는 Small로 시작하고, 쿼리 성능을 모니터링하며 조정하세요. 많은 소형 쿼리가 동시에 실행된다면, Medium 하나보다 Small 여러 개(Multi-cluster)가 더 효율적일 수 있습니다.

팁 2: 파티셔닝 대신 클러스터링 키 사용

Snowflake는 자동 마이크로 파티셔닝을 사용합니다. 대용량 테이블의 쿼리 성능을 높이려면 자주 조인되거나 필터링되는 컬럼을 CLUSTER BY 키로 지정하세요.

CREATE OR REPLACE TABLE large_table (...) CLUSTER BY (date_key, customer_id);
문제 1: 쿼리가 너무 오래 걸림

원인: 웨어하우스 크기 부족, 클러스터링 키 미설정, 비효율적 쿼리(과도한 조인, SELECT *).
해결: 웨어하우스 크기 업스케일, 클러스터링 키 설정, 쿼리 프로파일링(QUERY_PROFILE) 확인 후 최적화.

문제 2: 예상보다 비용이 많이 나옴

원인: 웨어하우스 AUTO_SUSPEND 설정 없음(24시간 가동), 너무 큰 웨어하우스 사용, 불필요한 데이터 복제.
해결: AUTO_SUSPEND 300초 이하로 설정, 웨어하우스 크기 다운스케일 검토, Time Travel 기간 줄이기.

팁 3: 대량 데이터 로드는 COPY 명령어 사용

INSERT 문보다 내부/외부 스테이지에서 COPY 명령어를 사용하면 훨씬 빠르고 효율적입니다.

COPY INTO my_table
FROM @my_internal_stage/data_files/
FILE_FORMAT = (TYPE = 'PARQUET')
PATTERN = '.*[.]parquet';

7. 참고 자료