시큐어 데이터 공유

시큐어 데이터 공유

다른 Snowflake 계정과 데이터를 주고받아야 할 때가 있어요. 이때 실제 파일을 옮기거나 복사할 필요 없이, Snowflake의 시큐어 데이터 공유(Secure Data Sharing) 를 이용하면 내 계정 안의 선택된 객체를 상대 계정이 바로 조회하게 만들 수 있어요.

출처: About Secure Data Sharing - Snowflake Documentation

공유할 수 있는 객체

데이터베이스 기준으로 공유할 수 있는 객체는 다음과 같아요.

  • 데이터베이스, 테이블, 다이나믹 테이블(Dynamic table), 외부 테이블(External table)
  • 외부 관리·관리형 Apache Iceberg 테이블, 외부 관리 Delta Lake 테이블
  • 뷰(일반 뷰, 시큐어 뷰, 시큐어 구체화 뷰, 시맨틱 뷰)
  • Cortex Search 서비스
  • 사용자 정의 함수(UDF, 시큐어·비시큐어 모두)
  • USER_MODEL, CORTEX_FINETUNED, DOC_AI 타입의 모델

중요한 점은 이렇게 공유된 객체는 모두 읽기 전용이라는 거예요. 상대 계정에서 수정하거나 삭제할 수 없어요.

데이터가 실제로 복사되지는 않아요

시큐어 데이터 공유는 데이터를 복사하거나 전송하지 않아요. 공유는 전부 Snowflake의 서비스 레이어와 메타데이터 스토어를 통해 이루어져요. 그래서 소비자 계정에는 공유된 데이터가 저장 공간을 차지하지 않고, 월간 저장 비용이 들지 않아요. 소비자가 부담하는 건 가져온 데이터를 조회할 때 쓰는 컴퓨팅 리소스(웨어하우스) 비용뿐이에요.

데이터가 실제로 오고 가지 않기 때문에 설정도 빠르고, 소비자가 가져온 데이터에 접근하는 것도 거의 즉각적이에요.

프로바이더와 컨슈머

공유에서 데이터를 내보내는 계정을 프로바이더(Provider), 받아 쓰는 계정을 컨슈머(Consumer) 라고 불러요.

  • 프로바이더: 데이터베이스에 대한 share를 만들고, 그 안의 특정 객체에 대한 권한을 부여해요. 여러 데이터베이스를 섞어 공유할 수도 있는데, 이 경우 같은 계정에 속한 데이터베이스여야 해요. share에 계정을 추가하면 소비가 시작되지요.
  • 컨슈머: 공유받은 데이터베이스를 계정에 추가하면, 다른 데이터베이스처럼 동일하게 조회할 수 있어요. share는 프로바이더당 몇 개든 소비할 수 있지만, share 하나당 데이터베이스는 하나만 만들 수 있어요.

프로바이더는 share에 객체를 추가하는 방식으로 두 가지를 쓸 수 있어요. ① 데이터베이스 역할(DB role)을 통해 share에 권한을 부여하거나, ② 객체에 대한 권한을 share에 직접 부여하는 방식이에요.

공유의 특징

share에 추가된 새 객체는 바로 모든 컨슈머에게 보이고, 기존 객체의 갱신도 즉시 반영돼요. 반대로 share(또는 그 안의 어떤 객체)에 대한 접근은 언제든지 회수할 수 있어요. 이 모든 제어는 프로바이더 계정에 의해 완전히 통제돼요.

Snowflake에서는 공유를 여러 방식으로 제공해요.

  • Listing: share에 부가 메타데이터를 더해 데이터 제품으로 하나 이상의 계정에 제공
  • Direct Share: 같은 리전의 다른 계정에 특정 데이터베이스 객체(share)를 직접 공유
  • Data Exchange: 계정 그룹을 만들어 그 그룹에 share를 제공·관리
  • Clean Room: 어떤 쿼리를 실행할 수 있는지까지 제어하며 데이터 공유

리더 계정 (Reader accounts)

데이터 공유는 원칙적으로 Snowflake 계정 간에만 지원되요. 아직 Snowflake 계정이 없거나 라이선스 고객이 아닌 소비자에게는 리더 계정(Reader account) 을 만들어 공유할 수 있어요. 리더 계정은 예전에 '읽기 전용 계정'으로 불리던 것으로, 소비자에게 별도 라이선스를 요구하지 않아요.

리더 계정은 항상 그것을 만든 프로바이더 계정에 속하며, 그 프로바이더에서 만든 share만 소비할 수 있어요. 리더 계정의 사용자는 가져온 데이터를 조회할 수 있지만, 데이터 적재나 insert·update 같은 DML 작업은 수행할 수 없어요.

더 알아보기 (Learn more)