7주차 목요일, 34일차 Today I Learned
데이터 인프라, 고급 SQL, BI 대시보드 (4)
: Snowflake 운영과 관리
✏️ 학습 내용
1. Snowflake 특징
2014년에 클라우드 기반 데이터 웨어하우스로 시작되어 2020년에 상장했다. 지금은 데이터 클라우드라고 부를 수 있을 정도로 발전하였으며, 데이터 판매를 통한 매출을 가능하게 해주는 Data Sharing/Marketplace를 제공하고, ETL과 다양한 데이터 통합 기능을 제공한다. AWS, GCP, Azure 같은 글로벌 클라우드 위에서 모두 동작할 수 있다.
스토리지와 컴퓨팅 인프라가 별도로 설정되는 가변 비용 모델로, 노드 수 조정이나 distkey 등의 최적화가 불필요하다. SQL 기반으로 빅데이터 저장, 처리, 분석이 가능하며, 비구조화된 데이터 처리와 머신러닝 기능도 제공한다. CSV, JSON, Avro, Parquet 등과 같은 다양한 데이터 포맷을 지원하고, S3, GC 클라우드 스토리지, Azure Blog Storage도 지원한다.
배치 데이터 중심이지만 실시간 데이터 처리를 지원하고, 과거 데이터 쿼리 기능으로 트렌드를 분석하기 쉽게 해주는 Time Travel도 지원한다. 웹 콘솔 이외에도 Python API를 통한 관리 및 제어나 ODBC/JDBC 같은 관계형 프로토콜 연결도 가능하다. 자체 스토리지 이외에도 클라우드 스토리지를 외부 테이블로 사용할 수 있고, 멀티클라우드와 다른 지역에 있는 데이터 공유 기능도 있다.
Snowflake의 계정은 Organization > Account > Databases로 구성된다. Organizations란 한 고객이 사용하는 모든 Snowflake 자원들을 통합하는 최상위 레벨 컨테이너로, 하나 혹은 그 이상의 Account들로 구성되며 이 모든 Account들의 접근권한, 사용트래킹, 비용들을 관리하는데 사용된다. 하나의 Account는 자체 사용자, 데이터, 접근권한을 독립적으로 가지며, 한 Account는 하나 혹은 그 이상의 Databases로 구성된다. 하나의 Database는 한 Account에 속한 데이터를 다루는 논리적인 컨테이너로, 다수의 스키마와 거기에 속한 테이블과 뷰 등으로 구성되어 있다. 하나의 Database는 PB 단위까지 스케일 가능하고 독립적인 컴퓨팅 리소스 (=웨어하우스)를 갖게 된다. 웨어하우스와 데이터베이스는 1:1 관계가 아니다.
Snowflake는 데이터 메시 용어가 생기기 전부터 Data Marketplace라는 서비스를 제공했다. 데이터 셋을 사내 혹은 파트너에게 스토리지 레벨에서 공유하는 방식인 Data Sharing도 제공한다. 마켓플레이스는 ETL과 관련된 기능으로, 외부 데이터 소스를 쉽게 연동할 수 있는 플러그인이나 데이터 자료 등을 찾아볼 수 있다.
그 외에 Activity 메뉴에 들어가면 Query History, Copy History, Task History가 있다. Query History는 SELECT, CREATE, UPDATE 등 어떤 SQL이 실행되는지 살펴볼 수 있으며, Access History는 이보다 더 자세한 정보를 제공한다. Copy History는 벌크 업데이트 기록을 제공한다. Task History는 SQL 명령을 Task로 저장했을 때, 이 Task에 대한 기록을 볼 수 있다.
무료 시험판은 30일 혹은 최대 $400까지 사용 가능하다. 이메일을 등록하고 Username과 Password를 입력하는데, 앞서 등록한 이메일을 확인해서 로그인 URL을 기록해두는 것이 좋다. 로그인을 하면 이름 밑에 ROLE이 뜨는데, 이 ROLE을 바꾸며 사용할 수도 있다. 참고로 Snowflake는 GROUP 기능이 없다.
기본적으로 Data 밑에 두 개의 데이터베이스가 존재한다. 그 아래에 스키마, 그 아래에 테이블이 있는 구조이다. 데이터베이스들이 갖고 있는 데이터들을 스토리지라고 하고, 스토리지에 있는 데이터들을 프로세싱해주는 컴퓨팅 리소스를 웨어하우스라고 했다. Account 안의 Warehouses를 확인하기 위해서는 Admin 메뉴를 확인하면 된다.
새로운 웨어하우스를 생성할 수도 있는데, Size에 따라서 시간당 얼마의 크레딧이 사용되는지 나와있다. Credit이란 쿼리 실행과 데이터 로드와 기타 작업 수행에 소비되는 계산 리소스를 측정하는 단위로, 1 크레딧당 대략 $2~4의 비용을 발생시킨다고 볼 수 있다.
비용 구조를 살펴보면 Snowflake는 크게 3가지 컴포넌트로 구성된다. 크레딧으로 결정되는 컴퓨팅 비용, TB당 계산되는 스토리지 비용, 지역간 데이터 전송 혹은 다른 클라우드간 데이터 전송시 TB당 계산되는 네트워크 비용이 있다. 약간 비싼 편에 속하지만 그래도 기능이 좋다. 처음에는 Redshift를 사용하는 것을 추천한다.
2. Snowflake 실습을 위한 초기 환경 설정
Snowflake에서 데이터베이스, 스키마, 테이블을 생성하고, COPY를 사용하여 벌크 업데이트를 수행할 수 있다. 벌크 업데이트를 수행하기 위해서는 S3 버킷 액세스를 위한 전용 사용자를 IAM으로 만들고 S3 읽기 권한을 부여하여서 그 사용자의 AWS KEY ID와 AWS SECRET KEY를 사용해야 한다. 어드민 사용자의 AWS KEY ID와 AWS SECRET KEY를 사용해서는 안 된다.
COPY INTO dev.raw_data.session_timestamp
FROM 's3://keeyong-test-bucket/test_data/session_timestamp.csv' credentials=(AWS_KEY_ID='A...EK' AWS_SECRET_KEY='X...UH')
FILE_FORMAT = (type='CSV' skip_header=1 FIELD_OPTIONALLY_ENCLOSED_BY='"');
3. Snowflake 사용자 권한 설정
Group을 지원하지 않기 때문에 ROLE로 권한을 설정할 수 있다. User를 생성해서 권한을 부여하면 된다. Redshift와 마찬가지로 컬럼 레벨 보안과 레코드 레벨 보안이 존재한다. (테이블 내의 특정 컬럼/레코드들을 특정 사용자나 특정 역할에만 접근 가능하게 하는 것이다.)
엔터프라이즈 이상부터는 Data Governance를 지원한다. 이는 필요한 데이터가 적재적소에 올바르게 사용됨을 보장하기 위한 데이터 관리 프로세스로, 데이터 품질 보장과 데이터 관련 법규 준수를 주 목적으로 한다. 데이터 기반 결정에서의 일관성, 데이터를 이용한 가치 생성, 데이터 관련 법규 준수를 하기 위한 것이 목적이다.
데이터 거버넌스 관련 기능들은 다음과 같다. CREATE TAG로 생성하여 오브젝트들에 태그를 주어 관리가 용이하도록 하는 Object Tagging, 개인 정보 관리가 주요 용도 중 하나인 Object Tagging이 매뉴얼하게 관리하기 쉽지 않아 나온 Data Classification이 있다. Data Classification은 Analyze (테이블에 적용하면 개인정보나 민감정보가 있는 컬럼들을 분류함), Review (데이터 엔지니어가 보고 결과를 수정하거나 최종 리뷰함), Apply (최종 결과를 System Tag로 적용함) 3가지 스텝으로 구성된다.
그리고 Tag에 액세스 권한을 지정하는 Tag based Masking Policies, 데이터 액세스에 대한 감사 추적을 제공하여 보안과 규정 준수를 위한 Access History, 데이터 거버넌스와 시스템 무결성 유지를 목적으로 하며 테이블이나 뷰를 수정하는 경우 이로 인한 영향을 자동으로 식별해주고 계승 관계 분석을 통해 더 세밀한 보안 및 액세스 제어가 가능한 Object Dependencies가 있다.
4. Snowflake 사용 중단
사용 중단 방법은 간단하다. 무료 시험 기간인 30일이 지나면 자동으로 Suspended 모드로 변경되고, (단, 크레딧 카드 정보를 입력하면 안 된다.) 그 전에 끝내고 싶다면 서포트에 이메일을 보내면 된다.
☁️ 소감
Redshift와 다른 점을 조금씩 엿볼 수 있었다. 특히 AWS를 지원한다는 점이 좋은 것 같다. Redshift는 AWS의 기능이어서 IAM이 왜 필요한지에 대해 딱히 생각을 안 했었던 것 같은데 이번에 Snowflake를 사용하다보니 IAM이 왜 필요한지 이해를 할 수 있게 되었다. BigQuery에 대해서도 궁금증이 생겼고, Snowflake의 실제 작동은 어떨까 궁금하기도 했다.
데이터 웨어하우스는 어떻게 작동되는 것일까 궁금했었는데 이제 어느 정도 이런식으로 시작한다는 것은 알게 되었다. 살펴본 것보다 더 많은 기능들이 있을 것 같긴 하지만 결국엔 데이터 웨어하우스도 툴이구나 싶었다.