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

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

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

두줄요약

Spring Boot와 Java 17 업그레이드 후 Gson의 LocalDateTime 직렬화 오류 원인을 분석했습니다.\n강화된 모듈 캡슐화를 Custom TypeAdapter로 우회하는 방식을 소개합니다.

문제 상황

  • Spring Boot 2.5.3→3.2.4 및 Java 11→17 업그레이드 후 로그인 토큰의 Redis 직렬화 실패
  • Gson이 LocalDateTime의 private 필드에 접근하며 InaccessibleObjectException 발생

원인 분석

  • Gson 기본 ReflectiveTypeAdapterFactory의 setAccessible(true) 기반 필드 직렬화
  • Java 9 모듈 시스템 도입 이후 Java 16·17에서 강화된 JDK 내부 패키지 캡슐화
  • java.time 패키지를 열지 않은 java.base 모듈의 리플렉션 접근 차단

해결 방법

  • LocalDateTime 전용 Custom TypeAdapter 구현 및 등록
  • ISO_LOCAL_DATE_TIME 포맷 기반 문자열 직렬화·역직렬화
  • 기본 리플렉션 어댑터 대신 커스텀 어댑터 우선 선택으로 private 필드 접근 우회

주의할 점

  • JDK 내부 타입의 필드 가시성 변경이나 무분별한 모듈 오픈보다 명시적 어댑터 방식 고려
  • Java 버전업 시 라이브러리의 리플렉션 의존성과 모듈 캡슐화 호환성 점검

다음 읽기

#Spring Boot 주제를 이어서 읽기

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

Spring Boot와 Java 버전업 과정에서 Gson 직렬화 에러의 원인을 자바 모듈 시스템 변화로 분석했습니다. `LocalDateTime`에 Custom TypeAdapter를 적용해 리플렉션 문제를 우회하고 해결했습니다.

마켓컬리
마켓컬리
백엔드

댓글 0개

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

댓글을 불러오는 중...