이번에 진행하고 있는 프로젝트에서 CDC 기반의 데이터 메니지먼트 시스템을 구축하라는 과제가 주어졌다.
이에 따라 오늘은 CDC가 무엇인지 알아보고자 한다.
CDC는 Change Data Capture의 약자로서 데이터베이스 안에서 일어나는 모든 변화를 감지하고, 이를각각의 이벤트로 기록하여 스트림으로 전달한다.
즉 DB에서 데이터 변경된 것을 즉각적으로 감지하여 어떤 행위를 유발하는 것이 CDC인 것이다.
이렇게 수집된 이벤트들은 분석, 운영적인 목적으로 사용하거나 다른 데이터베이스(동종 혹은 이종)로 전송하는 등의 다양한 용도로 활용한다.

요즈음은 서비스가 복잡해지고 하나의 어플리케이션이 다양한 기능을 수행하기 때문에 여러 서비스가 병렬로 구성되어 있다.
각각의 서비스들은 지속적으로 데이터가 변경이 되는데, 이 변경이 누락되지 않으며 로직들을 수행해야 한다.
( 예를 들어 일기 데이터에 변화가 생기면 자동으로 알람 서비스에서 부모에게 알람을 보내는 . . .)
CDC는 데이터베이스를 교체하는 위험부담 없이 Event-driven architecture로 많은 이점을 얻는다.
But, timestamp 컬럼이 무조건 존재해야하고 관리해야한다. + 실시간으로 변경된 데이터를 반영하기 힘들다.
But, 테이블마다 trigger 생성으로 오버헤드 증가 + DB 성능저하
Event programming
: 어플리케이션 계층에서 데이터가 변경이 된다면 이벤트 생성
: REST API 기반 혹은 Message Queue 기반의 이벤트 발행
: 다양한 조건에 의해 변경 데이터를 실시간으로 반영 가능하다.

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