기본 패턴
json
{
"type": "object",
"properties": {
"name": { "type": "string" },
"email": { "type": "string" }
},
"required": ["name", "email"],
"additionalProperties": false
}설명
- JSON Schema에서
properties는 허용 가능한 필드를 설명할 뿐, 그 필드가 필수라는 뜻은 아닙니다. - 필수 여부는
required로 따로 적습니다. 이 값은 문자열 배열이며 각 이름은 unique해야 합니다. additionalProperties는properties에 없는 필드를 허용할지 막을지 정합니다.false면 닫힌 object처럼 동작합니다.- 닫힌 schema는 오타와 예기치 않은 필드를 빨리 잡는 장점이 있지만, 이후 필드 확장에는 더 엄격한 관리가 필요합니다.
- JSON Schema 문서는
additionalProperties가 조합 schema와 함께 쓰일 때 확장에 제약을 만들 수 있다는 점도 강조합니다.
빠른 정리
| keyword | 역할 |
|---|---|
properties | 필드별 규칙 설명 |
required | 꼭 있어야 하는 필드 지정 |
additionalProperties: false | 선언되지 않은 필드 차단 |
| 닫힌 object | 오타 방지에 유리 |
| 열린 object | 확장에는 유연하지만 통제가 약함 |
주의할 점
properties만 써 놓고 "왜 필수 검사가 안 되지?"라고 느끼는 경우가 많습니다. 필수 여부는
required, 추가 필드 통제는 additionalProperties라는 서로 다른 관심사로 나눠 생각해야 합니다.
참고 링크
1 sources