LLM WikiAccess-protected knowledge portal

WIKI

PostHog의 DuckDB 데이터 웨어하우스: DuckLake·DuckGres·Firecracker 단일 테넌트로 ClickHouse 다음을 구성한 방법

요약 PostHog는 제품 분석 Product Analytics SaaS다. 이벤트 수집부터 퍼널, 코호트, A/B 테스트까지 처리하는 핵심 스토리지는 ClickHouse—멀티테넌트 클러스터에서 수십억 건의 이벤트를 실시간으로 집계한다. 이 구조는 이벤트 분석에서 잘 작동했지만, 데이터 엔지니어가 실제로 쓰고 싶은 도구들과는 연결되지 않았다 . 2026년 6월 PostHog는 두 번째 스토리지 레이어를 공개했다. ClickHo

경로human/study/content/database-frontier/97-posthog-duckdb-data-warehouse-ducklake-duckgres-single-tenant.md
카테고리Study
태그#duckgres #ducklake #monitoring #mysql #security #single #study #tenant #warehouse

요약

PostHog는 제품 분석(Product Analytics) SaaS다. 이벤트 수집부터 퍼널, 코호트, A/B 테스트까지 처리하는 핵심 스토리지는 ClickHouse—멀티테넌트 클러스터에서 수십억 건의 이벤트를 실시간으로 집계한다. 이 구조는 이벤트 분석에서 잘 작동했지만, 데이터 엔지니어가 실제로 쓰고 싶은 도구들과는 연결되지 않았다.

2026년 6월 PostHog는 두 번째 스토리지 레이어를 공개했다. ClickHouse를 대체하는 것이 아니라 분리된 데이터 웨어하우스다. 핵심 설계 결정은 세 가지: 단일 테넌트 DuckDB, DuckLake 카탈로그, DuckGres Postgres 와이어 프로토콜. 이 조합이 dbt·BI 도구·표준 드라이버를 PostHog 이벤트 데이터 위에서 그대로 쓸 수 있게 만든다.


문제: ClickHouse 멀티테넌트의 한계

이벤트 분석에서의 ClickHouse

PostHog의 운영 스택은 ClickHouse를 중심으로 설계됐다. 초당 수백만 건의 이벤트를 수집하고, 집계 쿼리를 밀리초 단위로 응답하는 데 ClickHouse는 적합하다. 문제는 이 용도 밖에서 시작됐다.

멀티테넌트 구조의 세 가지 장벽

1. 직접 연결 불가

ClickHouse 클러스터를 여러 고객이 공유하는 멀티테넌트 구조에서는 개별 고객에게 클러스터 직접 연결 권한을 줄 수 없다. 한 고객의 무거운 쿼리가 다른 고객 성능에 영향을 준다. 결과적으로 dbt가 PostHog 데이터에 직접 접근하는 경로가 없었다.

2. 데이터 생태계 도구 미지원

dbt, Metabase, Grafana, Tableau 같은 도구는 PostgreSQL 방언이나 표준 JDBC/ODBC 드라이버를 기대한다. ClickHouse는 고유한 SQL 방언과 프로토콜을 쓴다. 커넥터가 있어도 기능 제한이 크다.

3. 조직 간 데이터 분리 복잡성

멀티테넌트 ClickHouse에서 한 조직의 데이터가 다른 조직의 쿼리에 노출되지 않도록 보장하는 것은 복잡한 행-수준 접근 제어(Row-Level Security) 구현을 요구한다. 실수 하나가 데이터 유출이 된다.


해결: 단일 테넌트 DuckDB 아키텍처

핵심 원칙: 컴퓨트와 스토리지의 완전 분리

PostHog DuckDB 데이터 웨어하우스 아키텍처 S3 오브젝트 스토리지 (DuckLake 카탈로그) 조직별로 파티셔닝 · DuckDB와 무관하게 독립 존재 · Parquet/Iceberg 포맷 PostHog 이벤트 데이터 Stripe / HubSpot 외 36개 소스 조직 B Postgres 미러 조직 C MySQL 미러 라이프사이클 매니저 쿼리 도착 → 300ms 내 시작 60초 유휴 → 자동 종료 조직 A (Firecracker MicroVM) DuckDB 인스턴스 — 단일 테넌트 S3 데이터 읽기·쓰기 전용 권한 조직 B (Firecracker MicroVM) DuckDB 인스턴스 — 단일 테넌트 조직 A 데이터 접근 불가 조직 C (Firecracker MicroVM) DuckDB 인스턴스 — 단일 테넌트 독립된 컴퓨트 · 성능 격리 DuckGres — PostgreSQL 와이어 프로토콜 엔드포인트 dbt · Metabase · Grafana · Superset · Tableau · psql · JDBC/ODBC 드라이버 직접 연결
PostHog DuckDB 데이터 웨어하우스 아키텍처

Firecracker MicroVM: 테넌트 격리의 하드웨어 경계

