목록 보기
Spring Boot 버전업 중 알게된 Java 버전별 캡슐화 정책 강화
백엔드

Spring Boot 버전업 중 알게된 Java 버전별 캡슐화 정책 강화

마켓컬리
마켓컬리
2024년 12월 6일

두줄요약

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 포맷 문자열로 쓰고, 역직렬화는 동일 포맷으로 파싱

다음 읽기

#Spring Boot 주제를 이어서 읽기

하이버네이트의 시간은 거꾸로 간다

스프링부트 업그레이드 후 하이버네이트의 시간 변환 로직 변화로 LocalTime 조회 오류가 발생했습니다. 임시로 Converter를 적용해 나노초를 제거하며 장애를 우회했습니다.

마켓컬리
마켓컬리
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...