📊
데이터공학
데이터 계약
Data Contract
데이터 생산자-소비자 간 합의된 스키마 및 품질 약속.
Data Contract
데이터 생산자-소비자 간 합의된 스키마 및 품질 약속.
데이터 계약(Data Contract)은 데이터 생산자와 소비자 사이의 공식적인 합의로, 데이터의 스키마, 품질 표준, SLA(서비스 수준 협약)를 명확하게 정의합니다. 마이크로서비스 아키텍처와 데이터 메시 환경에서 팀 간 데이터 교환의 신뢰성을 확보하는 핵심 메커니즘으로 자리 잡았습니다.
데이터 계약은 API 계약과 유사하게 버전 관리되며, 스키마 변경 시 하위 호환성을 유지하거나 사전 협의를 통해 Breaking Change를 체계적으로 관리합니다. JSON Schema, Protocol Buffers, Apache Avro 등의 형식으로 스키마를 정의하고, Great Expectations나 Soda Core 같은 도구로 품질 규칙을 자동 검증합니다.
핵심 구성 요소로는 스키마 정의(필드명, 데이터 타입, 필수 여부), 품질 규칙(null 허용 여부, 값 범위, 유일성 제약), SLA(데이터 전달 시간, 가용성, 신선도 보장), 그리고 소유권 정보(생산자 팀, 연락처, 책임 범위)가 포함됩니다.
CI/CD 파이프라인에 데이터 계약 검증을 통합하면 계약 위반을 조기에 발견하고 데이터 품질 문제가 하류 시스템으로 전파되는 것을 방지할 수 있습니다. 이는 데이터 거버넌스와 플랫폼 안정성의 토대가 됩니다.
# data_contracts/orders_contract.yaml
# 주문 데이터 계약 정의
apiVersion: datacontract/v1.0
kind: DataContract
metadata:
name: orders-events
version: 2.1.0
owner: order-service-team
contact: order-team@company.com
info:
title: 주문 이벤트 데이터 계약
description: 주문 서비스에서 발행하는 주문 이벤트 스트림
schema:
type: object
properties:
order_id:
type: string
format: uuid
description: "주문 고유 식별자"
customer_id:
type: string
pattern: "^CUS-[0-9]{10}$"
order_date:
type: string
format: date-time
status:
type: string
enum: [pending, confirmed, shipped, delivered, cancelled]
total_amount:
type: number
minimum: 0
required:
- order_id
- customer_id
- order_date
- status
- total_amount
quality:
- name: order_id_unique
type: unique
column: order_id
- name: freshness
type: freshness
maxDelay: 5 minutes
sla:
availability: 99.9%
latency: p95 < 100ms
---
# Great Expectations 검증 (Python)
import great_expectations as gx
context = gx.get_context()
validator = context.get_validator(
datasource_name="orders_stream",
data_asset_name="orders"
)
# 데이터 계약 검증 규칙
validator.expect_column_values_to_not_be_null("order_id")
validator.expect_column_values_to_be_unique("order_id")
validator.expect_column_values_to_be_in_set(
"status",
["pending", "confirmed", "shipped", "delivered", "cancelled"]
)
validator.expect_column_values_to_be_between(
"total_amount", min_value=0
)
# 검증 결과 저장
validator.save_expectation_suite()
print("Data contract validation complete!")