
CDC(Change Data Capture)는 데이터베이스에서 발생하는 변경 사항을 실시간 또는 준실시간으로 감지하고,
그 변경 내용을 다른 시스템으로 전달하는 기술이다.
주로 데이터 동기화, 이벤트 기반 아키텍처, 실시간 분석 파이프라인에서 핵심적인 역할을 한다.
기존의 데이터 연동 방식이 주기적인 배치 작업에 의존했다면,
CDC는 “변경이 발생한 순간”을 기준으로 데이터를 처리한다는 점에서 근본적인 차이가 있다.
CDC가 필요한 이유
현대 서비스 환경에서는 하나의 데이터베이스만으로 모든 요구사항을 처리하기 어렵다.
운영 DB는 트랜잭션 처리에 최적화되어 있고, 분석 시스템이나 검색 시스템은 읽기 성능이나 대규모 집계에 특화되어 있다.
이때 운영 DB의 데이터를 다른 시스템으로 복제해야 하는데, 단순한 전체 덤프 방식은 다음과 같은 문제를 가진다.
- 데이터 양이 많아질수록 성능 부담이 커짐
- 실시간성이 떨어짐
- 변경되지 않은 데이터까지 반복 처리하게 됨
CDC는 변경된 데이터만을 대상으로 처리하기 때문에 시스템 부하를 줄이고, 데이터 지연을 최소화할 수 있다.
CDC의 기본 개념
CDC는 데이터베이스에서 발생하는 다음과 같은 이벤트를 감지한다.
- INSERT: 새로운 데이터 생성
- UPDATE: 기존 데이터 변경
- DELETE: 데이터 삭제
이 이벤트를 로그 또는 스트림 형태로 외부 시스템에 전달하며, 전달되는 정보에는 보통 다음이 포함된다.
- 어떤 테이블에서 변경이 발생했는지
- 변경 전 데이터와 변경 후 데이터
- 변경이 발생한 시점
- 트랜잭션 순서 정보
이 덕분에 외부 시스템은 데이터의 상태를 정확하게 재현할 수 있다.
CDC 구현 방식
CDC를 구현하는 방식은 크게 세 가지로 나눌 수 있다.
1) 트리거 기반 방식
데이터베이스 트리거를 사용하여 데이터 변경 시 별도의 테이블이나 메시지 큐로 데이터를 기록하는 방식이다.
구현이 직관적이라는 장점이 있지만, 트리거가 많아질수록 DB 성능에 직접적인 영향을 주며, 복잡한 로직이 DB 내부에 쌓이게 되는 단점이 있다.
2) 쿼리 기반 방식
updated_at 같은 타임스탬프 컬럼을 기준으로 주기적으로 변경 데이터를 조회하는 방식이다.
구현 난이도는 낮지만, 완전한 실시간 처리가 어렵고 삭제 데이터 추적이 까다롭다는 한계가 있다.
3) 로그 기반 방식
데이터베이스의 트랜잭션 로그(binlog, WAL 등)를 직접 읽어 변경 사항을 추적하는 방식이다.
DB 성능에 거의 영향을 주지 않으며, 가장 정확하고 확장성이 뛰어난 방식이다. 다만 초기 설정과 운영 난이도가 상대적으로 높다.
실무에서는 대부분 로그 기반 CDC를 선택한다.
대표적인 CDC 도구
실제 서비스 환경에서는 CDC를 직접 구현하기보다는 검증된 도구를 활용하는 경우가 많다.
- Debezium: Kafka 기반의 대표적인 오픈소스 CDC 플랫폼
- AWS DMS: AWS 환경에서 CDC를 지원하는 관리형 서비스
- Oracle GoldenGate: 엔터프라이즈 환경에서 많이 사용되는 상용 솔루션
이러한 도구들은 데이터베이스 변경 이벤트를 Kafka, Kinesis 같은 스트리밍 플랫폼으로 전달해준다.
CDC와 이벤트 기반 아키텍처
CDC는 이벤트 기반 아키텍처의 중요한 데이터 소스가 된다.
데이터베이스의 변경 자체를 하나의 이벤트로 취급함으로써, 다음과 같은 구조가 가능해진다.
- 주문 생성 시 자동으로 알림 시스템 트리거
- 유저 정보 변경 시 검색 인덱스 자동 갱신
- 결제 완료 시 통계 시스템에 즉시 반영
이 방식은 서비스 간 결합도를 낮추고, 확장성을 크게 높여준다.
CDC 사용 시 고려사항
CDC를 도입할 때는 몇 가지 주의할 점이 있다.
- 데이터 순서 보장: 이벤트 처리 순서가 어긋나면 데이터 불일치가 발생할 수 있음
- 스키마 변경 대응: 컬럼 추가, 타입 변경 시 CDC 파이프라인 영향
- 장애 복구 전략: 중단 시 어느 지점부터 다시 처리할 것인지에 대한 설계
- 개인정보 처리: 민감 정보가 이벤트로 외부 전파되지 않도록 필터링 필요
기술적으로는 강력하지만, 운영 관점에서의 설계가 매우 중요하다.
CDC가 적합한 사용 사례
CDC는 다음과 같은 상황에서 특히 효과적이다.
- 실시간 데이터 동기화가 필요한 서비스
- 마이크로서비스 환경에서 DB 공유를 피하고 싶은 경우
- 운영 DB 부하를 최소화하면서 분석 시스템을 구축하려는 경우
- 이벤트 기반 처리 흐름을 만들고 싶은 경우
반대로 단순한 소규모 서비스에서는 과도한 복잡도가 될 수도 있다.
마무리
CDC는 단순한 데이터 복제 기술이 아니라, 실시간 데이터 흐름을 가능하게 하는 핵심 인프라다. 특히 MSA, 스트리밍 처리, 실시간 분석이 중요한 환경에서는 선택이 아니라 필수에 가까운 기술이 되고 있다.
다만 도입 자체보다 중요한 것은 “왜 CDC가 필요한가”와 “어디까지 사용할 것인가”에 대한 명확한 기준이다.
목적이 분명할수록 CDC는 강력한 무기가 된다.
'CS' 카테고리의 다른 글
| Stateless vs Stateful (0) | 2026.05.10 |
|---|---|
| CDN 개념부터 실무 아키텍처까지 (0) | 2026.04.15 |
| 데이터 바인딩(Data Binding)이란 무엇인가 (0) | 2026.01.02 |
| CORS (Cross-Origin Resource Sharing) (0) | 2025.12.09 |
| API Gateway (API 게이트웨이) (0) | 2025.11.12 |