CDC

데이터베이스의 변경 사항(INSERT, UPDATE, DELETE)을 실시간으로 감지하여 다른 시스템에 전달하는 기술입니다.

핵심 개념

DB 변경 발생
→ CDC가 변경 감지
→ 다른 시스템에 전달

애플리케이션 코드 수정 없이
DB 레벨에서 변경 사항 캡처 O

동작 방식 (DB 트랜잭션 로그 기반)

DB는 모든 변경사항을 트랜잭션 로그에 기록
(MySQL: Binary Log, PostgreSQL: WAL)

CDC 도구가 트랜잭션 로그를 읽어
→ 변경 이벤트 생성
→ Kafka 등 메시징 시스템으로 전달

Polling vs CDC

PollingCDC
감지 방식주기적 DB 조회트랜잭션 로그 읽기
실시간성낮음 (폴링 주기)높음 (거의 실시간)
DB 부하높음낮음
코드 수정필요불필요

대표 도구 - Debezium

오픈소스 CDC 플랫폼
MySQL, PostgreSQL, MongoDB 등 지원
Kafka와 연동하여 변경 이벤트 스트리밍
// Debezium 설정 예시
{
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "database.hostname": "localhost",
    "database.port": "3306",
    "database.user": "debezium",
    "database.password": "password",
    "database.server.name": "mydb",
    "table.include.list": "mydb.orders"
}
// orders 테이블 변경 시 자동으로 Kafka로 이벤트 전송

이벤트 구조

{
  "op": "u",          // u: update, c: create, d: delete
  "before": {
    "id": 1,
    "status": "PENDING"
  },
  "after": {
    "id": 1,
    "status": "DONE"   // 변경된 값
  },
  "ts_ms": 1234567890
}

활용 사례

사례설명
캐시 동기화DB 변경 시 Redis 캐시 자동 갱신
검색 엔진 동기화DB 변경 시 Elasticsearch 자동 반영
마이크로서비스 연동서비스 간 데이터 동기화
감사 로그모든 데이터 변경 이력 추적
데이터 복제다른 DB로 실시간 복제

Outbox 패턴 + CDC

Outbox 패턴의 폴링 문제를 CDC로 해결

1. 비즈니스 로직 + Outbox 테이블 저장 (트랜잭션)
2. CDC가 Outbox 테이블 변경 감지
3. Kafka로 자동 전달
→ 폴링 없이 실시간 이벤트 발행 O

CDC는 애플리케이션 코드 변경 없이 DB 변경을 실시간으로 다른 시스템에 전파할 수 있어, 마이크로서비스 간 데이터 동기화와 이벤트 드리븐 아키텍처 구현에 매우 유용합니다.

CSLOG에서 보기