2 min read
데이터 품질 계약(Data Contract) 실무
스키마 변경을 계약으로 관리해 다운스트림 장애를 예방하는 데이터 팀 협업 방식

도입
데이터 품질 이슈는 분석팀 문제처럼 보이지만 실제로는 서비스 신뢰도와 직결된다. 이벤트 스키마가 계약 없이 변경되면 대시보드 수치와 운영 의사결정이 왜곡된다. 이 글은 Data Contract를 팀 간 운영 규약으로 정착시키는 방법을 다룬다.

문제 정의
데이터 계약이 없는 조직에서는 같은 사건을 서로 다른 의미로 해석하게 된다.
- 필수 필드 누락이 배치 단계에서 뒤늦게 발견된다.
- 스키마 버전 관리가 없어 producer 변경이 consumer 장애로 이어진다.
- 데이터 신선도 기준이 팀마다 달라 경보 신뢰성이 낮다.
데이터 품질은 검사 도구보다 책임 경계가 먼저다. producer와 consumer가 동일 계약 문서를 공유해야 한다.
핵심 개념
| 관점 | 설계 기준 | 검증 포인트 |
|---|---|---|
| 스키마 | 필수 필드/타입/버전 정의 | breaking change 탐지 |
| 검증 | ingestion 시 품질 게이트 | invalid row 비율 |
| 신선도 | 지연 허용 구간 명시 | freshness SLA 준수율 |
| 소유권 | 도메인별 데이터 오너 | 이슈 대응 시간 |
Data Contract는 문서로 끝나면 실패한다. CI와 파이프라인에 계약 검증을 내장해야 실제 운영에서 유지된다.
코드 예시 1: 데이터 계약 정의
name: order_created
version: 1.2.0
owner: commerce-platform
required_fields:
- event_id
- occurred_at
- user_id
- order_id
field_types:
event_id: string
occurred_at: datetime
user_id: string
order_id: string
freshness_sla_minutes: 10
코드 예시 2: ingestion 검증 쿼리
SELECT
COUNT(*) AS total_rows,
SUM(CASE WHEN event_id IS NULL THEN 1 ELSE 0 END) AS missing_event_id,
SUM(CASE WHEN occurred_at IS NULL THEN 1 ELSE 0 END) AS missing_occurred_at,
SUM(CASE WHEN occurred_at < NOW() - INTERVAL '1 day' THEN 1 ELSE 0 END) AS stale_rows
FROM raw_order_created
WHERE ingestion_date = CURRENT_DATE;
아키텍처 흐름
Mermaid diagram rendering...
트레이드오프
- 엄격한 계약은 품질을 보장하지만 producer 개발 속도를 일부 제한한다.
- 검증 단계를 늘리면 안정적이지만 ingestion 지연이 증가할 수 있다.
- 버전 관리를 세분화하면 유연하지만 운영 복잡도가 높아진다.
정리
데이터 품질은 기술 도입보다 계약 문화가 핵심이다. 스키마, 검증, 소유권을 명시하고 자동 검증을 연결하면 지표 신뢰도를 지속적으로 유지할 수 있다.
이미지 출처
- Cover: source link
- License: CC BY-SA 4.0 / Author: Sage (Wiki Ed)
- Note: Wikimedia Commons 무료 라이선스 이미지를 다운로드 후 1600px 기준 JPG로 최적화했습니다.