Snowflake Snowpro Core 준비 (1)
덤프 자주 나오는 개념 정리
이번 글은 Snowflake의 핵심 개념 부터 덤프에 자주 나오는 개념 위주로 정리한 내용이다.
1. 마이크로 파티셔닝과 클러스터링 (참고)
Snowflake의 핵심은 마이크로 파티셔닝(Micro-Partitioning)이다. 테이블에 데이터를 저장할 때 자동으로 약 500MB(비압축 기준) 단위로 나누어 저장하며, 내부적으로는 압축되어 약 16MB 크기의 컬럼 기반 저장소 형식으로 관리된다.
각 마이크로 파티션에는 메타데이터가 자동으로 저장되는데, 이는 기술 통계량(summary statistics) 형태로 관리된다. 이 메타데이터가 인덱스 검색 성능을 높여준다.
프루닝
쿼리 실행 시 Snowflake는 모든 데이터를 스캔하지 않는다. 먼저 각 파티션의 메타데이터를 확인하고, 찾고자 하는 조건과 일치하는 파티션만 선별한다. 조건과 관련 없는 파티션은 아예 읽지 않는 이 과정을 프루닝(Pruning)이라고 한다.
이는 인덱스 없이도 인덱스처럼 빠른 필터링을 가능하게 하는 주요 원리다.
클러스터링 키
자동 마이크로 파티셔닝 외에도 사용자가 클러스터링 키를 지정할 수 있다. 자주 조회하는 컬럼을 기준으로 파티션을 더욱 잘 정렬하여 정밀한 프루닝과 빠른 쿼리 성능을 확보할 수 있다.
2. 컴퓨팅 리소스
가상 웨어하우스
가상 웨어하우스는 Snowflake에서 쿼리를 실제 실행하는 컴퓨팅 리소스다. 동시 실행 쿼리가 많아지면 대기열에 들어가며, size와 cluster 수로 성능과 처리량을 조절할 수 있다.
성능 모니터링
- RESOURCE MONITOR: 크레딧 사용량을 추적하고 제한
- WAREHOUSE_LOAD_HISTORY: 쿼리 대기와 실행 시간, 클러스터 수와 사용률 등을 확인하여 성능 분석 및 평가 가능
3. 세션 관리와 함수
세션 정책
세션은 사용자가 로그인해서 작업을 수행하는 논리적 연결이다. Snowflake는 24시간을 초과하면 세션을 끊거나 쿼리를 취소하여 강제 종료한다.
함수 분류
Snowflake의 함수는 크게 5가지로 분류된다:
- Aggregate: 집계/요약 함수
- Scalar: 입력 하나 → 출력 하나
- Table: 행-열 구조의 테이블 반환
- Window: 특정 기준 범위 내(윈도우) 행 간 관계를 이용한 계산
- System: Snowflake 내부 상태/정보 조회 (예:
LAST_QUERY_ID(N)
)
4. 보안과 권한 (RBAC)
권한 관리 개념
권한 관리는 세 가지 핵심 개념으로 구성된다:
- Grant: 권한 부여 명령 혹은 부여된 결과
- Privilege: 구체적인 권한 정의 (예:
USAGE
) - Role: 권한들을 묶어 관리하는 논리적 컨테이너
주요 역할(Role)
시스템 정의 역할은 다음과 같다:
- ACCOUNTADMIN: 슈퍼 유저 역할, 리소스 모니터 생성/삭제, 청구 및 크레딧 데이터 관리
- SECURITYADMIN: 보안 관리 전담, 역할 권한 할당/회수, 네트워크 정책 활성화
- SYSADMIN: 데이터 오브젝트(DB, Table 등) 관리 전담
- ORGADMIN: 조직 수준 계정 생성/삭제, 계정 이름 변경 (
SYSTEM$GLOBAL_ACCOUNT_SET_PARAMETER
함수 사용 가능) - USERADMIN: 사용자 생성/삭제,
CREATE ACCOUNT
권한으로 계정 생성 가능
계정 보안 기능
보안 기능은 다음과 같이 구성된다:
- Network Policy: 접근 IP 범위 제한
- 종단 간 암호화: 데이터 전송과 저장 모두 암호화
- 다단계 인증(MFA)
- 역할 기반 액세스 제어(RBAC)
5. 데이터 객체와 파이프라인
핵심 객체
Snowflake의 주요 객체는 다음과 같다:
- Pipes: 스테이지에 새로 업로드된 파일을 자동 감지하여 실시간/준실시간 데이터 로드
- Streams: 테이블의 변경 데이터 캡처(Change Data Capture, CDC) 지원
- Tasks: 스케줄러 역할
- Procedures: 사용자 정의 프로시저
- View: 저장된 SELECT 쿼리 정의
- Materialized View: 쿼리 정의와 결과 데이터 모두 저장 (유지/관리 시 크레딧 사용)
파이프라인 흐름
데이터 로드 파이프라인은 다음과 같은 순서로 진행된다:
1
데이터 적재 외부 스테이지 설정 → Pipe 객체 생성 → 이벤트 알림 전달 → 파이프가 파일 감지 → COPY INTO 실행 → 로드 작업 후 LOAD_HISTORY 뷰에 기록
6. 데이터 타입과 스테이지
반정형 데이터 타입
Snowflake는 다음과 같은 반정형 데이터 타입을 지원한다:
- VARIANT: 기타 모든 데이터 타입의 값 포함 가능 (
PARSE_JSON
함수로 JSON 문서 해석) - OBJECT: VARIANT 값을 직접 포함하여 모든 데이터 타입 간접 포함 가능
- ARRAY: VARIANT 값을 직접 포함하여 모든 데이터 타입 간접 포함 가능
- 디렉토리 테이블: 비구조화된 데이터 저장 가능
스테이지 종류와 활용
스테이지는 다음 네 가지 종류로 분류된다:
- 사용자 스테이지: 작은 데이터 파일 업로드, 실험적 데이터 로드용 (기본 제공)
- 테이블 스테이지: 각 테이블에 자동 할당되는 전용 스테이지
- 명명된 내부 스테이지: 여러 사용자, 여러 테이블에서 공유하는 Snowflake 내부 스토리지
- 명명된 외부 스테이지: 외부 클라우드 스토리지 연결 (S3, Azure Blob, GCS 등)
스테이지 관계도
스테이지와 테이블 간의 관계는 다음과 같다:
1
2
3
4
5
6
7
[로컬 파일]
↓ PUT
[내부 스테이지 @my_stage] ←→ [디렉터리 테이블: DIRECTORY(@my_stage)]
↓ COPY INTO
[테이블]
[외부 스테이지 @my_s3_stage] ←→ 클라우드 (S3 등) ←→ 디렉터리 테이블 연결
7. 파일 관리와 URL 생성
파일 관련 SQL 함수
파일 관리를 위한 주요 SQL 함수는 다음과 같다:
- BUILD_STAGE_FILE_URL: 스테이지와 파일 경로 기반 영구 접근 파일 URL 생성
- BUILD_SCOPED_FILE_URL: 유효 기간 내 접근 파일 URL 생성
- GET_PRESIGNED_URL: 외부 스테이지 파일에 대한 미리서명된 URL 생성 (인증 없이 접근 가능)
- GET_STAGE_LOCATION: 스테이지의 기본 URL 반환
데이터 언로드 프로세스
데이터 언로드는 다음 단계로 진행된다:
- 데이터를 파일(CSV, JSON, Parquet 등)로 변환
- 지정한 스테이지 경로에 저장
- 외부 시스템에서 스테이지에서 파일 다운로드
PARTITION BY
복사 옵션을 사용하면 지정된 식(컬럼 값 등)에 따라 데이터를 나누어 별도 경로에 파일로 분리해서 저장할 수 있다. 이는 큰 데이터셋을 외부 분석 툴이나 데이터 레이크로 옮길 때 폴더 단위로 병렬 처리나 필터링을 쉽게 해준다.
8. 성능 최적화: 검색 최적화 서비스(SOS)
Snowflake나 대부분의 DB 엔진은 AND 조건(Conjuncts)에 비해 OR 조건(Disjuncts)이 훨씬 최적화하기 어렵고 성능에 부담을 준다. SOS(Search Optimization Service)는 동일 비교(=)나 범위 조건(<, >, BETWEEN)을 빠르게 찾도록 최적화된 서비스다.
9. 메타데이터 관리: ACCOUNT_USAGE vs INFORMATION_SCHEMA
차이점
두 메타데이터 스키마의 차이점은 다음과 같다:
- ACCOUNT_USAGE: 계정과 연결된 모든 독자 계정에 대한 오브젝트 메타데이터와 과거 사용 데이터 (30일 내)
- INFORMATION_SCHEMA: 계정에서 생성된 오브젝트에 대한 광범위한 메타데이터 정보 (장기 데이터 전체 보관, 데이터 정합성 중시)
Account Usage 활용
Account Usage 뷰는 지난 365일(1년) 내 Snowflake 오브젝트(테이블, 뷰, 열)의 액세스 기록을 쿼리하는 데 사용된다. 주로 누가 쿼리했는지, 어떤 객체가 수정되었는지 추적하는 용도로 활용된다.
10. 고급 거버넌스 기능
다층 보안 체계
Snowflake의 보안 체계는 다음과 같이 구성된다:
객체 수준 보안
- Role-Based Access Control (RBAC)
행 수준 보안
- Row Access Policies: 사용자의 역할, 속성, 컨텍스트에 따른 특정 행 조회 제한
열 수준 보안
- Dynamic Data Masking (DDM): 민감한 컬럼 데이터 마스킹 처리
- APPLY 권한 부여로 보안 마스킹 정책 설정
태깅과 분류
데이터 분류 체계는 다음과 같다:
- Object Tagging: 테이블, 컬럼 등에 태그 부착하여 분류 및 정책 적용 (예: PII 데이터 구분)
- Automated Data Classification: 자동으로 컬럼 내 데이터를 스캔하여 이메일, 주소, 주민번호 등 민감정보 분류
추적과 감사
감사 기능은 다음과 같이 제공된다:
- Access History: 사용자별 객체 사용 기록 추적 (보안 사고 감사용)
- Object Dependencies / Lineage: 뷰, 함수, 테이블 등 객체 간 의존 관계 추적
데이터 보호
데이터 보호 기능은 다음과 같다:
- Time Travel: 최대 90일까지 데이터 이전 상태 복원
- Fail-safe: Time Travel 이후 최대 7일간 데이터 복구 보장
데이터 공유와 컴플라이언스
데이터 공유 및 컴플라이언스 기능은 다음과 같다:
- Secure Data Sharing: 제한적이고 추적 가능한 방식의 데이터 공유
- Data Clean Rooms: 민감한 데이터를 암호화된 상태로 교차 분석
- 글로벌 컴플라이언스: HIPAA, SOC 2 Type II, GDPR, FedRAMP, ISO 27001 등 충족
- 데이터 주권: AWS, Azure, GCP 기반 지역 선택 가능
결론
덤프에 나올 때 모르는 개념을 따로 정리해서 카테고리 별로 모호하거나 어려운 개념을 공부 후 적어놓고 있다. 계속 이어서 정리하고 열심히 읽어서 개념 가닥을 잡고 시험 볼 생각이다. 끝!