1. Replication이란?
Replication(복제) 은 같은 조직(Organization) 내 Snowflake 계정들 사이에서 데이터베이스를 복제하는 기능이다.
- 데이터베이스 객체와 저장된 데이터를 계정 간 동기화 상태로 유지
- 리전(Region) 간, 클라우드 플랫폼(AWS/GCP/Azure) 간 복제 지원
💡 핵심: "조직 내 계정 간 DB 복제"
2. Primary vs Secondary Database
| 구분 | 설명 |
|---|
| Primary DB (P) | 원본 데이터베이스. 모든 DML/DDL 작업이 실행됨 |
| Secondary DB | Primary의 복제본(replica). 읽기 전용(read-only) |
- 기존 permanent / transient DB는 모두 primary로 지정 가능
- 한 계정 내 여러 DB를 primary로 지정 가능
- 하나의 primary DB를 조직 내 여러 계정으로 복제 가능
⭐ 포인트: Secondary DB는 read-only. 모든 쓰기 작업은 Primary에서만 수행.
3. 핵심 SQL 명령어 (⭐⭐)
① 복제 활성화 (Primary 지정)
ALTER DATABASE DB_1
ENABLE REPLICATION TO ACCOUNTS ORG1.account2;
② Secondary DB 생성 (스냅샷 전송)
CREATE DATABASE DB_1_REPLICA
AS REPLICA OF ORG_1.account1.DB_1;
- Primary 복제 시, DB 객체와 데이터의 스냅샷(snapshot) 이 secondary로 전송됨
③ Secondary DB 갱신 (주기적 새로고침)
ALTER DATABASE DB_1_REPLICA REFRESH;
🔑 명령어 흐름 암기:
ENABLE → AS REPLICA OF → REFRESH
(활성화 → 복제본 생성 → 새로고침)
4. Replication 주요 특징 & 제약사항 (⭐⭐)
✅ 복제되지 않는 객체
- External tables / Iceberg tables → 복제 미지원
- Stage, Pipe → database replication으로는 복제 불가 (account replication 필요)
- Secrets → 복제 불가
- Share로부터 생성된 DB → 복제 불가
✅ Refresh(갱신) 실패 조건 ⭐
- Primary DB에 External table 또는 Iceberg table 포함 시 → refresh 실패
- 지원되지 않는 source object를 가진 stream 포함 시 → refresh 실패
- stream의 source object가 drop된 경우 → 실패
✅ Refresh 자동화
- Task 객체를 구성해 스케줄에 따라 refresh 명령을 자동 실행 가능
✅ 권한(Privileges) 복제 안 됨 ⭐⭐
- 데이터베이스 객체에 부여된 권한(privileges)은 secondary DB로 복제되지 않음
- 기존 객체 권한 + future grants 모두 미복제
- 단, account replication 으로는 권한 복제 가능
✅ Billing (과금) ⭐
- 복제 과금은 데이터 전송(data transfer) + compute 리소스(credits) 기반
- 월 과금은 다음에 비례:
- Primary DB에서 변경된 테이블 데이터 양 (data load / DML 결과)
- Secondary DB refresh 빈도
- 과금은 Target account(secondary DB를 저장하는 계정) 에 청구됨
- Refresh를 중단하면 복제 비용도 멈춤
💰 비용 절감 팁: 복제 대상 DB/객체 선택 + refresh 빈도 조절
5. ⭐ 한 줄 포인트
| 항목 | 핵심 |
|---|
| 정의 | 조직 내 계정 간 DB 복제 |
| Secondary DB | 읽기 전용(read-only) |
| 명령어 3단계 | ENABLE → AS REPLICA OF → REFRESH |
| 권한 복제 | ❌ 안 됨 (account replication은 가능) |
| Refresh 자동화 | Task 객체로 스케줄링 |
| Refresh 실패 | External/Iceberg table, 잘못된 stream 포함 시 |
| 과금 기준 | data transfer + compute, target 계정에 청구 |
| 범위 | 리전 간 + 클라우드 간 모두 지원 |
🎯 최종 정리 문장
"복제는 조직 안 계정끼리, Primary는 쓰기·Secondary는 읽기 전용,
권한·External table은 안 따라온다, 갱신은 Task로 자동화,
과금은 받는 쪽(target) 이 낸다."