[Snowflake] 6. Data Sharing
이기종 DBMS 간의 데이터 동기화 이슈
기존 이기종 DBMS 간에 TDS 프로토콜을 사용해서 데이터를 공유하는 방식은 여러가지 문제점을 발생 시켰다. 이는 DBMS 마다 데이터 저장 방식과 데이터 형식, 스키마, 데이터 처리 방식, 엔진 등이 다르기 때문에 발생한 이슈이다. *TDS (Tabular Data Stream) 프로토콜이란 데이터베이스 서버와 클라이언트 간에 데이터를 전송하는 데 사용되는 애플리케이션 계층 프로토콜이다.
서로 다른 데이터 저장소끼리 데이터를 공유하기 위해서 발생하는 대표적인 동기화 이슈 다섯 가지는 아래와 같다.
- 이기종 환경 간의 데이터 복사 및 이동 필요
- 데이터 동기화 지연 발생 : 업무 영향도 발생
- 데이터 파이프라인 생성 및 관리 : 비용 이슈
- 여러 데이터 플랫폼과의 동기화 요건 : 복잡도 증가
- 빈번한 장애 및 에러 발생 : 사용자 만족도
Snowflake는 이러한 TDS 제약사항을 극복하기 위해서 기존 DBMS와 클라우드 기술을 결합하여 새로운 클라우드 데이터 플랫폼을 개발하였다. Snowflake를 사용하면 데이터에 접근할 수 있는 권한이 있다는 전제 하에 서로 다른 사용자의 라이브 데이터 공유가 가능하다. 또한 과거 테이블 개수 만큼 n개의 파이프라인 생성이 필요하고 이에 따른 유지 관리 비용이 발생했던 것과는 달리 데이터를 동기화 하기 위한 파이프라인 생성이 불필요해졌다. 이는 데이터의 메타 정보만 공유하기 때문에 비용 발생 없이 데이터 공유가 가능하다.
이처럼 손쉽게 데이터 공유가 가능한 Snowflake 안에서는 누구나 데이터 공급자 및 소비자가 될 수 있다. 데이터 공급자로서 데이터를 공유하면 데이터에 액세스할 수 있는 사용자를 관리하고 여러 사용자 및 그룹 간에 데이터 동기화를 유지하는 데 발생하는 문제를 피할 수 있게 된다. 데이터 소비자는 데이터가 Snowflake에 유지되므로 데이터를 가져와서 추가적으로 데이터 변환 작업을 수행해야 했던 과거와는 달리 자신의 데이터와 공유된 데이터 세트를 쉽게 조인하여 활용할 수 있게 되었다.
안전한 데이터 공유
Snowflake 내에서는 다음과 같은 데이터베이스 개체를 공유할 수 있다.
- Tables
- External Tables
- Secure Views
- Secure Materialized Views
- Secure UDFs
Snowflake는 데이터 공급자가 생성하고 데이터 소비자가 Import 하는 방식으로 데이터베이스 공유가 가능하게 된다. 하지만 계정 간에 공유되는 모든 데이터베이스 개체는 읽기 전용(Read Only)이다. 따라서 테이블에 데이터 추가, 수정 및 삭제 작업 등은 불가능하다.
안전한 데이터 공유는 실제 데이터가 계정 간에 복사 되거나 전송되지 않는다. 모든 공유는 Snowflake의 Service Layer와 메타데이터 저장소를 사용한다. 공유 데이터는 소비자 계정의 스토리지를 차지하지 않으므로 소비자의 월별 스토리지 요금에 영향을 미치진 않는다. 소비자에게 부과되는 유일한 비용은 공유 데이터를 쿼리하는 데 사용되는 컴퓨팅 리소스(Virtual Warehouse)에 대한 것 뿐이다.
데이터가 복사 되거나 교환 되지 않기 때문에 데이터 공급자는 보안 데이터 공유 설정을 빠르고 쉽게 할 수 있으며 데이터 소비자는 거의 즉각적으로 공유 데이터에 액세스 할 수 있다. 그럼 각자 어떠한 방식으로 데이터를 공유하는지 알아보자.
데이터 공급자
데이터 공급자는 자신의 계정에 데이터베이스 공유를 만들고 데이터베이스의 특정 개체(Tables, External Tables..)에 대한 액세스 권한을 부여한다. 공급자는 이러한 데이터베이스가 동일한 계정에 속해 있는 한, 여러 데이터베이스의 데이터를 공유할 수도 있다.
데이터 소비자
데이터 소비자는 읽기 전용(Read Only) 데이터베이스가 생성된다. 해당 데이터베이스의 대한 액세스는 공급자가 설정한 액세스 권한에 따라 접근이 가능하다.
Reader Account
기본적으로 데이터 공유는 Snowflake 계정 간에만 지원된다. 하지만 Snowflake는 아직 Snowflake 계정이 없거나 라이센스가 부여되지 않은 고객에게도 데이터를 공유할 수 있는 기능을 제공한다. 이를 Reader Account(독자 계정)이라고 한다. Reader Account를 통해 소비자가 Snowflake 고객이 될 필요 없이 데이터를 빠르고 쉽게 액세스 할 수 있게 되는 것이다. 각 Reader Account는 이를 생성한 공급자 계정에 속하게 되고 공급자는 데이터베이스를 공유할 수 있게 된다. 단, Reader Account는 자신을 생성한 공급자 계정의 데이터만 사용할 수 있다. 즉 Reader Account와 공유된 데이터를 쿼리 할 순 있지만 데이터 Load, Insert, Update와 같은 전체 계정에서 허용되는 DML 작업을 수행할 순 없다.
Snowflake Data Marketplace
Snowflake Marketplace를 사용하여 공개 또는 비공개적으로 제공되는 타 사 데이터 세트를 검색 및 액세스 할 수 있다.