CDC는 테이블을 반복 조회하는 대신 변경 로그 등에서 삽입·수정·삭제를 읽어 이벤트로 내보냅니다. 검색 색인, 분석 저장소, 캐시를 원본 DB와 연결할 때 쓰입니다.
데모에서는 행 업데이트가 로그에 기록되고 이벤트 스트림을 거쳐 검색 색인에 반영됩니다. 소비자는 중복 전달과 순서 역전을 고려해 멱등하게 처리해야 합니다.
언제 쓰나
원본 DB의 변경을 다른 저장소에 거의 실시간으로 전파해야 할 때 사용합니다.
DB 변경 로그를 읽어 다른 시스템에 변경 이벤트를 전달합니다.
<div class="demo"><div class="head"><b>CHANGE DATA CAPTURE</b><span>UPDATE #51</span></div><div class="stage pipeline"><div class="cell">row</div><i>→</i><div class="cell">log</div><i>→</i><div class="cell">event</div><i>→</i><div class="cell">index</div></div><div class="foot"><span id="cdcstatus">row changed</span><span>downstream sync</span></div></div>*{box-sizing:border-box}.demo{width:min(96vw,820px);height:min(94vh,350px);padding:clamp(8px,2vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);display:flex;flex-direction:column;gap:clamp(5px,1.5vmin,12px);font:600 clamp(12px,3.5vmin,15px)/1.25 var(--font-sans),sans-serif;overflow:hidden}.head,.foot,.row{display:flex;justify-content:space-between;align-items:center;gap:8px}.head b{color:var(--accent)}.head span,.foot,.muted{color:var(--muted)}.stage{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;gap:8px}.cell,.pill{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(4px,1.2vmin,9px);text-align:center}.pill{border-radius:999px}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 17%,var(--surface))!important;color:var(--fg)!important}.bad{border-color:#e16a5d!important;background:color-mix(in srgb,#e16a5d 18%,var(--surface))!important}.foot{font-size:clamp(12px,3vmin,14px)}.pipeline{justify-content:space-around;gap:3px}.pipeline .cell{min-width:18%;padding:clamp(3px,1vmin,8px)}.pipeline i{font-style:normal;color:var(--accent)}let n=0;const labels=['row changed','log captured','event delivered','index refreshed'];function tick(){document.querySelectorAll('.pipeline .cell').forEach((e,i)=>e.classList.toggle('on',i<=n));document.getElementById('cdcstatus').textContent=labels[n];n=(n+1)%4}tick();const t=setInterval(tick,700);document.querySelector('.demo').onclick=()=>{clearInterval(t);tick()}CDC는 테이블을 반복 조회하는 대신 변경 로그 등에서 삽입·수정·삭제를 읽어 이벤트로 내보냅니다. 검색 색인, 분석 저장소, 캐시를 원본 DB와 연결할 때 쓰입니다.
데모에서는 행 업데이트가 로그에 기록되고 이벤트 스트림을 거쳐 검색 색인에 반영됩니다. 소비자는 중복 전달과 순서 역전을 고려해 멱등하게 처리해야 합니다.
원본 DB의 변경을 다른 저장소에 거의 실시간으로 전파해야 할 때 사용합니다.