Data Pipeline

CDC (Change Data Capture) ?

재심 2022. 11. 2. 15:16

[CDC?]

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으로 진행된다. 

https://docs.microsoft.com/ko-kr/sql/relational-databases/track-changes/enable-and-disable-change-data-capture-sql-server?view=sql-server-ver15

 

변경 데이터 캡처 사용 및 사용 안 함 - 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

 

 

'Data Pipeline' 카테고리의 다른 글

데이터 인프라 이해하기  (0) 2022.10.23