
CDC(Change Data Capture)란?
1. CDC의 정의
CDC는 요즘 들어 많이 들리는 용어 중에 하나이다. IT업계가 의례 그렇듯이, 기존에도 해오던 것을 뭔가 용어만 그럴싸하게 새롭게 만들어서 부르는 것 중에 하나라고 보면 된다.(개인적으로 자꾸 신조어 만드는 것을 아주 싫어한다)
여튼, CDC를 간단히 설명하면 데이터에 변화가 발생했을 때 변경된 부분만을 추출해서 타시스템이나 데이터베이스로 전송하기 위한 기법을 뜻한다. 기존에도 시스템간 연동에서 자주 쓰이던 개념이지만, 요즘 들어서는 워낙 대규모 시스템도 많고 MSA나 클라우드로 올라간 서비스들이 많아지다보니 중요도가 올라간 느낌이긴 하다.
2. CDC는 구체적으로 어떻게 할까?
그럼 CDC는 어떤 식으로 구현이 될까? 사실 정해진 방법은 없다. CDC의 개념에 부합이 된다면 어떤 방법으로 구현하든 그것은 CDC인 것이다. 하지만 가장 널리 사용되고 효율적인 방법이라고 알려진 것은 있다.
1) 로그 기반의 CDC
우선 로그 기반의 CDC가 있다. 사실상 이게 기본적으로 요즘 말하는 CDC이다. 가장 대표적인 솔루션으로는 Debezium이 있다.
![]()
간략한 Debezium의 아키텍쳐다. Debezium은 각 데이터베이스 별로 데이터 변경이 발생한 트랜잭션 로그 기반으로 데이터 변경 감지를 하고 이를 카프카와 같은 스트리밍 서비스로 해당 내용을 전송한다.
그리고 이를 구독하고 있는 시스템들이 이벤트 감지를 하여 변경된 데이터를 반영한다는 개념이다. Debezium는 가장 대표적인 솔루션이라 설명하였지만 이 외에도 오라클에서 출시한 GoldenGate라던가 이런저런 로그기반 CDC 솔루션들이 있다.
로그 기반 CDC의 가장 큰 장점은 라이브 환경 데이터베이스에 부하를 안 준다는 점이다. 이후 설명할 레거시한 방식의 CDC의 가장 큰 단점이 바로 그것이었기 때문이다. 또한, 아키텍쳐가 MSA나 클라우드 서비스에 최적화되어있어 대규모 실시간 전송도 가능하고 확장성도 좋다. 그 뿐만 아니라 데이터의 CDC 수행의 필요한 것들은 모두 솔루션에 위임하기 때문에 데이터의 정합성, 정확도, 신속성 등의 신뢰도가 높아진다.
그럼 장점만 있냐 하면, 또 그건 아니다. 우선 가장 큰 단점은 '비용'이다. Debezium는 물론 오픈소스기반이긴 하지만 유지 보수와 운영의 복잡성 때문에 비용이 더욱 부가될 수 밖에 없고, 오라클의 경우 라이선스 비용이 무시무시하다.
또한, 구축난이도나 투입되는 리소스도 높다. 거기에 망분리나 법적 규제가 있는 업종이라면 Debezium의 경우는 보안과 법적적합도에 대한 리스크를 감수해야될 수도 있다. 마지막으로, 업무적으로 감사 이슈에 대응하는 것이 어쩌면 더 복잡해질 수도 있다. 관리해야 될 포인트가 하나 더 늘어난 것이기 때문이다.
2) 트리거 기반 CDC
트리거를 통해 CDC를 구현하는 방법이다. 테이블에서 변경이 발생했을 때 트리거를 발생시켜 일종의 로그 테이블에 변경사항을 적재한다. 그리고 타 시스템에서 배치를 통해 해당 로그테이블의 데이터를 가져와 적재한다는 간단한 컨셉이다. 유수한 전통을 가진 정통적 방식으로 아마 많은 레거시시스템에서 이 방법을 차용하고 있을 것이다.
이 방법의 장점은 뭐니뭐니해도 간단함이다.
AFTER INSERT, AFTER DELETE, AFTER UPDATE
이렇게 변경에 대한 트리거만 처리하고 이를 가져갈 배치만 개발하면 끝이다. 데이터베이스에서 자체적으로 처리하니 별도 솔루션을 구축할 필요도 없고 추가 비용이 들지도 않는다.
새로운 기술을 배울 필요도 없으니 적용도 빠르고, 유지보수의 기술적이슈도 적다.
단점으로는 가장 큰 것은 역시 데이터베이스에 직접적 부하를 준다는 점이다. 데이터가 변경될 때마다 트리거가 수행되어야 하기 때문에 대규모 데이터베이스를 처리할 때는 적합하지 못 하다.
또한, 테이블 명세가 변경될 경우 트리거와 로그테이블도 변경되어야 해서 확장성이 부족하다는 점도 단점이다.
3) 테이블 변경 데이터에 따른 CDC
이 방법은 더욱 전통적인 방법으로, 사실 엄밀히 따지면 CDC가 아니다. 하지만 그 개념이나 목적은 CDC의 그것과 매우 흡사하기에 준CDC 정도로 명하면 될 듯 하다.
방법은 간단하다. 데이터의 insert 일자, update 일자를 기준으로 해당 일자에 insert와 update 된 데이터를 변경 데이터로 간주하는 것이다.
장점은 역시 매우 간단하다는 것이지만, 단점으로는 delete는 감지가 불가능하다는 점. 어떤게 변경된건지 감지 불가능한 점, 엄밀히 따지면 트랜잭션로그 기반이 아니라 순수 데이터만 바라보고 처리한다는 점에서 CDC라고 볼 순 없다.
하지만 상황이나 목적에 따라서는 간단히 이 방법으로 처리해도 무방하다.
CDC 방식 비교표
| 구분 | 로그 기반 CDC | 트리거 기반 CDC | 컬럼 기반 변경 배치(준CDC) |
|---|---|---|---|
| 변경 감지 방식 | DB 트랜잭션 로그 | INSERT/UPDATE/DELETE 트리거 | UPDATED_AT/INSERTED_AT 등 컬럼 |
| 실시간성 | 매우 높음 | 중간(트리거는 즉시, 반영은 배치) | 낮음(배치 기반) |
| DELETE 감지 | O | O | X |
| 운영 DB 부하 | 거의 없음 | 있음 | 없음 |
| 정확성 | 매우 높음 | 중간 | 낮음 |
| 구축 난이도 | 높음 | 낮음 | 매우 낮음 |
| 비용 | 높음(솔루션 필요) | 거의 없음 | 없음 |
| 적합한 환경 | 대규모, MSA, 스트리밍 | 레거시, 보안제한, 단순 연동 | 단순 변경 연동, 소규모 |
상황에 맞는 CDC를 선택하자
1. 무조건 최신 기술이 좋은건 아니다.
보통 저연차들의 경우 무조건 신기술을 추종하는 경향이 강한 편이다. 물론 신기술은 강점이 많다. 그러니 신기술이다. 다만, 1인 토이프로젝트라면 몰라도 혼자 하는 것이 아닌 여러 이해관계가 얽혀있는 프로젝트라면 기술을 도입할 때 고려해야 될 것은 신기술이냐 아니냐만이 아니다.
예를 들어, GoldenGate가 신기술이고 안정성이 높고 CDC 철학을 충실히 이행하니 무조건 도입해야 할까?
기술적인 측면만 놓고 보면 좋을 수 있지만 GoldenGate는 라이선스 비용이 매우 비싸다(대개 많은 오라클의 서비스들이 그렇듯이). 이 비용을 감당하는 것이 가능한지, 예산은 책정되어 있는지 고려해야한다.
또한 오라클의 서비스는 대개 구축이 매우 까다롭고 어렵다(왜 그럴까?). 그렇기에 사내 이력이 GoldenGate를 구축하고 운영할 수준의 이해도와 경험이 있는지도 고려해야한다.
그래서 우리는 여러 이해관계를 고려하여 기술스택을 선택해야 한다.
2. 상황 별 알맞는 CDC 선택법
CDC는 '정답'이 있는 기술이 아니다.
조직의 규모, 예산, 인력 수준, 인프라 구조, 보안 규제, 망분리 여부, 심지어 테이블 구조와 트래픽 패턴까지 모두 고려해서 결정해야 한다.
아래는 현실에서 CDC 방식을 선택할 때 가장 도움이 되는 기준들이다.
1) 대규모 트래픽 · MSA · 실시간 처리가 필요하면 → 로그 기반 CDC
- 트래픽 많음
- 실시간 동기화가 필요함
- Kafka 같은 스트리밍 인프라 이미 구축
- 데이터 정합성 요구 높음
- 전문 엔지니어 확보됨
→ Debezium, GoldenGate 같은 로그 기반 CDC가 사실상 정답에 가까움.
2) 레거시 시스템, 보안/망분리 환경 → 트리거 기반 CDC
- 운영 DB 부하 허용 가능
- 실시간까지는 필요 없음 (근실시간·배치 OK)
- 테이블 변경 자주 없음
- 외부 솔루션 도입 어려움
→ 가장 현실적이고 비용 대비 효과 좋음.
3) 단순 변경분만 필요, 트래픽 적음 → 컬럼 기반 변경 배치(준CDC)
- INSERT_DT/UPDATE_DT 이미 존재
- 하루 1~2회 싱크면 충분
- 삭제 감지 필요 없음
- 구축·운영 부담 최소화 필요
→ 소규모/레거시/공공기관에서 매우 흔한 방식(아마 이렇게 하는 레거시 프로젝트가 많을거다. 그리고 개발자들은 본인들이 하는게 CDC란 것도 인지하지 못하고 있을 가능성이 높다...)
4) 단계별 성숙도 모델 적용
많은 조직이 한 번에 로그 기반 CDC로 못 간다.
그래서 아래 단계로 발전시키는 경우가 많다.
- 컬럼 기반 변경 배치
- 트리거 기반 CDC
- 로그 기반 CDC
결론
CDC는 단순히 기술로 볼 것이 아니라 시스템을 어떻게 구성할지에 대한 전략이다.
조직의 상황, 예산, 인력, 트래픽, 보안 조건을 모두 고려해서 선택해야 한다.
중요한 것은 단순히 CDC를 “도입하는 것”이 아니라 내 시스템에 맞는 CDC 방식을 도입하는 것이다.
