
백엔드
Spring Boot 버전업 중 알게된 Java 버전별 캡슐화 정책 강화
두줄요약
Spring Boot와 Java 버전업 과정에서 Gson 직렬화 에러의 원인을 자바 모듈 시스템 변화로 분석했습니다. `LocalDateTime`에 Custom TypeAdapter를 적용해 리플렉션 문제를 우회하고 해결했습니다.
문제 상황
- Spring Boot, Java, Gson 버전업 이후 로그인 과정의 Redis 직렬화에서
InaccessibleObjectException발생 LocalDateTime내부 private 필드에 리플렉션 접근 시도, 자바 17의 강한 캡슐화와 충돌
원인 분석
- Gson 기본 직렬화가
ReflectiveTypeAdapterFactory와setAccessible(true)기반 리플렉션에 의존 - 자바 9의 모듈 시스템 도입, 자바 16의 기본 차단, 자바 17의 JEP 403 적용으로 JDK 내부 접근 제한 강화
해결 방법
LocalDateTime용 Custom TypeAdapter 구현으로 기본 리플렉션 경로 우회- 직렬화는 ISO 포맷 문자열로 쓰고, 역직렬화는 동일 포맷으로 파싱
