CDC란?
CDC(Change Data Capture)란 데이터베이스에 발생하는 변경사항(INSERT, UPDATE, DELETE 등) 실시간/준실시간으로 데이터를 추적하고 캡처하는 기술을 말합니다.
CDC는 보통 기존 source 데이터베이스에서 target 데이터베이스로 데이터를 동기화할 때 주로 사용되는데요.
전체 데이터가 아닌, 변경된 데이터만 처리하여 네트워크와 데이터베이스 성능을 최적화 시킵니다.
그리고 데이터 복제 및 업데이트 작업을 자동화하여 데이터 관리 비용과 시간을 절감시키기도 하여, 데이터 동기화 하는 목적에 주로 사용되는 기술입니다.
CDC의 장점
CDC를 사용했을 때와, 사용하지 않았을 때의 차이점은 다음과 같습니다.
사용 전 | 사용 후 | |
데이터 일관성 | 유지 | 유지 |
데이터 스캔 | 풀 데이터 스캔 | 변경 데이터 스캔 |
DB 부하/비용 | 높음 | 낮음 |
실시간성 | 낮음 | 높음 |
CDC 동작 과정
CDC의 동작 과정은 크게 4 부분(1. 데이터 변경 감지, 2. 변경사항 캡처, 3. 변경 데이터 전송, 4. 변경 데이터 동기화)으로 설명할 수 있습니다.
1. 데이터 변경 감지
데이터베이스에 INSERT, UPDATE, DELETE 트랜잭션이 발생하면, 변경사항은 데이터베이스의 트랜잭션 로그에 기록됩니다.
2. 변경 사항 캡처
CDC 시스템은 변경사항을 감지하고 변경된 부분을 캡처합니다. 이는 구현 방식에 따라 차이가 있는데 대표적인 구현 방식은 아래와 같습니다.
1. Batch-Based CDC : 주기적으로 쿼리를 실행하여 변경된 데이터를 확인합니다.
2. Log-Based CDC : 데이터베이스 트랜잭션 로그를 읽어 변경 사항을 캡처합니다.
3. Trigger-Based CDC : 데이터 변경 시점에 트리거를 설정하여 변경 사항을 기록합니다.
이 부분에 대해서는 뒤에 더 자세하게 다뤄보겠습니다.
3. 변경 데이터 전송
캡처된 변경 사항을 데이터 소비 시스템(ETL, Message Broker 등)으로 전달합니다.
메시지 형식은 JSON, Avro, Protobuf 등이 될 수 있습니다.
4. 데이터 동기화
변경 데이터를 Target System에 저장하거나 실시간 처리를 통해 동기화합니다.
CDC 구현 방식
앞서 위에서 대표적인 CDC 구현 방식에는 3가지(Batch-Based CDC, Log-Based CDC, Trigger-Based CDC)가 있다고 소개해드렸는데 이제 그게 정확히 어떻게 구현이 되는지 이론적으로 설명드리겠습니다.
Batch-Based CDC
테이블을 쿼리에서 지정된 시간 이후 업데이트 된 모든 행을 찾는 방식입니다.
주기적으로 데이터베이스를 스캔하여 변경된 데이터를 감지하고
변경된 데이터만 추출하여 데이터 웨어하우스나 메세지큐, rest api와 같은 데이터 컨슈머로 전송하게 됩니다.
후에 데이터를 처리하고 상태를 갱신하여, 다음 주기에 동일한 데이터를 다시 처리하지 않도록 관리하는 방법입니다.
* 장점
- 쿼리와 스케줄러만으로 쉽게 구현 가능합니다.
- 변경 사항을 실시간으로 처리하지 않기 때문에 시스템의 성능에 미치는 영향을 줄일 수 있습니다.
- 기존 배치 시스템을 확장하여 CDC를 수행할 수 있습니다.
Log-Based CDC
데이터베이스에 대한 각각의 쓰기를 이벤트로 처리 즉, 지속적 데이터 수집 방식입니다.
데이터베이스에서 insert, update, delete와 같은 변경 사항을 트랜잭션 로그에 기록합니다.
그러면 cdc 시스템은 트랜잭션 로그를 모니터링하게 되고,
로그에서 변경 이벤트들을 캡처합니다.
후에 로그 데이터를 읽어 JSON과 같은 사용자 친화적인 형태로 변환하여
해당 데이터를 데이터 웨어하우스나 데이터 컨슈머로 전송하게 됩니다.
* 장점
- 트랜잭션 로그를 지속적으로 모니터링하므로 변경 사항을 실시간으로 처리가 가능합니다.
- 로그에서 읽기만 수행하며, 쿼리나 트리거 실행이 필요 없으므로 부하를 최소화할 수 있습니다.
- 대량의 데이터 스트리밍에 적합하여 분산 시스템에서도 안정적으로 작동합니다.
Trigger-Based CDC
데이터 변경 사항을 데이터베이스 내에 별도의 로그 테이블에 저장하여 관리하는 방식입니다.
기존 SourceDB에 변경 이벤트를 감지하는 트리거를 생성하고,
트리거가 활성화되면 변경 사항을 Shadow Table(로그 테이블)에 기록하거나 다른 처리 로직을 실행합니다.
후에 캡처된 데이터를 즉시 Target DB에 처리하거나 다른 데이터 파이프라인으로 전달하여 처리하게 됩니다.
* 장점
- 트리거를 통해 변경사항을 실시간으로 감지가 가능합니다.
- 직접적으로 변경 사항을 기록하므로 데이터 누락 가능성이 적습니다.
- 이벤트 처리 로직을 DB 내에서 관리하므로 코드 분리가 쉬워 로직 관리에 용이합니다.
CDC는 현대 데이터 아키텍처의 핵심 기술로 자리 잡았습니다. 실시간 데이터 동기화와 이벤트 중심 설계가 점점 중요해지는 상황에서 CDC는 필수적인 도구입니다.
이 글을 통해 CDC에 대해서 이해하고 가셨으면 합니다.
다음 포스팅에서는 실습 부분을 다뤄보겠습니다.
'Daily' 카테고리의 다른 글
[CDC 프로젝트] Oracle DB to MySQL(1) (1) | 2025.01.04 |
---|---|
Scanner vs BufferedReader (1) | 2024.12.19 |
모놀리식 프로젝트 DDD 패턴으로 전환하기 (1) | 2024.11.10 |
무중단 배포란? (0) | 2024.10.21 |
[Spring Boot] 동시성 제어 (3) | 2024.10.12 |