error-model-validation-architect

작성자: kotlin

Kotlin과 Spring 서비스를 위한 일관된 API 검증 및 오류 처리 동작을 설계하고 구현합니다. 오류 페이로드를 정의하거나 프레임워크를 매핑할 때 사용합니다.

npx skills add https://github.com/kotlin/kotlin-backend-agent-skills --skill error-model-validation-architect

Error Model Validation Architect

Source mapping: Tier 2 high-value skill derived from Kotlin_Spring_Developer_Pipeline.md (SK-07).

Mission

Turn ad-hoc exception handling into a deliberate public contract. Treat validation and error mapping as part of API design, not a post-processing afterthought.

Inputs To Read

  • Endpoint contracts and sample payloads.
  • Existing exception classes and error payloads.
  • Validation annotations, custom validators, and business rule failures.
  • Current @ControllerAdvice, security exception handling, and framework defaults.
  • Logging and observability conventions, especially correlation ids and PII policy.

Design The Error Taxonomy

Separate at least these categories:

  • malformed request or unreadable JSON
  • transport-level validation failure
  • not found
  • conflict or concurrency failure
  • business rule rejection
  • authentication and authorization failure
  • downstream dependency failure
  • unexpected internal failure

Do not collapse all non-success outcomes into one generic error envelope.

Status Code Rules

  • Use 400 for malformed input, type mismatch, or invalid transport shape.
  • Use 401 for authentication failure and 403 for authorization failure.
  • Use 404 when the addressed resource is absent.
  • Use 409 for state conflicts, optimistic locking failures, duplicate idempotency keys, and uniqueness races when conflict semantics matter.
  • Use 422 when the payload is structurally valid but violates business rules.
  • Use 429, 502, 503, or 504 deliberately when gateway or dependency behavior is part of the contract.
  • Reserve 500 for genuinely unexpected internal failures.

Advanced Contract Decisions

  • Separate machine-readable error code from human-readable message. Clients should not parse prose.
  • Decide whether field-level validation errors should be aggregated or first-failure only. Make the rule consistent.
  • Preserve nested field paths for complex payloads and collections.
  • Decide whether localization is a server concern, client concern, or documentation-only concern.
  • Standardize correlation or trace identifiers in the error payload only if the platform can produce them consistently.
  • Decide how unknown fields, enum mismatches, and unreadable date formats surface. These are common client-integration pain points.
  • Map downstream failures carefully. Not every remote 500 should become your own 500.
  • If using RFC 7807 Problem Details, decide which extensions are stable parts of the contract and which are internal.

Validation Rules

  • Keep transport validation separate from domain validation even if both ultimately reject the request.
  • Use Kotlin @field: targets for Bean Validation annotations on DTO constructor properties.
  • Prefer dedicated validators or domain rules over abusing regex annotations for business semantics.
  • Validate required configuration or invariants at startup when they are not truly request-scoped.

Framework Exception Coverage

  • Cover MethodArgumentNotValidException, ConstraintViolationException, HttpMessageNotReadableException, MethodArgumentTypeMismatchException, missing-parameter exceptions, and unsupported media-type cases explicitly if the API claims a stable error contract.
  • Decide how security exceptions participate in the shared error model. AuthenticationEntryPoint and AccessDeniedHandler often need explicit alignment with controller advice.
  • Decide how async, scheduled, and messaging failures are reported differently from HTTP failures. One global envelope does not fit every boundary.
  • If the platform uses Problem Details, verify framework-generated problem payloads do not diverge from custom ones during upgrades.

Expert Heuristics

  • Let validation errors help the client recover, but let internal logs help operators diagnose. These are different audiences and should not share the same detail level.
  • If the service is public, keep error-code taxonomy versionable and stable even when internal exception types change.
  • When multiple validation layers reject the same request, choose the most user-actionable signal instead of stacking redundant errors.
  • If a downstream dependency failure is part of the business path, decide whether the contract should expose dependency semantics or normalize them to your own domain.

Output Contract

Return these sections:

  • Error taxonomy: the categories and stable codes.
  • Status mapping: which exception or failure type maps to which status and why.
  • Payload shape: the fields that belong in every error.
  • Framework coverage: which framework exceptions must be handled explicitly.
  • Minimal implementation plan: advice class, exception types, and tests to add.
  • Logging rule: what to log server-side versus what to expose to clients.

Guardrails

  • Do not leak stack traces, SQL fragments, class names, tokens, or secrets to clients.
  • Do not use one generic message for all failures if clients need actionable categories.
  • Do not map every domain failure to 400.
  • Do not let security exceptions bypass the common contract unintentionally.
  • Do not rely on the framework default error shape if the service claims to have a stable API contract.

Quality Bar

A good run of this skill gives clients a predictable error language and gives operators enough server-side detail to debug safely. A bad run produces a pretty error JSON that still conflates malformed input, business rejection, and internal failure.

kotlin의 다른 스킬

ci-cd-containerization-advisor
kotlin
재현 가능한 빌드, 이미지 및 배포 파이프라인을 설계합니다. Kotlin 및 Spring 애플리케이션을 대상으로 하며, CI 검증, 계층형 컨테이너, 롤아웃 안전성 등을 포함합니다.
official
configuration-properties-profiles-kotlin-safe
kotlin
Design and diagnose Spring configuration, profiles, and `@ConfigurationProperties` binding for Kotlin applications. Use when property binding fails,…
official
dependency-conflict-resolver
kotlin
Diagnose and resolve Gradle and Spring classpath conflicts, version drift, and binary incompatibilities in Kotlin applications. Use when `NoSuchMethodError`,…
official
domain-decomposition-api-design-advisor
kotlin
구현을 시작하기 전에 비즈니스 범위를 경계 컨텍스트, 모듈 또는 서비스 경계, 워크플로우, API 계약으로 분해합니다. 새로운 것을 설계할 때 사용하세요.
official
gradle-kotlin-dsl-doctor
kotlin
Generate, debug, and repair Kotlin + Spring Gradle builds with minimal, compatible changes. Use when `build.gradle.kts` or `settings.gradle.kts` is failing,…
official
integration-resilience-engineer
kotlin
탄력적인 HTTP, 메시징, 예약 통합을 Kotlin 및 Spring 서비스용으로 설계하며 명시적인 타임아웃 예산, 재시도, 멱등성, 서킷 브레이커를 포함합니다.
official
jackson-kotlin-serialization-specialist
kotlin
Kotlin과 Jackson을 사용하는 Spring 애플리케이션에서 JSON 직렬화 및 역직렬화 동작을 진단하고 설계합니다. DTO 역직렬화 실패 시, 기본값…
official
java-kotlin-migration-assistant
kotlin
Spring 기반 코드베이스에서 동작, 공개 계약, 프레임워크 호환성, 바이너리 가정을 변경하지 않고 Java 코드를 Kotlin으로 마이그레이션합니다. 단, …
official