피드로 돌아가기
Conditional logic in data contracts: Okyline vs JSON Schema
Dev.toDev.to
Backend

Okyline 도입을 통한 JSON Schema 조건부 로직 정의 코드량 78% 절감

Conditional logic in data contracts: Okyline vs JSON Schema

Pierre-Michel Bret2026년 5월 12일8intermediate

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)를 명확히 구분하여 런타임 데이터 무결성 확보

원문 읽기