Java를 배워보자

JSON Schema: 자바 코드로 Validator 구현하기

_Blue_Sky_ 2024. 11. 19. 20:32
728x90
728x90

JSON Schema는 JSON 데이터의 구조와 유효성을 정의하는 표준화된 방법입니다. 특히 RESTful API 개발에서 데이터 교환 형식을 명확히 하고, 클라이언트와 서버 간의 오류를 미리 방지하는 데 중요한 역할을 합니다. 이 글에서는 자바 환경에서 JSON Schema를 활용하여 데이터 유효성 검증을 수행하는 방법을 상세히 알아보고, 실제 코드 예제를 통해 이해를 돕겠습니다.

 

왜 JSON Schema를 사용해야 할까요?

  • 명확한 데이터 구조 정의: JSON Schema를 통해 데이터의 필수 속성, 데이터 타입, 허용 값 등을 정확하게 명시할 수 있습니다.
  • 자동화된 유효성 검증: 개발 과정에서 JSON 데이터가 정의된 스키마에 부합하는지 자동으로 검증하여 오류를 조기에 발견할 수 있습니다.
  • API 문서화: JSON Schema는 API 문서의 일부로 활용되어 개발자에게 명확한 API 사용 방법을 제공할 수 있습니다.
  • 다양한 도구와 라이브러리 지원: JSON Schema는 다양한 프로그래밍 언어와 도구에서 지원되므로 활용도가 높습니다.
728x90

자바에서 JSON Schema Validator 구현하기

자바에서 JSON Schema를 활용하기 위해서는 다음과 같은 라이브러리를 사용할 수 있습니다.

  • json-schema-validator: 가장 널리 사용되는 라이브러리 중 하나로, 다양한 기능을 제공합니다.
  • jackson-databind: Jackson 라이브러리의 일부로, JSON 파싱과 관련된 기능을 제공합니다.

json-schema-validator 사용 예제

Java
import com.fasterxml.jackson.databind.JsonNode;
import com.github.fge.jackson.JsonLoader;
import com.github.fge.jsonschema.core.report.ProcessingMessage;
import com.github.fge.jsonschema.core.report.ProcessingReport;
import com.github.fge.jsonschema.main.JsonSchemaFactory;

import java.io.IOException;

public class JsonSchemaValidatorExample {
    public static void main(String[] args) throws IOException {
        // JSON 스키마 파일 로드
        JsonNode schema = JsonLoader.fromResource("/schema.json");

        // 검증할 JSON 데이터 로드
        JsonNode data = JsonLoader.fromString("{\"name\":\"John Doe\",\"age\":30}");

        // JSON 스키마 팩토리 생성
        JsonSchemaFactory factory = JsonSchemaFactory.byDefault();

        // JSON 스키마 객체 생성
        com.github.fge.jsonschema.core.JsonSchema jsonschema = factory.getJsonSchema(schema);

        // JSON 데이터 유효성 검증
        ProcessingReport report = jsonschema.validate(data);

        // 검증 결과 출력
        if (!report.isSuccess()) {
            for (ProcessingMessage message : report) {
                System.out.println(message);
            }
        } else {
            System.out.println("JSON data is valid.");
        }
    }
}
코드를 사용할 때는 주의가 필요합니다.
 

코드 설명

  1. JSON 스키마 파일 로드: JsonLoader.fromResource()를 사용하여 클래스패스에서 JSON 스키마 파일을 로드합니다.
  2. 검증할 JSON 데이터 로드: JsonLoader.fromString()을 사용하여 검증할 JSON 데이터를 문자열 형태로 로드합니다.
  3. JSON 스키마 팩토리 생성: JsonSchemaFactory.byDefault()를 사용하여 JSON 스키마 팩토리를 생성합니다.
  4. JSON 스키마 객체 생성: factory.getJsonSchema()를 사용하여 JSON 스키마 객체를 생성합니다.
  5. JSON 데이터 유효성 검증: jsonschema.validate()를 사용하여 JSON 데이터의 유효성을 검증하고, 검증 결과를 ProcessingReport 객체에 저장합니다.
  6. 검증 결과 출력: ProcessingReport 객체를 순회하며 검증 오류 메시지를 출력하거나, 유효한 경우 "JSON data is valid." 메시지를 출력합니다.

JSON Schema의 다양한 기능

JSON Schema는 다음과 같은 다양한 기능을 제공합니다.

  • 데이터 타입 검증: 문자열, 숫자, 불리언, 배열, 객체 등 다양한 데이터 타입을 검증할 수 있습니다.
  • 값 범위 검증: 숫자 값의 최소값, 최대값, 패턴 등을 검증할 수 있습니다.
  • enum 검증: 허용되는 값의 목록을 지정하여 검증할 수 있습니다.
  • required 속성 검증: 필수 속성이 존재하는지 검증할 수 있습니다.
  • 추가 속성 검증: 추가 속성이 허용되는지 검증할 수 있습니다.
  • 조건부 검증: 특정 조건에 따라 다른 검증 규칙을 적용할 수 있습니다.

 

728x90

복잡한 데이터 모델 정의

JSON Schema를 이용하여 다음과 같은 복잡한 데이터 모델을 정의할 수 있습니다.

  • 다양한 데이터 타입: 문자열, 숫자, 불리언, 배열, 객체 등 다양한 데이터 타입을 지원합니다.
  • 필수/선택 필드: 필수 필드와 선택 필드를 구분하여 정의할 수 있습니다.
  • 데이터 형식 검증: 문자열 길이 제한, 숫자 범위 제한, 패턴 매칭 등을 통해 데이터 형식을 검증할 수 있습니다.
  • 중첩된 객체: 객체 내에 또 다른 객체를 포함하는 복잡한 구조를 정의할 수 있습니다.
  • 배열 요소 검증: 배열 요소의 타입, 개수 등을 제한할 수 있습니다.
  • enum: 제한된 값 목록을 정의할 수 있습니다.

예시:

JSON
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 2
    },
    "age": {
      "type": "integer",
      "minimum": 0
    },
    "address": {
      "type": "object",
      "properties": {
        "street": {"type": "string"},
        "city": {"type": "string"}
      },
      "required": ["street", "city"]
    }
  },
  "required": ["name", "age"]
}
코드를 사용할 때는 주의가 필요합니다.
 

위 예시는 name 필드는 최소 2글자 이상의 문자열이어야 하고, age 필드는 0 이상의 정수여야 하며, address 객체는 street과 city 필드를 반드시 포함해야 한다는 것을 나타냅니다.

API 문서 자동 생성

JSON Schema를 이용하면 API 문서를 자동으로 생성할 수 있습니다. Swagger, OpenAPI 등의 표준을 지원하는 도구를 사용하여 JSON Schema를 기반으로 API 문서를 생성하고, API 개발자와 사용자에게 제공할 수 있습니다.

 

JSON Schema는 RESTful API 개발에서 데이터 유효성을 보장하고, 개발 생산성을 향상시키는 데 매우 유용한 도구입니다. 자바 개발자라면 json-schema-validator와 같은 라이브러리를 활용하여 손쉽게 JSON Schema를 적용할 수 있습니다. 이 글에서 소개한 내용을 바탕으로 여러분의 프로젝트에서 JSON Schema를 활용해 보시기 바랍니다.

참고:

728x90
728x90