[Database] CDC (Change Data Capture) 란 무엇일까?

2024. 12. 8. 10:53·[Database]

📌 개요

개인적으로 연습삼아 MySql DB에서 Oracle DB로 마이그레이션을 진행한 적이 있습니다.

 

이때, 기존 MySql 로 서비스를 운영중일 때, 데이터는 계속 바뀔텐데 해당 데이터들은 어떻게 데이터를 옮기지?

라는 고민을 하게 되었는데요! 

 

해당 고민을 만족시키는 개념이 바로 CDC 입니다.

이번 포스팅에서는 CDC 라는 개념에 대해 살펴보고자 합니다!


 

❓ CDC (Change Data Capture) 란?

 

CDC는 쉽게 말해, INSERT, UPDATE, DELETE 등 DB 데이터에 대해서 변경사항을 실시간/준실시간으로 추적하고 캡처하는 기술입니다! 

 


❓ 왜 사용하는걸까?

 

CDC 의 사용이유로는 크게 3가지로 꼽을 수 있을 것 같습니다.

 

1. 실시간 데이터 동기화가 가능하다 : DB to DB 라고 가정했을 때, 타 시스템간의 데이터 일관성을 유지할 수 있습니다. ( 변경된 데이터도 모두 캡처하기 때문입니다. )

 

2. 데이터 효율적 처리가 가능하다 : 만일 CDC 를 사용하지 않고 데이터 동기화를 시켜야한다면, 전체 데이터를 기준으로 봐야하겠지만, 변경된 데이터를 기준으로 처리하기 때문에 성능 최적화가 가능합니다.

 

3. 운영 효율성이 개선된다 : 해당 과정이 자동화로 이루어져, 데이터 관리 비용과 시간이 절감됩니다,

 

 

 

 

 

👌 CDC 적용 사례

 

CDC 는 그럼 어떨 때 주로 사용되게 될까요?

 

기본적으로 기존에 존재하는 시스템 데이터를 타 시스템에 공유하고, 업데이트 할 때 주로 사용되게 됩니다.

대표적으로는 전자상거래 / 은행  / 고객 관리 시스템 에 많이 쓰일 수 있을 것 같으며, 구조 자체를 마이그레이션 하는 작업에서도 정말 많이 쓰입니다!

 

 

대표적인 기업에서 사용한 마이그레이션을 위한 CDC 내용은 다음과 같았습니다.

 

네이버페이 Monolithic 구조 -> MSA 구조 변경

 

 

지마켓 단일 DB 구조 -> 클러스터링 (샤딩) DB 구조 변경 

 

 

결국 두 기업의 모든 공통점은 하나의 DB에서 데이터들이 대량으로 관리되었기 때문에, DB를 분리하고 동기화시키는 과정이 필요할 때 CDC를 기법을 활용하여 지속적인 데이터 동기화를 이루어냈음을 알 수 있었습니다.


 

 

🔍 CDC 동작 과정

다음으로, CDC의 동작 과정은 다음과 같습니다.

 

여기서 기존 사용중인 시스템을 Source System 이라 표현하고, 데이터를 동기화 시킬 시스템을 Target System이라고 표현합니다.

 

크게 4가지의 부분으로 나눌 수 있을 것 같습니다.

1. 데이터 변경 감지

2. 변경사항 캡처

3. 변경 데이터 전송

4. 변경 데이터 동기화

 

그럼 하나하나 조금 파고들며 설명을 드리겠습니다.

 

 

    CDC 동작 과정 (1) : 데이터 변경 감지

먼저 DB에서 트랜잭션이 발생하면, 트랜잭션 로그에 기록하여 변경을 감지합니다.

 

 

 

    CDC 동작 과정 (2) : 변경 사항 캡처

동작 과정중에서 핵심이 될 수 있는 부분이 될 수 있을 것 같습니다.

CDC 변경사항 캡처의 방법으로는 크게 3가지로 나눌 수 있습니다.

 

1. Log Based : DB의 트랜잭션 로그를 활용해서 캡처하는 방법입니다.

2. Query based : Spring Batch 와 같이 일정 주기마다 데이터 변경을 조회하는 Query를 발생시켜 변경된 데이터를 캡처하는 방법입니다.

3. Trigger based : DB에 트리거를 설정시켜 캡처하는 방법입니다.

 

자세한 내용은 뒤에서 추가로 다뤄보겠습니다!

 

    CDC 동작 과정 (3) : 변경 데이터 전송

변경된 데이터에 대해서 Kafka, RabbitMQ 와 같은 메시지 브로커 시스템이나 ETL 도구를 활용해서 데이터를 전송합니다.

 

    CDC 동작 과정 (4) : 변경 데이터 동기화

