JSONJSON Schema와 검증

Required and additionalProperties

properties만 선언해도 필수가 되지 않는 이유와 required, additionalProperties로 object를 닫는 방식의 장단점을 정리합니다.

마지막 수정 2026년 3월 20일

기본 패턴

json
{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "email": { "type": "string" }
  },
  "required": ["name", "email"],
  "additionalProperties": false
}

설명

  • JSON Schema에서 properties는 허용 가능한 필드를 설명할 뿐, 그 필드가 필수라는 뜻은 아닙니다.
  • 필수 여부는 required로 따로 적습니다. 이 값은 문자열 배열이며 각 이름은 unique해야 합니다.
  • additionalPropertiesproperties에 없는 필드를 허용할지 막을지 정합니다. false면 닫힌 object처럼 동작합니다.
  • 닫힌 schema는 오타와 예기치 않은 필드를 빨리 잡는 장점이 있지만, 이후 필드 확장에는 더 엄격한 관리가 필요합니다.
  • JSON Schema 문서는 additionalProperties가 조합 schema와 함께 쓰일 때 확장에 제약을 만들 수 있다는 점도 강조합니다.

빠른 정리

keyword역할
properties필드별 규칙 설명
required꼭 있어야 하는 필드 지정
additionalProperties: false선언되지 않은 필드 차단
닫힌 object오타 방지에 유리
열린 object확장에는 유연하지만 통제가 약함

주의할 점

properties만 써 놓고 "왜 필수 검사가 안 되지?"라고 느끼는 경우가 많습니다. 필수 여부는 required, 추가 필드 통제는 additionalProperties라는 서로 다른 관심사로 나눠 생각해야 합니다.

참고 링크

1 sources