126 lines
10 KiB
Markdown
126 lines
10 KiB
Markdown
---
|
|
title: Wix Engineering — Debezium / CDC production 사례 (인용 검증 실패)
|
|
source_type: company-tech-blog
|
|
url: https://medium.com/wix-engineering/how-wix-uses-debezium-and-kafka-for-data-replication-and-cdc-cdce0c6b3cd1
|
|
archive_url:
|
|
status: needs-confirmation
|
|
confidence: low
|
|
tags: [ca-outbox-pattern, wix, debezium, cdc, production-case, company-case-study, unverified-source]
|
|
related_branches: [feature-domain-event-outbox-contract, feature-background-job-async-contract]
|
|
related_projects: [ca-skeleton-operational-contract]
|
|
created: 2026-05-22
|
|
last_reviewed: 2026-05-27
|
|
---
|
|
|
|
# Wix Engineering — Debezium / CDC 사례 (직접 검증 실패)
|
|
|
|
> Layer: `raw/company-tech-blogs/` — Wix Engineering Medium blog. ca-tmpl outbox 6대안 중 **대안 1 (Debezium CDC) 의 production 사례** 로 보관.
|
|
>
|
|
> **출처 신뢰도 경고 — 중요**: company-tech-blog + **원본 URL 4개 모두 404 (페이지 제거됨)**. WebFetch 시점(2026-05-27) 에 medium.com Wix Engineering 의 해당 글 + 보조 검색 결과(wix.engineering/post/scaling-to-the-moon-mysql-debezium-kafka, /post/exactly-once-message-delivery-from-mysql-to-kafka, /post/wix-greyhound-debezium-kafka) 가 모두 404. wix.engineering/blog 메인의 최근 5페이지에도 Debezium/CDC 관련 article 부재. 따라서 본 문서의 인용은 **모두 미검증 (needs-confirmation)**, 본 자료를 outbox 결정 근거로 인용 시 별도 archive.org 스냅샷 또는 컨퍼런스 발표 자료로 보강 필요.
|
|
|
|
## Parent / 활용 branch (필수)
|
|
|
|
| Branch | 이 자료가 정당화하는 결정 |
|
|
|---|---|
|
|
| [[raw/branch-notes/feature-domain-event-outbox-contract]] | outbox 6대안 비교에서 "Debezium CDC production 사례" 위치 — 단, 본 자료가 미검증이므로 인용 시 보조 자료 필수 |
|
|
| [[raw/branch-notes/feature-background-job-async-contract]] | application polling vs CDC-based propagation 의 production 운영 비용 비교 reference (미검증) |
|
|
|
|
특정 branch 없이 foundational 조사로 수집한 경우:
|
|
|
|
- [[raw/project-notes/ca-skeleton-operational-contract]] — Contract #19 의 outbox 결정에서 "CDC 가 dual-write 를 제거한다" 일반 주장의 사례 후보 (검증 미달로 1차 근거 부적격)
|
|
|
|
## 컨텍스트 / 왜 저장했는지
|
|
|
|
ca-tmpl 의 SKIP LOCKED 결정에 대한 **CDC 기반 outbox 의 실제 production 운영 사례** 후보. Debezium 이 단순 토이가 아니라 대규모 production 에서 어떻게 굴러가는지 확인 목적. 단 원본 URL 이 모두 제거되어 wording 검증 불가.
|
|
|
|
## 출처 / Source
|
|
|
|
- 원본 URL: https://medium.com/wix-engineering/how-wix-uses-debezium-and-kafka-for-data-replication-and-cdc-cdce0c6b3cd1 (HTTP 404 — 2026-05-27 확인)
|
|
- 시도한 보조 URL (모두 404):
|
|
- https://medium.com/wix-engineering/scaling-to-the-moon-mysql-debezium-kafka-event-streaming-9a07ade5410d
|
|
- https://www.wix.engineering/post/scaling-to-the-moon-mysql-debezium-kafka
|
|
- https://www.wix.engineering/post/exactly-once-message-delivery-from-mysql-to-kafka
|
|
- https://www.wix.engineering/post/wix-greyhound-debezium-kafka
|
|
- https://www.wix.engineering/post/wix-architecture-at-scale-mysql
|
|
- https://www.wix.engineering/post/event-driven-architecture-5-pitfalls-to-avoid
|
|
- wix.engineering/blog 메인 (페이지 1) 에서도 Debezium/CDC/Kafka outbox 관련 최근 글 부재 (2026-05-27 확인)
|
|
- 아카이브 URL: (미수집 — archive.org 재시도 필요)
|
|
- 저자 / 조직: Wix Engineering (Medium)
|
|
- 발행일: 불명 (페이지 제거)
|
|
- 마지막 확인일: 2026-05-27
|
|
|
|
## 핵심 인용 / Key quotes (verbatim — 모두 미검증)
|
|
|
|
> **경고**: 아래 인용은 원본 URL 이 검증 시점에 404 인 상태에서 보관 중인 사전 정리본. 원문 wording 검증 불가 → strength = `needs-confirmation`.
|
|
|
|
> [§미검증 — 보관용 wording] "We use Debezium to capture changes from our MySQL databases and stream them to Kafka, decoupling write paths from downstream consumers."
|
|
|
|
> [§미검증 — 보관용 wording] "Application services do not publish to Kafka directly; they write to their own database, and Debezium handles propagation."
|
|
|
|
> [§미검증 — 보관용 wording] "This avoids dual-writes and ensures that any change persisted in the source DB will eventually appear in Kafka."
|
|
|
|
## Claims Extracted / 추출된 주장
|
|
|
|
> **중요**: 본 자료는 원본 URL 404 로 인용 검증 실패 상태. 아래 claim 들은 모두 strength `needs-confirmation` — 적용 결정의 근거로 단독 인용 금지. 별도 검증된 자료 (`raw/company-tech-blogs/outbox-confluent-kafka-connect-smt`, `raw/official-docs/event-sourcing-vs-outbox-microservices-io`, 또는 Debezium 공식 문서) 와 조합 필요.
|
|
|
|
| Claim ID | Claim (이 자료가 직접 말한다고 보관된 것) | Evidence quote | Strength | Applies to | Does not prove |
|
|
|---|---|---|---|---|---|
|
|
| WIX-DEBEZIUM-C1 | Wix 는 Debezium 으로 MySQL 변경을 capture 하여 Kafka 로 stream 하고, 이를 통해 write path 와 downstream consumer 를 decouple 한다 (미검증) | [§미검증 — 보관용 wording] "We use Debezium to capture changes from our MySQL databases and stream them to Kafka, decoupling write paths from downstream consumers." | `needs-confirmation` | (조건부) Wix 의 production 아키텍처 사례 — wording 검증 후 `company-case-study` 로 승급 가능 | "Debezium 이 outbox 의 표준 해법" 이라는 일반화 금지. 본 자료가 검증되어도 단일 사례. |
|
|
| WIX-DEBEZIUM-C2 | Wix 의 application service 는 Kafka 에 직접 publish 하지 않고 자신의 DB 에만 쓰며, Debezium 이 propagation 을 처리 (미검증) | [§미검증 — 보관용 wording] "Application services do not publish to Kafka directly; they write to their own database, and Debezium handles propagation." | `needs-confirmation` | (조건부) outbox/CDC 패턴의 "DB-only write" 원칙의 production 적용 reference | application 측 idempotency 요구사항이 사라진다는 뜻은 아님 — at-least-once 기본 가정 별도 |
|
|
| WIX-DEBEZIUM-C3 | 이 방식이 dual-writes 를 회피하며 source DB 에 persist 된 변경이 결국 Kafka 에 나타나는 것을 보장 (미검증) | [§미검증 — 보관용 wording] "This avoids dual-writes and ensures that any change persisted in the source DB will eventually appear in Kafka." | `needs-confirmation` | (조건부) CDC 기반 outbox 의 dual-write 회피 효과 사례 | "exactly-once" 가 아니라 "eventually" — 본 wording 도 eventual consistency 한정 |
|
|
|
|
## Usage Boundaries / 적용 경계
|
|
|
|
- **이 자료가 직접 증명하는 것**:
|
|
- **없음** (원본 URL 404 — 모든 claim 이 미검증 상태)
|
|
- **이 자료가 증명하지 않는 것**:
|
|
- Debezium 이 outbox 의 표준 해법이라는 일반화
|
|
- dual-write 회피의 일반론 (Wix 사례 한정, 게다가 검증 실패)
|
|
- Debezium connector 운영의 구체 trade-off (schema migration, WAL 적체 등)
|
|
- Wix 가 application polling 대신 CDC 를 선택한 의사결정 과정
|
|
- "조직 규모 → polling vs CDC 결정" 의 일반 규칙
|
|
- **내 프로젝트에 적용하려면 추가 확인이 필요한 것**:
|
|
- **원본 wording 의 archive.org 스냅샷 수집** (필수 — 인용 검증)
|
|
- Wix 의 컨퍼런스 발표 (KubeCon, Devoxx 등) 에서 동일 주장 보강
|
|
- Debezium 공식 문서 (`debezium.io/documentation/reference/`) 의 outbox EventRouter 섹션과 비교
|
|
- ca-tmpl 의 write throughput 이 Wix 사례와 같은 CDC 도입 임계점인지 평가
|
|
|
|
## 메모 / Notes (내 프로젝트 해석)
|
|
|
|
> 본 섹션은 자료 직접 인용 아님. ca-tmpl 결정 컨텍스트 해석. **단, 본 자료 자체가 미검증이므로 아래 메모도 보강 자료 없이 단독 사용 금지.**
|
|
|
|
- 적용 시나리오: 마이크로서비스 다수, write 트래픽이 크고 downstream consumer 가 많은 조직.
|
|
- 장점 (Wix 가 언급했다고 보관된 것 — 미검증):
|
|
- dual-write 제거 → 신뢰성 향상
|
|
- downstream 추가가 쉬움 (새 consumer 만 붙이면 됨, source 코드 무변경)
|
|
- 분석/검색 인덱스 등 secondary store 에 자동 sync
|
|
- 단점 (production 운영하며 드러나는 것 — 일반 통념):
|
|
- Debezium connector 자체의 운영 (offset, schema, HA) 부담이 큼
|
|
- schema migration 시 connector 영향 검토 필요
|
|
- large transactions / long-running transactions 가 WAL 적체 → lag 유발
|
|
- ca-tmpl(SKIP LOCKED polling) 과의 차이:
|
|
- Wix 규모면 polling overhead 가 비현실적 → CDC 가 사실상 필수
|
|
- ca-tmpl 규모(템플릿 수준) 에서는 Wix 식 인프라가 **과투자**
|
|
- 운영 복잡도: 높음. Kafka Connect cluster 전담 운영 인력/지식 필요.
|
|
- exactly-once / at-least-once 보장 수준: at-least-once. consumer idempotency 전제 (본 인용에서 직접 증명 안 됨).
|
|
- 외부 의존성 추가 여부: Kafka, Kafka Connect, Debezium, (Schema Registry).
|
|
- 시사점: "조직 규모와 downstream fan-out 수" 가 polling vs CDC 선택의 결정 변수 — 단, 본 자료가 검증 실패이므로 이 주장의 근거로는 Netflix DBLog (`outbox-netflix-domain-events-cdc`) + Debezium 공식 문서 조합을 사용해야 함.
|
|
|
|
## Related / 관련
|
|
|
|
- 같은 주제 다른 raw 자료:
|
|
- [[raw/official-docs/event-sourcing-vs-outbox-microservices-io]] (대안 4: event sourcing — 검증됨)
|
|
- [[raw/company-tech-blogs/outbox-confluent-kafka-connect-smt]] (대안 2: Confluent SMT — 부분 검증)
|
|
- [[raw/company-tech-blogs/outbox-netflix-domain-events-cdc]] (대안 6: Netflix DBLog — arXiv 검증)
|
|
- [[raw/company-tech-blogs/domain-event-sourcing-vs-cqrs-greg-young]] (event/CQRS 정의 정리)
|
|
- 인용하는 branch:
|
|
- [[raw/branch-notes/feature-domain-event-outbox-contract]]
|
|
- [[raw/branch-notes/feature-background-job-async-contract]]
|
|
- 인용하는 wiki: (미작성)
|
|
|
|
## Followup TODO
|
|
|
|
- [ ] archive.org 에서 원본 4개 URL 스냅샷 검색 → wording 검증
|
|
- [ ] Wix 의 컨퍼런스 발표 (YouTube / SlideShare) 검색하여 동일 주장 보강
|
|
- [ ] Debezium 공식 문서 outbox EventRouter 섹션을 별도 `raw/official-docs/debezium-outbox-event-router.md` 로 분리하여 1차 근거 확보
|