피드로 돌아가기
Dev.toBackend
원문 읽기
Okyline 도입을 통한 JSON Schema 조건부 로직 정의 코드량 78% 절감
Conditional logic in data contracts: Okyline vs JSON Schema
AI 요약
Context
복잡한 비즈니스 룰을 반영한 Data Contract 설계 시 JSON Schema의 nested allOf/if/then/else 구조로 인한 가독성 저하 및 유지보수 비용 증가 문제 발생. 특히 필드 간 의존성 및 조건부 제약 사항 정의 시 스키마 복잡도가 기하급수적으로 상승하는 한계점 존재.
Technical Solution
- Example-based Schema Inference: 실제 JSON 페이로드를 기반으로 타입과 구조를 자동 추론하여 기본 컨트랙트를 신속하게 생성하는 구조 설계
- Declarative Conditional Directives:
$appliedIf를 통한 Variant별 필드 세트 정의 및$requiredIf,$forbiddenIf를 활용한 상태 기반 필드 필수/금지 제약 사항 선언 - Intent-centric Validation:
$exactlyOne(상호 배타적 선택) 및$allOrNone(전체 필수 또는 전체 제외) 지시어를 통해 복잡한 논리 구조를 단일 라인의 의도 중심으로 단순화 - Business Rule Decoupling: 스키마 내에 비즈니스 로직을 직접 선언함으로써 코드 레벨의 reverse-engineering 없이도 데이터 계약을 통해 비즈니스 룰 파악이 가능한 설계
Impact
- 조건부 로직 정의 코드 분량 70라인에서 15라인으로 감소하여 약 78%의 코드 밀도 개선
Key Takeaway
데이터 검증 레이어에서 복잡한 조건부 로직이 필요한 경우, 저수준의 논리 연산자 조합보다는 도메인 의도가 반영된 고수준의 선언적 지시어(Declarative Directives)를 사용하는 것이 유지보수성과 가독성 측면에서 유리함.
실천 포인트
1. API 필드 간 의존성(Dependent Fields)이 많은 경우 JSON Schema의 if/then 구조 대신 선언적 DSL 도입 검토
2. 데이터 계약서 작성 시 Example-driven 방식을 통해 스키마와 실제 데이터 간의 간극 최소화
3. 상태별 필수 필드($requiredIf)와 금지 필드($forbiddenIf)를 명확히 구분하여 런타임 데이터 무결성 확보