Contract 가 해결하는 문제
Producer 팀이 schema 변경을 배포해. Consumer 팀 파이프라인이 새벽 6시에 깨져. Consumer 팀은 화가 나. Producer 팀은 자기 테이블을 누가 읽는지도 몰랐어. — 데이터를 만드는 팀이 둘 이상인 회사에서 제일 흔한 cross-team 데이터 장애가 이 네 문장이야. 처방이 data contract 고.
Contract 에 들어가는 것
- Schema — column 이름, type, null 허용 여부, 허용 값.
- Freshness — "오전 9시까지 도착, 전체 날의 99.5% 에서."
- 소유권 — 만드는 팀 이름과 on-call 채널.
- Breaking-change 정책 — column 을 없애기 며칠 전에 알릴지, rename 마이그레이션은 어떤 절차로 할지.
- Versioning — additive 와 breaking 을 가르는 기준, downstream consumer 의 opt-in 여부.
Contract 가 아닌 것
Contract 는 아무도 안 읽는 위키 페이지가 아니야. 코드가 강제하는 산출물이야 — producer 의 write 단계에 schema 검증, 자동화된 freshness 체크, 그리고 모든 PR 에서 현재 schema 를 선언된 contract 와 대조하는 CI 테스트. 문서 속의 contract 는 희망 사항이고, CI 속의 contract 는 내력벽이야.