Data Pipeline
CDC (Change Data Capture) ?
재심
2022. 11. 2. 15:16
[CDC?]
- 데이터베이스 내 데이터 변경을 식별하여 필요한 후속처리 (데이터 전송/공유)를 자동화하는 기술 or 설계기법
- 실시간 데이터를 기반으로하고 싶을 때 폭넓게 활용된다.
- 흔히 데이터 백업이나 통합 작업을 할 경우 방대한 데이터를 다뤄야하는데, 원본 소스 데이터 중에 최근 변경된 데이터들만 골라내게 되면 다른 시스템에서 조회할 때 시스템로드도 줄이고 전체적인 생산성 향상도 노릴 수 있다.
[구현 기법]
Timetamp on Rows
변경인지를 위한 timestamp 컬럼을 두고 이 값보다 더 최근값이 있으면 레코드가 변경된 것으로 식별한다.
Version Numbers on Rows
변경인지를 위한 version 컬럼을 두고 이 값보다 최근값이 있으면 레코드가 변경된 것으로 식별한다.
Status on Rows
위 2개 기법의 보완용도.
레코드 변경여부를 True/False의 불린 값으로 저장하는 컬럼으로 변경여부를 판단하는 방법
Time Version/Status on Rows
위 3개 특성을 모두 활용
Triggers on Tables
DB의 트리거를 활용하여 사전에 등록된 시스템에 변경된 데이터를 배포하는 방법
시스템 복잡도가 증가하고 변경 관리의 어려움 등으로 유지보수성을 저하시키므로 사용할 때 주의할 필요가 있다고 함.
Event Programming
데이터 변경 식별을 애플리케이션에서 구현하는 방법 (ex: Kafka Connector)
[구현 방식]
PUSH
데이터 소스에서 변경을 식별하고 대상 시스템에 데이터를 적재해주는 방식
PULL
대상 시스템에서 데이터 소스를 주기적으로 체크해서 필요시 데이터를 가져가는 방식
[CDC In MSSQL]
MSSQL 2008 버전부터 추가되었다고 한다.
기본적으로 비동기식으로 동작함.
CDC(변경 데이터 캡처)는 SQL Server 에이전트를 사용하여 테이블에 적용되는 삽입, 업데이트 및 삭제 작업을 기록합니다.
이로 인해 변경 세부 정보가 쉽게 사용할 수 있는 관계형 형식으로 제공됩니다.
대상 환경에 변경 내용을 적용하는 데 필요한 열 정보 및 메타데이터가 수정된 행에 대해 캡처되고 추적된 원본 테이블의 열 구조를 반영하는 변경 테이블에 저장됩니다.
소비자가 변경 데이터에 체계적으로 액세스할 수 있도록 테이블 반환 함수가 제공됩니다.
CDC 설정 후 MSSQL 내부 변화
CDC를 사용하게되면 변경내용 추적을 하게 된다.
- 테이블에 대한 변경 내용 추적 설정
- INSERT, DELETE, UPDATE에 대한 변경 내용 추적
- 내부 변경 내용 추적 테이블에 행 추가.
- 변경 내용 추적이 설정된 데이터베이스에 존재.
- 변경된 각 행에 대응되는 버전 번호 존재
- 변경 내용 추적은 트랜잭션 커밋 시점에 하므로 버전카운터를 이용하여 증분 추적
변경내용 추적함수
- CHANGETABLE (CHANGES): 지정된 버전 이후에 발생한 모든 변경 내용에 대한 추적 정보를 테이블에 반환합니다.
- CHANGETABLE (VERSION): 지정된 열에 대한 최신 변경 내용 추적 정보를 반환합니다.
- CHANGE_TRACKING_MIN_VALID_VERSION(): CHANGETABLE 함수를 사용할 경우 지정된 테이블에서 변경 내용 추적 정보를 가져오는 데 사용할 수 있는 최소 버전을 반환합니다.
- CHANGE_TRACKING_CURRENT_VERSION:마지막으로 커밋된 트랜잭션과 연관된 버전을 가져옵니다. 이 버전을 사용하여 다음 번에 CHANGETABLE을 사용하여 변경 내용을 열거할 수 있습니다.
- CHANGE_TRACKING_IS_COLUMN_IN_MASK: CHANGETABLE(CHANGES …) 함수에서 반환된 SYS_CHANGE_COLUMNS 값을 해석합니다.
- WITH CHANGE_TRACKING_CONTEXT:응용 프로그램이 데이터를 변경할 경우 주관자 ID와 같은 변경 컨텍스트의 사양을 설정합니다.
데이터 흐름

- 추적하는 데이터 원본에 INSERT, UPDATE, DELETE 등이 적용되면 이 변경을 설명하는 항목이 로그에 추가됨.
- Capture Process는 로그의 내용을 읽어 변경에 대한 정보를 내부 Change Table들에 기록함.
- 변경된 내용을 쿼리 결과로 반환하는 함수가 제공되는 애플리케이션에서는 이를 활용하여 데이터를 가져감
Enable CDC
MSSQL에서는 CDC를 활성화하기 위해서는 DB수준에서 Enable한 후 대상 테이블에대해 Enable하는 2Step으로 진행된다.
변경 데이터 캡처 사용 및 사용 안 함 - SQL Server
변경 데이터 캡처 사용 및 사용 안 함
learn.microsoft.com
-- ====
-- Enable Database for CDC template
-- ====
USE MyDB
GO
EXEC sys.sp_cdc_enable_db
GO
DB수준에서 CDC가 활성화되면 DB내에 CDC스키마, CDC사용자, 메타 데이터 등의 내부 개체가 생성된다.
-- =========
-- Enable a Table Specifying Filegroup Option Template
-- =========
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@role_name = N'MyRole',
@filegroup_name = N'MyDB_CT',
@supports_net_changes = 1
GO