Java 표준 라이브러리에 JSON API가 온다 — JEP 540
JDK 28을 목표로 JEP 540(Simple JSON API)이 Target 상태로 승격되었다. 그동안 Java 생태계에서 JSON 처리는 Jackson, Gson, JSON-B 같은 외부 라이브러리에 전적으로 의존해 왔다. JEP 540은 이 의존성 없이 JSON 파싱과 생성을 수행할 수 있는 경량 API를 표준 라이브러리에 포함시키는 것을 목표로 한다. 실무에서 단순한 JSON 처리를 위해 무거운 라이브러리를 추가해야 했던 불편함을 해소할 수 있는 중요한 변화다.
핵심 설계 원칙: 불변 값 계층 구조
JEP 540의 설계 철학은 불변(immutable) 값 계층 구조에 있다. JSON 문서를 파싱하면 변경 불가능한 값 객체 트리로 표현되며, 이는 멀티스레드 환경에서의 안전성과 예측 가능성을 높여준다. 또한 엄격한 JSON 문법 규칙을 적용(enforce)하여, 느슨한 파싱으로 인한 버그를 사전에 차단한다.
API는 복잡한 데이터 바인딩보다는 단순 순회와 변환에 초점을 맞춘다. 즉, POJO와의 자동 매핑 같은 고수준 기능보다 JSON 구조를 직접 탐색하고 필요한 값을 추출하는 방식으로 설계되어 있다.
// 예상되는 API 사용 형태 (인큐베이터 단계 기준)
var json = Json.parse("""
{"name": "Alice", "age": 30}
""");
String name = json.asObject().getString("name");
int age = json.asObject().getInt("age");
실무에서 왜 중요한가
백엔드 개발자 관점에서 이 변화가 갖는 실질적인 의미를 짚어볼 필요가 있다.
- 의존성 간소화: 마이크로서비스나 CLI 도구처럼 가볍게 유지해야 하는 모듈에서 Jackson 없이 JSON을 처리할 수 있다.
- GraalVM 네이티브 이미지 호환성: 외부 라이브러리의 리플렉션 의존성 문제 없이 네이티브 컴파일에서 더 안정적으로 동작할 수 있다.
- 표준화: 팀마다 다른 JSON 라이브러리를 선택하는 혼란을 줄이고, 표준 API 기반의 일관된 코드 스타일을 유지할 수 있다.
물론 현재는 인큐베이터(Incubator) 단계이므로 API 설계가 확정되지 않았다. 커뮤니티 피드백을 통해 최종 형태가 결정될 예정이며, 프로덕션 도입은 정식 표준화 이후에 검토하는 것이 바람직하다.
기존 라이브러리와의 공존
JEP 540은 Jackson이나 Gson을 대체하려는 목적이 아니다. 복잡한 역직렬화, 커스텀 직렬화 전략, 다형성 타입 처리 등 고급 기능이 필요한 경우에는 기존 라이브러리가 여전히 유효하다. 반면 설정 파일 읽기, 간단한 API 응답 파싱, 테스트 픽스처 생성 같은 경량 작업에는 표준 API가 이상적인 선택지가 될 수 있다.
JDK 자체에 JSON 지원이 내장된다는 것은 Java가 현대적인 백엔드 환경의 요구에 더욱 능동적으로 대응하고 있다는 신호이기도 하다.
정리
- JEP 540은 외부 의존성 없이 JSON 파싱·생성을 지원하는 경량 표준 API로, JDK 28 Target 상태로 진행 중이다.
- 불변 값 계층 구조와 엄격한 문법 적용으로 안전성과 예측 가능성을 높인다.
- 현재 인큐베이터 단계이므로 API가 변경될 수 있으며, 고급 JSON 처리는 기존 라이브러리와 병행 활용이 권장된다.