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