데이터분석데브코스 8/이론
7주차 Snowflake
by DataJ
2025. 5. 21.
📘 1부: Snowflake 개요 및 특징
1. ✅ Snowflake란?
- 출시: 2014년, 클라우드 기반 데이터웨어하우스로 시작 → 2020년 상장
- 구성: AWS, GCP, Azure 등 멀티클라우드 환경에서 동작
- 역할 확장: 단순 DW → 데이터 클라우드 + Data Sharing/Marketplace 가능
- 기능: ETL, 머신러닝, 비정형 데이터 처리 등도 지원
2. 💡 Snowflake의 주요 특징
구분 설명
스토리지-컴퓨팅 분리 |
비용 효율적인 가변 모델 (Redshift처럼 고정 노드 X) |
SQL 기반 |
대용량 데이터 저장/처리/분석 가능 |
다양한 포맷 지원 |
CSV, JSON, Parquet 등 다양한 데이터 포맷 & 클라우드 스토리지 연동 |
실시간 지원 |
배치 + 실시간 처리 모두 가능 |
Time Travel |
과거 데이터 조회 기능 |
API 지원 |
웹 콘솔 외 Python, ODBC/JDBC 연결 가능 |
외부 테이블 |
클라우드 스토리지를 테이블처럼 사용 가능 |
3. 🧩 구조: Snowflake 계정 체계
- Organization → Account → Database → Schema → Table
- ❖ 독립적인 컴퓨팅 자원인 Warehouse가 각 Database와 연결
- ❖ 멀티클라우드 + Cross-Region Replication 지원
4. 🛒 Data Sharing & Marketplace
기능 설명
Data Marketplace |
외부 데이터 공유 및 거래 기능 |
Data Sharing |
스토리지 수준의 데이터 공유 (복제 없이 공유) |
"Share, Don’t Move" |
데이터를 이동하지 않고 공유 가능 |
6. 🔤 기본 데이터 타입
- 숫자: INTEGER, FLOAT, DECIMAL 등
- 문자열: VARCHAR, TEXT 등
- 날짜/시간: DATE, TIMESTAMP
- 불리언: BOOLEAN
- 반정형: VARIANT, OBJECT, ARRAY
- 지리정보: GEOGRAPHY, GEOMETRY
2. 🏗 초기 환경 구성
📁 데이터베이스 & 스키마 생성
CREATE DATABASE dev;
-- 스키마 생성
CREATE SCHEMA dev.raw_data;
CREATE SCHEMA dev.analytics;
CREATE SCHEMA dev.adhoc;
📦 테이블 생성 (raw_data 스키마 기준)
CREATE TABLE dev.raw_data.session_transaction (
sessionid varchar(32) primary key,
refunded boolean,
amount int
);
CREATE TABLE dev.raw_data.user_session_channel (
userid integer,
sessionid varchar(32) primary key,
channel varchar(32)
);
CREATE TABLE dev.raw_data.session_timestamp (
sessionid varchar(32) primary key,
ts timestamp
);
3. 📤 데이터 적재 (COPY 명령)
❗ 사전 준비: S3 버킷 구성
- AWS 콘솔에서 버킷 생성: awstestbucket
- S3 경로 예시:
- s3://awstestbucket/session_transaction.csv
- Snowflake가 S3에 접근하기 위한 IAM 사용자 생성 및 Access Key 발급 필요
📥 COPY 예시
COPY INTO dev.raw_data.session_transaction
FROM 's3://awstestbucket/session_transaction.csv'
CREDENTIALS=(AWS_KEY_ID='ID' AWS_SECRET_KEY='KEY')
FILE_FORMAT = (TYPE = 'CSV' SKIP_HEADER = 1 FIELD_OPTIONALLY_ENCLOSED_BY = '"');
1. 👤 사용자 및 Role 생성
✅ 역할(Role) 생성
CREATE ROLE analytics_users;
CREATE ROLE analytics_authors;
CREATE ROLE pii_users;
✅ 사용자 생성 및 권한 부여
CREATE USER testuser PASSWORD='testuser';
GRANT ROLE analytics_users TO USER testuser;
1. 👤 사용자 및 Role 생성
✅ 역할(Role) 생성
CREATE ROLE analytics_users;
CREATE ROLE analytics_authors;
CREATE ROLE pii_users;
✅ 사용자 생성 및 권한 부여
CREATE USER testuser PASSWORD='testuser';
GRANT ROLE analytics_users TO USER testuser;
2. 🔐 Role별 권한 구조
Role 권한 요약
analytics_users |
raw_data, analytics, adhoc에 대해 읽기/쓰기 권한 |
analytics_authors |
analytics_users 권한 상속 + analytics에 대한 전체 권한 |
📜 Role별 권한 설정 SQL
-- analytics_users 설정
GRANT USAGE ON SCHEMA dev.raw_data TO ROLE analytics_users;
GRANT SELECT ON ALL TABLES IN SCHEMA dev.raw_data TO ROLE analytics_users;
GRANT USAGE ON SCHEMA dev.analytics TO ROLE analytics_users;
GRANT SELECT ON ALL TABLES IN SCHEMA dev.analytics TO ROLE analytics_users;
GRANT ALL ON SCHEMA dev.adhoc TO ROLE analytics_users;
GRANT ALL ON ALL TABLES IN SCHEMA dev.adhoc TO ROLE analytics_users;
-- analytics_authors 설정
GRANT ROLE analytics_users TO ROLE analytics_authors;
GRANT ALL ON SCHEMA dev.analytics TO ROLE analytics_authors;
GRANT ALL ON ALL TABLES IN SCHEMA dev.analytics TO ROLE analytics_authors;
3. 보안 기능
🔒 컬럼 수준 보안 (Column-Level Security)
- 민감 정보에 접근할 수 있는 Role만 해당 컬럼 조회 가능
- 예: 주민번호, 전화번호 컬럼 제한
🔒 행 수준 보안 (Row-Level Security)
- 특정 조건(예: 사용자 ID)에 따라 레코드 접근 제한
- 가장 좋은 방법은 별도 테이블로 관리하거나, 아예 로딩하지 않는 것
4. 📊 Data Governance 기능
📌 개념: 데이터가 정확한 위치에, 정확한 사용자에게, 정확한 권한으로 전달되도록 관리하는 체계
🔧 주요 기능 목록
기능 설명
Object Tagging |
테이블, 컬럼 등에 태그 부여 가능 |
Data Classification |
자동으로 개인정보 식별자 분류 (예: 이름, IP, 주소 등) |
Tag 기반 Masking |
태그를 기반으로 데이터 마스킹 제어 가능 |
Access History |
사용자 활동(쿼리, 접속 등) 로그 추적 가능 |
Object Dependencies |
테이블 변경 시 영향도 분석 (계층 전파 포함) |