이제 메시지 브로커를 활용하여 타깃 시스템에 적재하고 해당 데이터를 동기화 하는 과정으로 동작 과정은 마무리 됩니다.

 

 


 

 

⭐ CDC 구현 방식

앞선 설명에서, 크게 3가지의 방법으로 데이터 변경을 감지하고 캡처하도록 하여, CDC 구현이 가능하다라고 말씀드렸는데, 좀 더 구체적으로 3가지의 방법을 설명드리겠습니다.

 

    Batch-Based ( Query Based ) CDC

먼저 Query Based 기법입니다. 대표적으로 Batch 를 활용하여 구현하기 때문에 Batch-based 라고도 불리우는 것 같습니다! 

 

일정 주기를 기준으로 쿼리를 날리도록하여, 지속적으로 변경된 데이터를 감지하고 캡처할 수 있도록 할 수 있습니다.

 

 

여기서 가장 핵심이 될 수 있는점은, 다른 기법과 다르게 실시간성이 부족할 수 있다는 점 일 것 같습니다. 예를들어 배치 주기를 10분으로 설정했다하면, 해당 10분의 공백기 동안은 실시간성이 보장될 수 없기 때문입니다. 

 

따라서 해당 기법은 완전한 실시간성보다는 준실시간성 이라고 표현하는 것이 좀 더 적합할 것 같습니다.

 

    Log-Based CDC

다음으로는 DB에서 만들어지는 트랜잭션 로그를 활용해서, 변경을 감지하고 캡처하는 방식입니다.

 

 

 

Log-Based 에서의 핵심 포인트는 로그에서 분석하여 데이터를 활용하는 것이기 때문에, 추가적인 ETL 도구가 필요하다는 점 입니다. 대표적으로는 Debezium 프레임워크를 활용해서 DB 에서 발생하는 변경사항을 지속적으로 감지하고, kafka 로 전파하는 방법을 사용할 수 있습니다.

 

 

 

    Trigger-Based CDC

마지막으로는 Trigger-Based 를 활용한 CDC 기법입니다.

DB 내에서 트리거를 생성하여, 별도의 로그 테이블에서 저장하고 관리하는 방식입니다.

 

 

DB내에서 제공하는 트리거를 사용하다보니 정확성과 편리함을 보장받을 수 있겠지만, 결국 DB 에게 작업을 위임하는 것이기 때문에 DB의 성능 문제가 발생할 수 있습니다. 또한 별도의 테이블이 추가적으로 필요하기 때문에 메모리와 용량이 추가로 필요할 것 입니다.

 

 

위 3가지 내용을 정리하자면 다음과 같습니다.

 

 

 

💪 마무리

점점 쌓여가는 대량의 데이터 작업에 대해 DB의 부하를 최소화 시키는 방법을 다양하게 도입되고 있는점을 인지하였습니다. 기존 Monolothic 에서 MSA 구조를 통해 DB를 분리시키고, Cloud 환경으로 DB를 재구성 할 때 해당 CDC 기법은 불가피 할 것으로 예상됩니다!

 

이번 포스팅에서는 학습을 위해 개념 위주로 포스트를 하였지만, 다음에는 실습으로 적용하는 추가적인 포스팅을 할 예정입니다 :)

 

 

이상 해당 포스팅을 읽어주셔서 감사합니다. 🙇‍♀️

 

 

 

 

 

 

📚참고자료 및 출처

https://code-run.tistory.com/39

https://tv.naver.com/v/23651043

https://dev.gmarket.com/61

'[Database]' 카테고리의 다른 글

Database 트랜잭션 개념과 4가지 특징 ACID  (0) 2024.12.14
[Database] Index란?  (0) 2024.11.23
Database - NoSQL 에 대해서 알아보자!  (2) 2024.09.16
'[Database]' 카테고리의 다른 글
  • Database 트랜잭션 개념과 4가지 특징 ACID
  • [Database] Index란?
  • Database - NoSQL 에 대해서 알아보자!
7.06com
7.06com
우당탕탕 코딩하기
  • 7.06com
    우당탕탕 개발자의 이야기
    7.06com
  • 전체
    오늘
    어제
    • 분류 전체보기 (54)
      • [Spring] (7)
      • [JAVA] (3)
      • [디자인패턴] (1)
      • [TIL] (7)
      • [CI,CD] (5)
      • [협업] (1)
      • [Database] (4)
      • [CS] (1)
      • [코딩테스트] (15)
      • [알고리즘] (0)
      • [후기-회고] (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
7.06com
[Database] CDC (Change Data Capture) 란 무엇일까?
상단으로

티스토리툴바