database

CDC (Change Data Capture) 변경 데이터 캡처

HJHStudy 2025. 5. 11. 00:59
728x90

CDC란?

Change Data Capture로 변경데이터 캡처라 부른다.

데이터베이스에서 데이터의 변경 사항을 실시간으로 감지하고 외부 시스템에 전달하는 기술이다. 이벤트 기반 시스템, 마이크로서비스 간 동기화, 분석 파이프라인 구축 등에 사용된다.

 

방식으로는 쿼리기반, 트리거 기반, 로그 기반이 있다.

쿼리 기반 - 주기적으로 updated_at 등을 조회해 변경 감지하고 간단하지만 부정확하고 누락 가능성과 부하가 발생하기도 한다.

트리거 기반 - DB 트리거로 변경 로그 테이블에 기록하고 신뢰성은 높지만 DB에 종속적이다.

로그 기반 - DB의 트랜잭션 로그(Write-Ahead Log)를 분석한다. 실시간, 안정성이 높지만 복잡도가 높고 로그에 대한 접근 권한이 필요하다. 

 

사용하는 이유

데이터 일관성 유지 - DB와 외부 시스템 데이터 일관성을 유지가능

이벤트 기반 아키텍처 구현 - DB 변경을 이벤트로 전환해 마이크로서비스 간 비동기 통신 가능

데이터 파이프라인 구축 - 실시간 ETL(Extract-Transform-Load), 로그 수집, 감사 추적 등

부하 최소화 - 폴링 없이 변경만 감지로 DB에 대한 부하 감소

 

CDC를 통해 할 수 있는 것들 (설명 기준 DMS)

1. 특정 시점으로 복구(PITR point-in-time recovery)

 - CDC는 시간과 함께 순차적 로그가 저장되기 때문에 특정 시점으로 추적 및  복구가 가능하다.

 

2. 실시간 데이터 복제

 - CDC 로그는 별도로 DB가 관리하는 것으로 실시간으로 외부 시스템에 연동하러면 별도의 도구가 필요하다.

- 대표적으로 AWS DMS, Azure DMS, GCP DataStream, Kafka Debezium이 있다.

 

3. 무중단 데이터 이관

 - 만약 데이터를 무중단 이관시 많은 데이터가 있을 때 며칠이 걸릴 수 있는 작업이다.

 일반적 데이터 이관 방법은 다음과 같은 문제가 발생한다.

 

전체 데이터를 이관하는 동안 새로 추가된 데이터를 선별해 대상 DB에 추가해야한다. 원본과 복제된 데이터를 비교해 삭제된 데이터를 선별하고 DB에서 삭제한다. 변경된 데이터는 작업동안 변경된 것인지 DB 연결이 바뀐 후 변경된지 알 수 없어서 대상 DB에 반영 할 수 없다.

CDC를 활용해 어떻게 실시간 복제가 가능한지 확인해보자.

 

기존 DB에서 발생하는 CDC 이벤트를 DMS에 넣어 큐 역할을 하게 하고 전체 데이터를 타겟 DB에 삽입한다. 전체 데이터를 넣는 동안 발생하는 변경분 데이터도 DMS를 통해 DB에 반영하기 때문에 최종적 일관성을 이룬다. 이렇게 서비스 중단 없이 실시간 이관이 가능하다.

 

4. 이벤트 드리븐 아키텍처

 - AWS DMS는 대상 엔드포인트를 카프카나 Kinesis로 설정할 수 있다. 토픽에 대해 pub/sub 형식으로 이벤트를 발행, 구독하는 카프카를 통한 이벤트 드리븐 아키텍쳐를 주로 구성한다.

 

 

CDC는 DB에서 제공되는 기록을 통해 진행이 된다.

관계형 데이터베이스에서는 대표적으로 Postgresql, mysql이나 NoSql에서는 MongoDB, Cassandre, DynamoDB 등이 있다.

각 DB에서 CDC를 제공하는 방법은 다음과 같다.

 

mysql - binlog(BInarly Log)

Postgresql - WAL (Write Ahead Log)

MongoDB - Oplog (Operations Log)

Cassandre - commitlog

DynamoDB -  DynamoDB Streams/ON

이 중 Postgresql만 둘러 봐보자.

 

Postgresql은 pg_wal 폴더 안에 WAL 파일 안 CDC 이벤트를 기록한다.

WAL은 간략히 로그 선행 기입으로 데이터 변경을 메모리에사 디스크로 저장 전 트랜잭션 로그를 디스크에 먼저 저장하는 것을 의미한다.

이 저장된 기록을 통해 CDC를 구현할 수 있다.

 

CDC 사용시 고려할 점

로그 접근 권한 로그 기반은 DB 로그 접근 권한 필요
스키마 변경 컬럼 추가/삭제 시 CDC 파이프라인이 깨질 수 있음
순서 보장 Kafka를 통한 CDC는 파티션 설계로 순서 보장 고려
부하 영향 트리거 방식은 DB 부하 증가 가능성 있음
역처리/재처리 재처리 및 역처리를 고려한 이벤트 저장 필요

 

여기까지 CDC의 특징을 알아보았고 kafka를 주로 활용하며 kafka 스트림, Apache Flink 등을 활용해 실시간 데이터 집계 등 작업을 진행할 수 있다.

728x90