CDC에 대한 개념과 왜 필요한지를 알아보자.

Changed Data Capture(CDC)

CDC는 데이터 캡처 기술(Changed Data Capture)의 약자이다.

데이터베이스에서 발생하는 변경 사항(삽입, 업데이트, 삭제 등)을 실시간으로 감지하고, 이러한 변경 사항을 기록하여 다른 시스템이나 애플리케이션에서 사용할 수 있도록 하는 과정을 말한다. 따라서 CDC는 데이터베이스의 상태변화를 추적하고 그 변화를 어딘가에 기록(캡처)하여 분석이나 동기화 등을 한다.

CDC의 핵심은 데이터를 실시간으로 저장하는 것이 아니라 데이터베이스의 변경 사항을 실시간으로 감지하고 전송하는 것이 핵심이다. 이를 통해 변경된 데이터를 다른 시스템에서 즉시 사용할 수 있도록 한다.

위에서는 분석 시스템을 예시로 들었지만, 다양한 곳에서 사용할 수 있다.

  • 데이터 동기화 : 실시간으로 변경된 데이터를 다른 시스템과 동기화하여 여러 시스템 간의 데이터 일관성을 유지한다.

  • 실시간 분석 : 실시간으로 변경 사항을 분석 시스템으로 전송하여 최신 데이터 기반으로 분석하고 인사이트를 제공한다.

  • 데이터 복제 및 백업 : 변경된 데이터를 다른 위치나 시스템에 복제하여 데이터의 안정성과 가용성을 높인다.

CDC 구현 방법

  1. Triggers on Tables(트리거 기반 CDC) 데이터베이스 트리거를 사용하여 데이터 삽입, 수정, 삭제 같은 이벤트가 발생할 때마다 이를 감지하고 로그 테이블에 기록하고, 이 로그 테이블의 내용을 주기적으로 확인하여 변경 사항을 캡처한다.

    • 장점 : 쉽게 구현 가능하고, 모든 종류의 데이터베이스 변경 사항을 캡처할 수 있다.
    • 단점 : 데이터베이스 성능에 부정적인 영향을 줄 수 있고, 복잡한 트랜잭션 처리의 경우 관리가 어렵다.
  2. Los Scanner on Database(로그 기반 CDC)
    데이터베이스 관리 시스템(DBMS)의 트랜잭션 로그를 분석하여 데이터 변경 사항을 감지한다.

    • 장점 : 데이터베이스의 성능에 미치는 영향이 최소화되고, 모든 변경 사항을 매우 정확하게 캡처할 수 있다.
    • 단점 : 로그 포맷은 DBMS에 따라 다르기 때문에 로그를 읽고 분석하기 위해서는 DBMS의 내부 동작에 대한 깊은 이해와 많은 운영 비용이 필요하다.
  3. Time Stamp on Rows(타임스탬프 기반 CDC)
    데이터베이스의 각 레코드에 타임스탬프나 시퀀스 번호를 추가하여, 특정 시점 이후에 변경된 데이터를 쿼리함으로써 변경 사항을 감지한다.

    • 장점 : 특정 시점 이후의 변경 사항을 쉽게 조회할 수 있다.
    • 단점 : 모든 테이블에 타임스탬프나 시퀀스 번호를 추가해야하고, 이를 관리하기 위한 추가 작업이 필요하다.

이외에도 Event Programming, Status indicators on rows 등이 있다.

ETL(Extract, Transform, Load)

ETL(Extract, Transform, Load)는 데이터를 소스로부터 추출하고 필요에 따라 변환한 뒤, 최종적으로 데이터베이스나 데이터 웨어하우스에 로드하는 과정을 말한다. Extract, Transform, Load를 통해 다른 시스템으로 이동하거나 통합하는 작업을 한다.

  1. 추출(Extract) 데이터를 원본 소스(데이터 베이스, 파일 시스템, 클라우드 스토리지 등)로부터 가져오는 작업을 말한다. 이때의 추출 작업에서 나오는 데이터는 원본 형식 그대로 추출된다. 추출의 주요 목적은 데이터를 데이터 웨어하우스와 같은 데이터 저장소로 이동시키기 위해 필요한 데이터를 수집하는 것이다.

  2. 변환(Transform)
    추출된 데이터를 비즈니스 요구사항에 맞게 가공하는 작업을 말한다. 보통 데이터를 정제(불필요한 데이터 제거), 통합(서로 다른 소스로부터 온 데이터 합치기), 집계(데이터 그룹 요약 등), 정규화 (데이터 포맷 표준화) 등이 포함될 수 있다.

  3. 로드(Load)
    최종 목적지인 데이터 웨어하우스나 타겟 데이터베이스로 전송하고, 저장하는 작업을 말한다. 로드 과정에서는 한번에 데이터를 전송하는 전체로드(Full Load)와 마지막 로드 이후 변경된 데이터만 전송하는 증분 로드(Incremental Load)가 있다.

ETL(Extract, Transform, Load)과 CDC(Change Data Capture)

ETL과 CDC는 자주 비교 되는 두 가지 개념이다. 데이터를 다루는 방식과 목적에서 차이가 있고, 각각의 장단점에 따라 선택하여 사용한다.

인공지능의 발전과 시스템 규모가 커짐에 따라 실시간 분석과 의사결정이 중요해지면서 실시간 데이터 통합의 필요성이 높아졌다. 이로 인해 기존의 배치처리 중심의 ETL 접근 방식과 실시간 데이터 캡처를 가능하게 하는 CDC간의 비교가 자주 이루어졌다.


ETL과 CDC를 같이 사용하면 좋지 않을까?
ETL과 CDC를 함께 사용하는것이 적합한 것인지에 대해서는 시스템 요구사항과 데이터 처리목적, 시스템 아키텍처 등 다양한 요소에 따라 달라진다.

  • 장점

    • CDC를 사용하면 실시간으로 데이터 변경 사항을 캡처하고 처리하면서, 동시에 ETL프로세르를 통해 대량의 데이터를 정제하고 변환하는 복잡한 로직을 처리할 수 있어 데이터 품질과 일관성을 유지할 수 있다.
    • 실시간 데이터 통합과 주기적 배치 처리를 동시에 수행할 수 있어서 다양한 데이터 소스로부터 데이터를 효율적으로 통합하고 관리할 수 있다.
  • 단점

    • ETL과 CDC를 함께 사용하면 시스템의 복잡성이 증가할 수 있다. 두 프로세스 모두 관리하고 조율하는데 추가적인 노력과 리소스가 필요하다.
    • 인프라와 도구를 구축하고 운영하는데 추가 비용이 발생하고, 실시간 데이터 처리와 배치 처리를 함께 수행하면 시스템 성능에 영향을 줄 수 있는 오버헤드가 발생할 수 있기 때문에 적절하게 관리를 해야한다.

장단점이 있지만 대부분의 큰 기업이 ETL과 CDC를 같이 사용한다. 예를 들어 금융 서비스의 경우 실시간으로 거래 모니터링, 사기 탐지, 고객 행동 분석을 위해 CDC를 활용하여 거래 데이터를 실시간으로 캡처하고 분석하고, 동시에 ETL로 일일 거래 데이터를 정제하고 데이터 웨어하우스에 로드하여 장기적인 데이터 분석을 수행한다. 이외에도 전자 상거래, 소셜 미디어나 게임도 마찬가지다.