Supabase ETL 소개

발행: (2025년 12월 22일 오후 11:09 GMT+9)
11 min read
원문: Dev.to

Source: Dev.to

Cover image for Introducing Supabase ETL

Supabase ETL는 논리 복제를 사용해 Postgres 데이터베이스의 변경 사항을 읽고 이를 외부 분석 목적지에 거의 실시간으로 복제하는 체인지‑데이터‑캡처 파이프라인입니다. 설정은 Supabase 대시보드에서 몇 분이면 완료됩니다.
현재 지원되는 첫 번째 목적지는 Analytics Buckets(Iceberg 기반)와 BigQuery입니다.
Supabase ETL는 오픈 소스이며, 코드는 GitHub에 있습니다.

왜 OLTP와 OLAP를 분리해야 할까?

Postgres는 트랜잭션 워크로드(예: 단일 사용자 레코드 읽기 또는 주문 삽입)에 뛰어납니다. 분석을 위해 수백만 행을 스캔해야 할 때는 Postgres가 느려집니다.

BigQuery와 같은 컬럼 지향 시스템이나 Apache Iceberg와 같은 오픈 포맷 위에 구축된 시스템은 이를 위해 설계되었습니다. 이들은:

  • 방대한 데이터셋을 수십 배 빠르게 집계
  • 데이터를 보다 효율적으로 압축
  • 트랜잭션 데이터베이스에서는 버거울 복잡한 분석 쿼리 처리

Supabase ETL은 양쪽의 장점을 제공합니다: Postgres에서 앱을 빠르게 유지하면서 목적에 맞게 구축된 시스템에서 강력한 분석을 활용하세요.

작동 방식

Supabase ETL는 Postgres 데이터베이스의 모든 변경 사항을 캡처하여 거의 실시간으로 분석 목적지에 전달합니다.

  1. Postgres 퍼블리케이션 생성: 복제할 테이블을 정의합니다.
  2. ETL 구성: 퍼블리케이션을 목적지에 연결합니다.
  3. ETL은 논리 복제 슬롯을 통해 퍼블리케이션에서 변경 사항을 읽습니다.
  4. 변경 사항은 배치 처리되어 목적지에 기록됩니다.
  5. 데이터는 목적지에서 쿼리할 수 있습니다.

파이프라인은 선택한 테이블을 초기 복사한 후 스트리밍 모드로 전환됩니다. 분석 결과는 밀리초에서 초 수준의 지연 시간으로 최신 상태를 유지합니다.

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: 대상 추가

  1. Add Destination 을 클릭하고 대상 유형을 선택합니다.
  2. (Analytics Buckets 전용) 먼저 Storage 섹션에서 분석 버킷을 생성합니다.
  3. 버킷 자격 증명을 입력하고 퍼블리케이션을 선택해 대상을 구성합니다.
  4. Create 를 클릭한 뒤 Start 를 눌러 복제를 시작합니다.

단계 4: 파이프라인 모니터링

대시보드에서 파이프라인 상태와 지연을 확인할 수 있습니다. 작업 메뉴에서 파이프라인을 시작, 중지, 재시작 또는 삭제할 수 있습니다.

Source:

사용 가능한 대상

Supabase ETL의 목표는 기존 데이터 시스템을 Supabase에 연결할 수 있게 하는 것입니다. 우리는 지원되는 대상 목록을 적극적으로 확장하고 있습니다. 현재 공식적으로 지원되는 대상은 Analytics BucketsBigQuery입니다.

Analytics Buckets

Analytics BucketsApache 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로 작성되었습니다. 저장소는 여기에서 확인하세요 .

Back to Blog

관련 글

더 보기 »