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 키워드는 제약이 아니라 그냥 설명이야. "format": "email" 이라고 써놔도 잘못된 이메일을 거부하지 않아. validator 쪽에서 format 을 강제하도록 따로 켜줘야 해. ajv 면 ajv-formats 의 addFormats 를 붙이고, Python jsonschema 면 format_checker=Draft202012Validator.FORMAT_CHECKER 를 넘겨.
format 함정: 팀에서
"format": "email" 이 든 schema 를 넘겨받고, 설정 안 건드린 ajv 로 돌리면서, 잘못된 이메일은 알아서 걸러지겠거니 하는 경우가 많아. 안 걸러져. 그러니까 일부러 틀린 값을 넣어봐. 누가 봐도 깨진 값을 보내고 validator 가 항의하는지 확인해. 조용히 통과하면 format 검사가 안 켜진 거야.