Supabase ETL 소개
Source: Dev.to

Supabase ETL는 논리 복제를 사용해 Postgres 데이터베이스의 변경 사항을 읽고 이를 외부 분석 목적지에 거의 실시간으로 복제하는 체인지‑데이터‑캡처 파이프라인입니다. 설정은 Supabase 대시보드에서 몇 분이면 완료됩니다.
현재 지원되는 첫 번째 목적지는 Analytics Buckets(Iceberg 기반)와 BigQuery입니다.
Supabase ETL는 오픈 소스이며, 코드는 GitHub에 있습니다.
왜 OLTP와 OLAP를 분리해야 할까?
Postgres는 트랜잭션 워크로드(예: 단일 사용자 레코드 읽기 또는 주문 삽입)에 뛰어납니다. 분석을 위해 수백만 행을 스캔해야 할 때는 Postgres가 느려집니다.
BigQuery와 같은 컬럼 지향 시스템이나 Apache Iceberg와 같은 오픈 포맷 위에 구축된 시스템은 이를 위해 설계되었습니다. 이들은:
- 방대한 데이터셋을 수십 배 빠르게 집계
- 데이터를 보다 효율적으로 압축
- 트랜잭션 데이터베이스에서는 버거울 복잡한 분석 쿼리 처리
Supabase ETL은 양쪽의 장점을 제공합니다: Postgres에서 앱을 빠르게 유지하면서 목적에 맞게 구축된 시스템에서 강력한 분석을 활용하세요.
작동 방식
Supabase ETL는 Postgres 데이터베이스의 모든 변경 사항을 캡처하여 거의 실시간으로 분석 목적지에 전달합니다.
- Postgres 퍼블리케이션 생성: 복제할 테이블을 정의합니다.
- ETL 구성: 퍼블리케이션을 목적지에 연결합니다.
- ETL은 논리 복제 슬롯을 통해 퍼블리케이션에서 변경 사항을 읽습니다.
- 변경 사항은 배치 처리되어 목적지에 기록됩니다.
- 데이터는 목적지에서 쿼리할 수 있습니다.
파이프라인은 선택한 테이블을 초기 복사한 후 스트리밍 모드로 전환됩니다. 분석 결과는 밀리초에서 초 수준의 지연 시간으로 최신 상태를 유지합니다.
ETL 설정
ETL은 Supabase 대시보드에서 전부 구성합니다. 코드가 필요 없습니다.
단계 1: 퍼블리케이션 만들기
퍼블리케이션은 복제할 테이블을 정의합니다. SQL이나 UI를 통해 생성합니다:
-- Replicate specific tables
CREATE PUBLICATION analytics_pub
FOR TABLE events, orders, users;
-- Or replicate all tables in a schema
CREATE PUBLICATION analytics_pub
FOR TABLES IN SCHEMA public;
단계 2: 복제 활성화
Supabase 대시보드에서 Database → Replication 으로 이동하고 Enable Replication 을 클릭합니다.
단계 3: 대상 추가
- Add Destination 을 클릭하고 대상 유형을 선택합니다.
- (Analytics Buckets 전용) 먼저 Storage 섹션에서 분석 버킷을 생성합니다.
- 버킷 자격 증명을 입력하고 퍼블리케이션을 선택해 대상을 구성합니다.
- Create 를 클릭한 뒤 Start 를 눌러 복제를 시작합니다.
단계 4: 파이프라인 모니터링
대시보드에서 파이프라인 상태와 지연을 확인할 수 있습니다. 작업 메뉴에서 파이프라인을 시작, 중지, 재시작 또는 삭제할 수 있습니다.
Source: …
사용 가능한 대상
Supabase ETL의 목표는 기존 데이터 시스템을 Supabase에 연결할 수 있게 하는 것입니다. 우리는 지원되는 대상 목록을 적극적으로 확장하고 있습니다. 현재 공식적으로 지원되는 대상은 Analytics Buckets와 BigQuery입니다.
Analytics Buckets
Analytics Buckets 은 Apache Iceberg 위에 구축된 특수 스토리지 버킷으로, 대규모 분석 데이터셋을 위해 설계된 오픈 테이블 포맷입니다. 데이터는 S3에 저장된 Parquet 파일 형태로 보관됩니다.
Analytics Buckets에 복제할 때, 각 테이블은 변경 로그 구조로 생성됩니다. 각 행에는 cdc_operation 열이 포함되어 있으며, 이 열은 변경이 INSERT, UPDATE, DELETE 중 어느 것인지 표시합니다. 이 추가 전용 포맷은 모든 변경의 전체 히스토리를 보존합니다.
PyIceberg, Apache Spark, DuckDB, Amazon Athena 또는 Iceberg REST Catalog API를 지원하는 모든 도구를 사용해 Analytics Buckets를 쿼리할 수 있습니다.
BigQuery
BigQuery는 Google의 서버리스 데이터 웨어하우스로, 대규모 분석을 위해 설계되었습니다. 페타바이트 규모의 데이터를 처리하며 기존 BI 도구 및 데이터 파이프라인과 잘 통합됩니다.
BigQuery에 복제할 때, Supabase ETL은 각 테이블에 대해 뷰(view)를 생성하고, 모든 작업을 효율적으로 지원하기 위해 기본 버전 관리 테이블을 사용합니다. 뷰를 쿼리하면 ETL이 나머지 작업을 처리합니다.
Adding and removing tables
파이프라인이 실행 중일 때 복제되는 테이블을 수정할 수 있습니다.
Add a table
ALTER PUBLICATION analytics_pub ADD TABLE products;
Remove a table
ALTER PUBLICATION analytics_pub DROP TABLE orders;
출판을 변경한 후에는 대시보드 작업 메뉴에서 파이프라인을 재시작하여 변경 사항이 적용되도록 하세요.
Note: ETL은 출판에서 테이블을 제거해도 대상에서 데이터를 삭제하지 않습니다. 이는 실수로 인한 데이터 손실을 방지하기 위한 의도된 동작입니다.
ETL과 읽기 복제본을 언제 사용할까
읽기 복제본은 동시 쿼리를 확장해야 할 때 도움이 되지만, 여전히 Postgres이며 분석을 빠르게 만들지는 않습니다.
ETL은 데이터를 분석 전용 시스템으로 이동시켜 다음을 제공합니다:
- 대규모 데이터셋에 대한 빠른 쿼리
- 압축을 통한 낮은 스토리지 비용
- 프로덕션 워크로드와 분석의 완전한 분리
두 가지를 모두 사용할 수 있습니다: 애플리케이션 읽기 확장을 위해 읽기 복제본을, 분석을 위해 ETL을 사용합니다.
알아두면 좋은 점
- 복제는 Supabase 대시보드를 통해 관리되며, 추가 인프라가 필요하지 않습니다.
- 지연 시간은 일반적으로 네트워크와 대상 부하에 따라 밀리초에서 초 단위로 측정됩니다.
- 초기 스냅샷은 매우 큰 테이블의 경우 시간이 더 오래 걸릴 수 있으며, 이후 변경 사항은 지속적으로 스트리밍됩니다.
- Supabase ETL은 오픈 소스이며, 기여와 피드백을 환영합니다.
ETL 제약 사항
- 테이블은 기본 키가 있어야 합니다 – Postgres 논리 복제에 필요합니다.
- 생성된 컬럼은 지원되지 않습니다.
- 사용자 정의 데이터 타입은 문자열로 복제됩니다.
- 스키마 변경은 자동으로 대상에 전파되지 않습니다.
- 데이터는 변환 없이 그대로 복제됩니다.
- 초기 복사 단계에서는 변경 사항이 WAL에 누적되고 스트리밍이 시작되면 재생됩니다.
우리는 스키마 변경 지원, 추가 대상, 그리고 유연성과 성능을 향상시키기 위한 다양한 스트리밍 기술을 평가하고 있습니다.
Source:
가격
Supabase ETL은 사용량 기반입니다:
| 항목 | 비용 |
|---|---|
| 커넥터 | 월당 커넥터당 $25 |
| 처리된 변경 데이터 (초기 동기화 이후) | GB당 $15 |
| 초기 복사 | 무료 |
시작하기
Supabase ETL은 현재 비공개 알파 단계입니다.
접근 권한을 요청하려면 계정 관리자에게 연락하거나 대시보드의 양식을 작성하세요.
코드에 직접 들어가고 싶다면, ETL 프레임워크는 오픈 소스이며 Rust로 작성되었습니다. 저장소는 여기에서 확인하세요 .