[Database] CDC란?

지구본욱·2025년 4월 16일

이번에 진행하고 있는 프로젝트에서 CDC 기반의 데이터 메니지먼트 시스템을 구축하라는 과제가 주어졌다.
이에 따라 오늘은 CDC가 무엇인지 알아보고자 한다.

1. CDC란 ?

CDC는 Change Data Capture의 약자로서 데이터베이스 안에서 일어나는 모든 변화를 감지하고, 이를각각의 이벤트로 기록하여 스트림으로 전달한다.
즉 DB에서 데이터 변경된 것을 즉각적으로 감지하여 어떤 행위를 유발하는 것이 CDC인 것이다.
이렇게 수집된 이벤트들은 분석, 운영적인 목적으로 사용하거나 다른 데이터베이스(동종 혹은 이종)로 전송하는 등의 다양한 용도로 활용한다.

왜 사용할까 ?

요즈음은 서비스가 복잡해지고 하나의 어플리케이션이 다양한 기능을 수행하기 때문에 여러 서비스가 병렬로 구성되어 있다.
각각의 서비스들은 지속적으로 데이터가 변경이 되는데, 이 변경이 누락되지 않으며 로직들을 수행해야 한다.
( 예를 들어 일기 데이터에 변화가 생기면 자동으로 알람 서비스에서 부모에게 알람을 보내는 . . .)

CDC는 데이터베이스를 교체하는 위험부담 없이 Event-driven architecture로 많은 이점을 얻는다.

구현 방법

  1. timestamp
    : 테이블 내 마지막 변경 시점을 기록하는 timestamp (updated_time) 컬럼이 존재
    : 더 최근 timestamp 값을 갖느는 레코드가 발견이 된다면, 변경이 되었다고 식별

But, timestamp 컬럼이 무조건 존재해야하고 관리해야한다. + 실시간으로 변경된 데이터를 반영하기 힘들다.

  1. trigger
    : 변경 감지가 필요한 테이블에 trigger를 생성하여 데이터 변경 시 queue 형식의 테이블에 기록한다.
    : 데이터 수집기에서 이 queue를 조회하여 작업 실행

But, 테이블마다 trigger 생성으로 오버헤드 증가 + DB 성능저하

  1. Event programming
    : 어플리케이션 계층에서 데이터가 변경이 된다면 이벤트 생성
    : REST API 기반 혹은 Message Queue 기반의 이벤트 발행
    : 다양한 조건에 의해 변경 데이터를 실시간으로 반영 가능하다.

  2. Log Scanner
    : DB 트랜잭션 로그를 읽어 변경 사항 추출한다 (ex. Debezium)

profile
어제보다 1cm라도 나아가는 사람 (위로)

0개의 댓글