스키마의 최소·최대 범위 역전

숫자, 문자열 길이와 배열 크기의 최솟값이 최댓값을 넘지 않도록 정의하세요.

설명

숫자 스키마에서 minimum은 허용 가능한 최솟값이고 maximum은 최댓값입니다. minimum이 maximum보다 크면 어떤 숫자도 조건을 만족할 수 없습니다. 문자열의 minLength·maxLength와 배열의 minItems·maxItems도 같은 원칙으로 검토해야 합니다.

잠재적 영향

  • 정상 데이터도 해당 범위 검증에 실패할 수 있습니다.
  • 클라이언트와 서버가 잘못된 범위 규칙을 구현해 연동 문제가 발생할 수 있습니다.

해결 방법

각 최솟값이 대응하는 최댓값 이하인지 확인하고 실제 업무 규칙에 맞는 범위로 수정하세요. 숫자에서 두 값이 같다면 경계를 제외하는 exclusiveMinimum과 exclusiveMaximum도 함께 확인하세요.

예시

OpenAPI 3.0 숫자 스키마 발췌입니다. info와 paths는 생략했습니다. 변경 전에는 code에 3 이상이면서 1 이하인 정수를 요구합니다.

변경 전

json
{
  "openapi": "3.0.0",
  "components": {
    "schemas": {
      "GeneralError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "minimum": 3,
            "maximum": 1
          }
        }
      }
    }
  }
}

변경 후

json
{
  "openapi": "3.0.0",
  "components": {
    "schemas": {
      "GeneralError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "minimum": 0,
            "maximum": 50
          }
        }
      }
    }
  }
}

변경 후에는 0부터 50까지의 정수를 허용합니다. 이 범위는 예시이므로 실제 코드 값의 계약에 맞게 정하세요.

참조