Change Data Capture

소스 DB의 변경분만 감지하여 하류 시스템에 전파하는 데이터 통합 패턴


핵심 개념

CDC(Change Data Capture)는 데이터베이스의 변경(INSERT, UPDATE, DELETE)을 감지하여 하류 시스템에 실시간 또는 준실시간으로 전파하는 패턴이다. 야간 풀 테이블 복사의 비효율성과 소스 DB 부하 문제를 해결한다.

3가지 CDC 방식

1. Timestamp 기반

  • updated_at 컬럼을 기준으로 변경된 행을 쿼리
  • 간단하지만 hard delete를 감지할 수 없음
  • 소스 테이블에 인덱스 필요

2. Trigger 기반

  • DB 트리거로 변경을 별도 테이블에 기록
  • hard delete 감지 가능
  • 트리거 오버헤드가 OLTP 성능에 영향

3. Log 기반 (권장)

  • DB의 트랜잭션 로그(WAL/binlog)를 직접 읽음
  • Debezium + Postgres WAL 또는 MySQL binlog이 프로덕션 표준
  • OLTP 성능에 영향 없이 near-real-time 복제
  • hard delete 감지, DDL 변경 처리 가능
  • 복제 처리량이 트랜잭션 쓰기 부하와 완전히 디커플링

관련 개념: SCD (Slowly Changing Dimensions)

CDC로 캡처한 변경을 데이터 웨어하우스에 어떻게 반영할지는 SCD 전략과 연계된다.

Pinterest — 통합 CDC 인제스천 프레임워크

레거시 배치 인제스천(24시간+ 지연)을 Debezium/TiCDC + Kafka + Flink + Spark + Iceberg 기반으로 대체:

  • CDC 레이어가 1초 이내 레이턴시로 변경을 Kafka에 기록
  • Flink가 CDC Iceberg 테이블에 적재 → Spark가 15분 주기 MERGE INTO로 Base 테이블 업서트
  • Merge-on-Read(MOR) 전략 표준화: COW 대비 스토리지·컴퓨트 비용 절감
  • Bucket Join 최적화: 풀 셔플 회피로 40%+ 컴퓨트 비용 절감
  • MySQL, TiDB, KVStore를 단일 프레임워크로 지원 (Config-Driven 온보딩)

Zepto — 고처리량 Debezium 최적화

고속 CDC 파이프라인에서의 쓰기 증폭(write amplification) 해결:

  • 인메모리 리덕션 버퍼: 시간 윈도우 내 동일 키의 중복 업데이트를 병합
  • UNNEST 기반 배치: 여러 upsert를 단일 SQL 문으로 결합하여 PostgreSQL 파싱 오버헤드 절감

Soft Delete와 CDC

소프트 삭제 대안으로 CDC가 활용될 수 있다:

  • 트리거 기반 아카이빙이 신규 프로젝트에 권장 (프로덕션 테이블을 깨끗하게 유지)
  • WAL 기반 CDC(Debezium)는 소비자 지연 시 프라이머리 DB 안정성 위험이 있음

언제 쓰는가

  • 5,000만 행 테이블에서 5,000건 변경을 추적할 때 풀 카피는 비합리적
  • 실시간 분석이나 ML 피처 파이프라인의 입력으로
  • 마이크로서비스 간 데이터 동기화

연관 개념


Source: Change Data Capture, Next Generation DB Ingestion at Pinterest, Debezium at Scale - An Open Source CDC Story from Zepto, The challenges of soft delete