pile·
DB / 데이터·마켓컬리마켓컬리 Hello World·

컬리의 BigQuery 도입기 - 2부

컬리 데이터플랫폼팀이 기존 Data Warehouse를 BigQuery로 이관한 2부로, CDC 기반 신규 데이터 파이프라인 아키텍처와 도입 후 성과를 다룬다. 정형·비정형 데이터를 CDC 로그로 받아 Merge 문으로 원본 DB와 동일 상태의 테이블을 유지하는 구조가 핵심이다.

핵심 포인트
  • 정형(Oracle·Aurora)은 AWS DMS로 CDC 로그를 Kafka Topic에 보내고 BigQuery Streaming API로 CDC 로그 테이블에 적재한다.
  • 비정형(DocumentDB)은 Change Stream을 JSON Format Processing으로 필요한 컬럼만 추출하고, 원본 Document는 JSON 타입 컬럼에 보관해 스키마 변화에 대응한다.
  • Cloud Composer(Airflow)가 Merge Procedure를 주기 실행해 CDC 로그를 Final 테이블에 반영하고 원본과 동일 상태를 유지한다.
  • 기존 UPSERT 스크립트는 Delete 미반영으로 정합성이 깨졌으나 Merge 문으로 Insert·Update·Delete를 한 번에 처리한다.
  • 30분 이상 걸리던 Task가 13초로 단축되고 쿼리 응답·비용도 대폭 개선됐다.
상세 정리
  • 정형 파이프라인: RDBMS에서 AWS DMS로 CDC 로그를 Kafka Topic에 보내고 BigQuery Streaming API로 일자 파티션된 CDC 로그 테이블에 적재한다. 로그 테이블은 변경 레코드·DML operation·발생 timestamp를 저장한다.
  • Merge Procedure: Primary Key·생성일자·DML operation·CDC timestamp 4개 컬럼으로 Final 테이블과 CDC 로그를 비교해 원본 DB와 동일 상태로 만든다. 컬리 모든 RDBMS 테이블에 PK와 생성일자가 있어 가능하다.
  • 비정형 파이프라인: DocumentDB Change Stream을 Kafka로 보내고 JSON Format Processing으로 Merge에 필요한 컬럼을 추출해 CDC 로그 테이블에 저장하되, 원본 Document 전체는 data라는 JSON 컬럼에 담아 추가 컬럼 누락을 막는다. BigQuery의 JSON 타입 지원으로 스키마 변화에 일일이 대응하지 않아도 된다.
  • 데이터 레이크하우스: BigQuery는 스토리지 비용이 저렴하고 확장성이 커, 운영 DB 이력(CDC 로그)·데이터 마트·대용량 로그를 삭제 없이 장기 보관한다.
  • 파이프라인 개선: 기존은 임시 테이블 생성·과거 삭제·신규 삽입·임시 삭제 4단계 UPSERT로 느리고 Delete가 반영되지 않아 정합성 문제가 있었다. Merge 문으로 스크립트 없이 빠르게 적재해 연동 지연이 대폭 줄었고, 30분 이상 걸리던 Task가 13초로 단축됐다.
  • 쿼리 응답: 데이터 파이프라인용과 조회용 프로젝트를 분리해 자원 경합을 줄이고, 조회 시 파티션 필수 옵션으로 스캔 용량을 줄여 응답 시간을 개선했다.
  • 비용: 기존 DW는 서버 규모 기반 고정 비용이었는데, BigQuery는 스캔 비용 또는 슬롯 예약 방식이라, 스캔이 크고 사용자가 많은 프로젝트는 슬롯을 예약하고 그 외는 하루 스캔 용량을 제한해 비용을 절감했다.
  • 이관: POC부터 신규 파이프라인 설계·구축·이관까지 6개월이 걸렸고, 기존 파이프라인을 함께 운영하며 진행했다. e-Commerce 최초 BigQuery 도입 사례다.
왜 읽나CDC로 운영 DB를 데이터 웨어하우스에 동기화하려는 데이터 엔지니어에게 BigQuery Merge·JSON 처리·프로젝트 분리로 성능·비용을 잡은 실전 아키텍처를 보여주는 사례.
마켓컬리
마켓컬리 Hello World 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. DB / 데이터·spotify-engSpotify Engineering·

    데이터 레이크 온라인 포인트 쿼리 인덱싱 — RAP

    Spotify 엔지니어링이 페타바이트 규모 데이터 레이크(GCS)에 저장된 Parquet 파일에서 한 자릿수 밀리초 레이턴시로 포인트 쿼리를 수행하는 RAP(Random Access Parquet) 방식을 공개했다. Trino·BigQuery 같은 분산 SQL 엔진은 단일 행 조회도 스케줄링·플래닝 비용으로 수 초가 걸리지만, RAP는 외부 인덱스로 키→(파일, 행 번호)를 직접 매핑해 의존적 read chain을 병렬화함으로써 이 문제를 해결했다. 기존 KV 스토어(Bigtable)와 달리 GB당 비용이 클라우드 스토리지 read 수준에 불과해 장기 이력 데이터나 롱테일 피처도 인터랙티브 조회 대상이 된다.

    #data-engineering#indexing#data-lake+2
  2. DB / 데이터·여기어때 (GC컴퍼니)여기어때 (GC컴퍼니)·

    데이터 통합— MongoDB 원칙으로 document를 통합하고 동기화를 재설계하다 (3/3)

    여기어때 전시개발팀은 ES 단일 대문서 → MongoDB v1 RDB 1:1 파편화 → v2 도메인 단위 통합이라는 세 차례 구조 전환을 거쳐 전체 동기화 시간을 약 1시간에서 10분으로 단축했다. 이 글은 3부작의 마지막으로, v2 통합 문서 구조에 맞춰 "$set/$unset 필드 단위 부분 갱신 + 이벤트 발행" 기반 동기화를 어떻게 재설계했는지 구체적인 MongoDB 패턴과 함께 설명한다.

    #denormalization#data-sync#mongodb+2
  3. DB / 데이터·pinterest-engPinterest Engineering·

    Pinterest 차세대 DB 수집 프레임워크의 자동화된 스키마 진화

    Pinterest의 CDC 기반 DB 수집 파이프라인은 MySQL에서 Kafka, Flink, Spark, Iceberg를 거치는 다층 구조다. 스키마 변경이 생기면 모든 계층을 동시에 업데이트해야 해 드리프트, 배포 실패, 데이터 불일치가 반복됐다. Pinterest 엔지니어링 팀은 이를 해결하기 위해 가산적 변경만 자동화하는 스키마 진화 프레임워크를 구축하고, PR 기반 롤아웃과 SLA 기반 일관성 모델을 도입했다.

    #data-pipeline#apache-flink#cdc+2