PostHog는 조직별 DuckDB 인스턴스를 Firecracker MicroVM 위에서 실행한다. Firecracker는 AWS가 Lambda와 Fargate에 사용하는 경량 가상화 기술이다. Docker 컨테이너보다 강한 커널 수준 격리를 제공하면서, 부팅 시간은 밀리초 단위다.

이 선택의 결과:

라이프사이클 관리

상태조건동작
슬리핑60초 유휴 후MicroVM 종료, 비용 중단
웜업쿼리 도착~300ms 내 MicroVM 시작, DuckDB 초기화
실행 중쿼리 처리DuckDB가 S3에서 필요한 Parquet 파일 읽기
종료 예약쿼리 완료 후 60s연속 쿼리 없으면 종료

DuckLake: 컴퓨트에 묶이지 않는 카탈로그

DuckLake는 DuckDB Labs가 만든 오픈소스 Lakehouse 포맷 겸 카탈로그 레이어다(2026-04 GA). PostHog는 DuckLake를 스토리지 카탈로그로 채택해, 데이터를 DuckDB에 종속시키지 않는다.

DuckLake의 역할:

PostHog의 표현: "DuckLake가 있어서 DuckDB에 영원히 묶이지 않는다."


DuckGres: PostgreSQL 껍데기를 두른 DuckDB

왜 Postgres 프로토콜인가

데이터 생태계의 대부분 도구는 Postgres 방언과 Postgres 와이어 프로토콜을 이해한다. dbt에는 수십 개의 Postgres 어댑터가 있다. Metabase·Grafana·Tableau는 Postgres 연결 설정을 기본으로 제공한다.

DuckGres는 DuckDB 앞에 Postgres 인터페이스를 제공하는 오픈소스 서버다. 쿼리가 들어오면:

  1. Postgres 파서로 파싱: Postgres 문법을 DuckDB SQL로 변환
  2. DuckDB 폴백: 파싱 실패 시 DuckDB에서 직접 EXPLAIN으로 유효성 검증

세 가지 배포 모드:

PostHog 웨어하우스의 DuckGres가 지원하는 도구:

카테고리도구
BIMetabase, Grafana, Superset, Tableau
변환dbt (모든 어댑터)
SQL 클라이언트psql, DBeaver, DataGrip
언어 드라이버JDBC, ODBC, Python psycopg2/asyncpg

DuckHog: 로컬에서 웨어하우스 데이터 다루기

DuckHog는 로컬 DuckDB에 설치하는 확장이다. 웨어하우스 데이터의 일부 서브셋을 로컬로 내려받아 개발하고, 결과를 다시 웨어하우스에 쓸 수 있다.

-- 로컬 DuckDB에서 PostHog 웨어하우스 연결
LOAD duckhog;
CALL duckhog.connect('my-org-token');

-- S3에 있는 이벤트 데이터 로컬 쿼리
SELECT event, count(*) FROM posthog.events
WHERE toDate(timestamp) = today()
GROUP BY event ORDER BY 2 DESC;

개발자가 Pandas, Polars, DuckDB로 직접 분석하다가 결과를 웨어하우스에 쓰는 워크플로우를 지원한다.


ClickHouse와 DuckDB: 다른 역할, 다른 자리

PostHog는 ClickHouse를 버리지 않았다. 두 엔진이 명확하게 다른 역할을 맡는다.

ClickHouse (기존 핵심)
실시간 이벤트 집계
퍼널·코호트·세션 분석
초당 수백만 건 수집
밀리초 단위 응답
dbt 연결 불가
멀티테넌트 — 격리 복잡
DuckDB 웨어하우스 (신규)
데이터 모델링 (dbt)
BI 도구 직접 연결
외부 소스 통합 (Stripe 등)
조직별 완전 격리
Postgres 호환 — 표준 도구
S3 기반 — 스토리지 독립
PostHog 스택에서 ClickHouse와 DuckDB의 역할 분리

이 분리 전략은 PostHog만의 선택이 아니다. 이벤트 스트림을 ClickHouse로 빠르게 처리하면서, 구조화된 분석 레이어를 표준 SQL 도구로 구성하는 패턴은 데이터 플랫폼 설계에서 점점 일반화되고 있다.


운영 체크리스트: 유사 아키텍처를 고려할 때

PostHog의 설계에서 배울 수 있는 일반 원칙과 검토 사항:

저장소-컴퓨트 분리를 전제로 설계하라

단일 테넌트 격리의 비용을 먼저 계산하라

Postgres 호환 레이어의 기능 갭을 점검하라

데이터 신선도 모델을 명확히 정의하라


한계와 현재 상태

항목상태설명
웨어하우스 GA베타 (웨이팅리스트)2026년 6월 기준, 전체 공개 아님
웜업 지연~300ms슬리핑 인스턴스 재시작 비용
ClickHouse 미러 지연수 초~수 분실시간 분석에 부적합
DuckGres SQL 호환성Postgres 방언 부분 지원복잡한 시스템 카탈로그 쿼리 미지원 가능
DuckLake 성숙도1.0 GA (2026-04)Iceberg REST 호환은 DuckDB 1.5.3+ 필요

Open Question


References