CDC란 무엇인가
CDC(Change Data Capture)는 데이터베이스에서 발생하는 변경 사항, 즉 데이터의 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)를 실시간으로 감지해서 다른 시스템으로 전달하는 기술입니다. 쉽게 말해 데이터베이스에 어떤 일이 일어났는지를 실시간으로 알려주는 ‘감시 카메라’라고 생각하면 됩니다. 예를 들어 주문 테이블에 새 주문이 들어오는 순간, CDC는 이를 즉시 감지해서 재고 시스템이나 알림 서비스에 그 변경 내용을 전달할 수 있습니다.
과거에는 이런 변경 사항을 파악하기 위해 주기적으로 테이블 전체를 조회하는 배치(batch) 방식을 많이 썼습니다. 하지만 이 방식은 변경이 없어도 매번 전체 데이터를 훑어야 해서 비효율적이고, 실시간성도 떨어졌습니다. CDC는 이런 한계를 해결하기 위해 등장한 기술입니다.
CDC는 어떻게 동작하는가
CDC를 구현하는 방식은 크게 세 가지로 나뉩니다.
- 트리거 기반: 테이블에 트리거(trigger)를 걸어 변경이 발생할 때마다 별도 로그 테이블에 기록하는 방식입니다. 구현은 간단하지만 원본 DB에 부하를 줄 수 있습니다.
- 쿼리 기반: ‘updated_at’ 같은 타임스탬프 컬럼을 주기적으로 조회해서 변경분을 찾는 방식입니다. 구현이 쉽지만 실시간성이 떨어지고 삭제된 데이터는 감지하기 어렵습니다.
- 로그 기반: 데이터베이스가 내부적으로 기록하는 트랜잭션 로그(예: MySQL의 binlog, PostgreSQL의 WAL)를 직접 읽어서 변경 사항을 추출하는 방식입니다. 원본 DB에 부하를 거의 주지 않으면서도 실시간에 가깝게 변경을 감지할 수 있어 가장 많이 사용됩니다.
예를 들어 Debezium이라는 오픈소스 CDC 도구는 MySQL의 binlog를 읽어서 변경된 row 정보를 Kafka 메시지로 발행합니다. 이후 이 메시지를 구독하는 애플리케이션들은 원본 DB를 직접 조회하지 않고도 변경 사실을 알 수 있습니다.
실무에서 왜 CDC를 쓰는가
CDC는 특히 여러 시스템 간 데이터 동기화가 필요한 마이크로서비스 환경에서 유용합니다. 각 서비스가 자기 DB를 직접 폴링하지 않고, CDC가 발행한 이벤트를 구독하기만 하면 되기 때문에 시스템 간 결합도가 낮아집니다.
또한 실시간 데이터 웨어하우스 적재, 캐시 무효화, 검색 엔진 인덱스 갱신, 감사(audit) 로그 생성 등에도 널리 활용됩니다. 배치 작업으로 하루에 한 번 동기화하던 데이터를 CDC를 통해 초 단위로 갱신할 수 있게 되면서, 실시간 데이터 파이프라인을 구축하는 핵심 기술로 자리 잡았습니다.