Java 17 캡슐화, Gson 직렬화 문제 해결 팁!
by DD
1년 전
조회수 40
Spring Boot 3.2.4로 버전 업그레이드 후 Gson 직렬화 과정에서 문제 발생
Java 17의 강화된 캡슐화 정책으로 인해 LocalDateTime 필드 접근 불가
Custom TypeAdapter를 구현하여 Gson 리플렉션 제한 우회 및 문제 해결
자바 모듈 시스템과 캡슐화의 변화
자바 9부터 도입된 모듈 시스템은 JDK 내부 요소 접근을 제한하여 보안성을 강화했다. 구체적으로 자바 17에서는 JEP 403을 통해 리플렉션 접근을 더욱 엄격하게 차단했다. 따라서 Gson과 같은 라이브러리는 내부 구현에 대한 의존성을 줄여야 한다.
Gson 직렬화 과정 분석
Gson은 객체 타입에 맞는 TypeAdapter를 찾아 직렬화를 수행한다. ReflectiveTypeAdapterFactory는 리플렉션을 사용하여 필드에 접근하지만, 자바 17에서는 InaccessibleObjectException이 발생한다. 반면 Custom TypeAdapter를 사용하면 리플렉션 문제를 우회하고 직렬화/역직렬화를 안정적으로 수행할 수 있다.
Custom TypeAdapter 적용 전략
자바 17 환경에서 Gson의 리플렉션 제한 문제를 해결하기 위해 Custom TypeAdapter를 구현한다. 따라서 LocalDateTimeAdapter를 등록하여 Gson이 해당 어댑터를 사용하도록 한다. 결과적으로 데이터 무결성을 유지하면서 직렬화 오류를 방지하고, 서비스 안정성을 확보할 수 있다.