[CDC] Change Data Capture
데이터베이스에서 변경 데이터 캡처(change data capture, CDC)는 변경된 데이터를 사용하여 동작을 취할 수 있도록 데이터를 결정하고 추적하기 위해 사용되는 여러 소프트웨어 디자인 패턴들의 모임이다.
https://ko.wikipedia.org/wiki/%EB%B3%80%EA%B2%BD_%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%BA%A1%EC%B2%98
CDC란
CDC(Change Data Capture)는 데이터베이스 안에서 일어나는 모든 변화를 감지하고, 이를 각각의 이벤트로 기록하며 이를 이벤트 스트림으로 전달합니다. 이렇게 수집된 이벤트들은 분석, 운영적인 목적으로 활용하거나 다른 데이터베이스로 전송하는 등 다양한 용도로 활용할 수 있습니다.
CDC 패턴은 점점 더 널리 사용되고 있으며, 이를 활용한 서비스들이 보급되면서 접근성이 향상되고 있습니다. 데이터를 보다 자유롭게 활용하여 데이터베이스 제약사항으로 비즈니스 성장을 보다 자유로운 방식으로 구성할 수 있습니다.
CDC 사용 이점과 이유
지금은 과거에 비해 서비스가 복잡하며 다양한 기능을 수행하기 때문에 한개의 서비스로만 개발을 하기 보다는 여러개의 서비스로 병렬로 구성하여 서비스 제공을 하고 있다. 이 병렬의 어플리케이션으로 구성된 아키텍쳐에서 데이터들은 지속적으로 변경이 되는데 이 변경에 따라 누락 되지 않고 비지니스 로직들은 문제 없이 수행이 되어야 한다.
예를 들어, 주문 서비스에서 주문의 상태가 변경이 된다면 CDC를 통해 변경에 따른 알림 서비스에서 알맞게 알림을 고객으로 보내도록 말이다.
이러한 점에서 CDC(Change Data Capture)는 응용 프로그램에서 데이터베이스를 교체하는 위험과 비용 없이 Event-driven architecture에서 많은 장점을 얻을 수 있는 방법을 제공을 한다.
CDC는 이벤트 스트림을 통해 데이터베이스를 재구성할 수 있기 때문에 다른 시스템 연속성 작업의 일환으로 사용될 수 있다. 무중단 DB 마이그레이션, 데이터 처리 파이프라인 구성 혹은 다른 데이터 센터, 클라우드로 재해 복구를 구성 등도 할 수 있다.
CDC는 서비스 간 높은 상호 연결의 이점을 가질수 있도록 해준다.
CDC 작동 방법
로그 기반 변경 데이터 캡처(Log-based Change Data Capture)
대부분의 데이터베이스는 변경 사항을 기록하기 위해 트랜잭션 로그를 사용합니다. 시스템이나 데이터베이스 충돌이 발생하는 경우, 트랜잭션 로그를 통해 손실 없는 데이터베이스 복구가 가능합니다. 근본적으로, 모든 커밋되고 복구 가능한 변경 사항은 데이터베이스 트랜잭션 로그에서 찾을 수 있습니다. 로그 기반 CDC를 사용하면 과거 변경 사항 또한 추적할 수 있습니다.
- 가장 중요하고 바쁜 데이터베이스로, 데이터베이스 처리 속도가 느려지면 안 되는 시스템에 적합합니다.
이러한 시스템은 분석 사용 사례에 포함하려는 가장 중요한 데이터 세트를 처리합니다. 로그 기반 CDC는 실시간으로 가장 많은 변경 데이터 양을 처리합니다. - 로그 기반 CDC가 단순히 허용되지 않는 클라우드 배포된 데이터베이스나 호스팅된 솔루션 또는 애플리언스와 같은 일부 데이터베이스 기술이나 배포에는 로그 기반 CDC를 사용할 수 없습니다.
트리거 기반 변경 데이터 캡처(Trigger-based Change Data Capture)
트리거 기반 CDC는 변경 사항이 발생하는 즉시 기록하는 접근 방식입니다. 모든 삽입, 삭제 및 업데이트 작업은 해당 변경을 수행할 뿐만 아니라 트리거가 변경을 별도의 변경 테이블에 기록합니다.
보통 두가지 방법으로 구현이 되어 있습니다.
첫번째 방법으로는 변경 사항에 대해서 완전히 기록을 합니다.
이렇게 하면 변경의 전체 기록에 액세스할 수 있지만 원본 트랜잭션에 대한 데이터 양이 두배로 증가합니다. 그러나 모든 변경 데이터가 별도의 테이블에 저장되므로 검색이 간단합니다.
두번째 방법으로는 행의 식별 키와 작업 유형(삽입, 업데이트 또는 삭제)만 기록합니다.
이 접근 방식은 원본 트랜잭션에 미치는 영향이 최소화됩니다. 그러나 키와 작업 유형만으로는 전체 변경 기록을 재구성하는 데 충분하지 않습니다. 데이터 추출은 변경 테이블과 기본 테이블 간의 조인이 필요하므로 추가 리소스를 사용합니다.
- 트랜잭션 및 데이터베이스 성능이 중요하지 않고 시스템이 충분한 처리 용량을 갖춘 경우 사용됩니다.
- 데이터베이스 처리가 중요한 경우나 고용량 데이터 처리 요구 사항으로 인해 데이터베이스 트리거의 오버헤드를 감당할 수 없는 경우, 준비된 애플리케이션에서 트리거를 추가할 수 없는 경우입니다. 트랜잭션 일관성이 필요한 경우에도 트리거 기반 CDC는 좋은 선택이 아닙니다.
타임스탬프를 기반으로 한 변경 데이터 캡처 (Change data capture based on timestamps)
일부 애플리케이션은 각 행 변경이 수행된 시간을 별도의 열에 기록합니다(LAST_MODIFIED와 같은). 변경 사항은 변경이 최근에 추출된 시간을 추적하고 해당 열에 대한 필터링을 통해 추출할 수 있습니다. 이 접근 방식의 주요 단점은 삭제된 행을 식별할 수 없다는 것입니다. 일부 기술은 모든 행에 저수준 워터마크를 자연스럽게 저장합니다. 예를 들어 PostgreSQL은 XMIN을 사용합니다. 값이 단조롭게 증가하는 경우 CDC는 이러한 대체 저수준 워터마크를 사용할 수도 있습니다.
- 모든 테이블에 신뢰할 수 있는 저수준 워터마크 열이 있는 애플리케이션에 사용됩니다.
- 삭제를 처리해야 하는 경우. 정확한 트랜잭션 일관성이 중요한 경우에는 일반적으로 타임스탬프 또는 저수준 워터마크 기반 CDC가 좋은 선택이 아닙니다.
차이 기반 변경 데이터 캡처 (Difference-based change data capture)
차이 기반 변경 데이터 캡처는 모든 데이터의 무차별적인 비교로 식별됩니다. 전체 차이 분석을 수행하려면 모든 데이터를 가져와야 합니다. 차이는 데이터의 두 스냅샷을 기반으로 합니다.
- 다른 옵션이 없을 때 상대적으로 작은 데이터 세트에 사용됩니다.
- 데이터의 전체 변경 내역이 필요한 경우 또는 사용 사례가 정확한 트랜잭션 일관성을 요구하는 경우 좋지 않습니다.
Ref
https://www.confluent.io/ko-kr/blog/how-change-data-capture-works-patterns-solutions-implementation/
https://www.fivetran.com/blog/change-data-capture-what-it-is-and-how-to-use-it
'Infrastructure > CDC' 카테고리의 다른 글
[CDC] MySQL Debezium Change Data Capture 따라해보기 - 3 (0) | 2024.03.08 |
---|---|
[CDC] MySQL Debezium Change Data Capture 따라해보기 - 2 (0) | 2024.02.10 |
[CDC] MySQL Debezium Change Data Capture 따라해보기 - 1 (1) | 2024.02.10 |