type 너머: 'string 인데 UUID 만' 어떻게 말하나
String 제약
minLength,maxLength— 문자 수 경계.pattern— ECMAScript 스타일 regex. 문자열이 반드시 매칭.format— 미리 정의된 이름 포맷 (email, uri, date, date-time, uuid, ipv4, ipv6, hostname, regex).
Number 제약
minimum,maximum— 포함 경계.exclusiveMinimum,exclusiveMaximum— 제외 경계.multipleOf— 이 값의 배수여야 함 (1 사용으로 number 필드에 정수 강제).
'format' 은 기본으로 권고적
중요한 함정: Draft 2020-12 에서 format 키워드는 기본적으로 제약이 아니라 annotation. "format": "email" 가 잘못된 이메일 거부 안 함, validator 를 format 강제하도록 설정해야. ajv: ajv-formats 의 { formats: addFormats }. Python jsonschema: format_checker=Draft202012Validator.FORMAT_CHECKER 전달.
format 함정: 팀이
"format": "email" 든 schema 보내고 기본 ajv 로 돌리고 잘못된 이메일 거부된다 가정. 안 거부됨. 부정 케이스 테스트 — 명백히 깨진 값 보내고 validator 가 불평하는지 확인. 안 하면 format 안 켜진 거.