비동기 기법 - CDC

  • 오라클, MySQL 같은 DBMS는 데이터가 변경되면 그 변경 내용을 통지하는 기능을 제공함.
  • CDC(change data capture)패턴은 이 기능을 활용해서 구현.
sequenceDiagram
	Note over DB: 1. 데이터 변경
	DB ->> CDC 처리기: 2. 변경분 통지
	CDC 처리기->> 대상 시스템: 3. 변경분 전파
  • 위 다이어그램은 CDC 패턴의 처리흐름임.
  • INSERT, UPDATE, DELETE 시 DB의 데이터가 변경된다.
  • DB는 변경된 데이터를 CDC 처리기로 전송.
  • 이때 DB는 커밋된 데이터만 변경된 순서에 맞게 전달.
  • CDC 처리기에는 롤백된 데이터가 전달 안되는것.
  • 또한 잘못된 순서대로 데이터가 전달도 안됨.

  • 변경 데이터는 레코드 단위로 전달됨.
  • 예를 들어 1개 레코드 추가하고 2개 레코드 수정한 다음 3개 레코드 삭제했다면 총 6개 레코드 변경분이 CDC 처리기에 전달.
  • 이 변경분 데이터에는 추가, 수정, 삭제인지 구별할수있는 플래그도 포함됨.

  • CDC 처리기는 전달받은 변경 데이터 확인하고 가공 후 대상 시스템에 전파. 크게 2가지 형태로 대상 시스템에 변경 데이터를 전파함.
  1. 변경 데이터를 그대로 대상 시스템에 전파
  2. 변경 데이터를 가공/변환 해서 대상 시스템에 전파

CDC가 유용한 케이스

  • 특정 시스템이 복잡해서 연동 코드를 넣기 부담스러울때 CDC가 유용할 수 있다.
  • 예를들어, 신규 주문 시스템이 새로 구축되었다 하자.
    • 이 신규 주문 시스템에서 발생한 주문 데이터를 기존 주문 시스템에 반영해야하는 요구사항이 왔다.
    • 이를 위해 신규 주문 시스템에서 주문이 생성되거나 변경되면 그 데이터를 기존 주문 시스템에 전달해야했음.
    • 하지만, 신규 주문 시스템 개발팀은 연동 코드 추가에 난색을 표함.
    • 시간 문제, 복잡한 코드에 연동 코드 추가 부담등 때문.
    • 이때 CDC를 도입!
    • 다음은 신규 주문시스템의 코드 수정 않고 CDC이용해서 변경된 데이터를 관련 시스템에 전파한 예시 다이어그램
sequenceDiagram
신규 주문 시스템->>DB: 주문 데이터 변경
DB->>CDC 처리기: 변경 통지
CDC 처리기->>카프카: 변경 메시지 추가
소비자1->>카프카: 구독중
소비자2->>카프카: 구독중
소비자1->>구주문 DB: 전파
소비자2->>컨텐츠 서비스: 전파