하이버네이트의 시간은 거꾸로 간다
핵심 내용
Spring Boot 3.x 업그레이드 시 Hibernate의 나노초 처리 버그로 발생한 로그인 오류를 분석하고 해결했다.
자세히 보기
딜리버리 프로덕트 개발팀이 AWS MSK 대응을 위해 Spring Boot 3.x로 업그레이드한 후, 일부 배송 매니저의 앱 로그인 불가 오류가 발생했다. 에러 로그 분석 결과 java.time.DateTimeException이 발생했으며, 이는 DB 조회 시 음수 나노초 값이 변환 과정에서 문제된 것으로 파악되었다.
원인은 Hibernate 5.6.5에서 6.5.5로 버전이 올라가면서 LocalTime을 DB에 저장할 때 나노초 정보를 포함하게 된 점이다. 이전 버전은 나노초를 무시했으나, 최신 버전은 나노초를 반영하여 Time 객체를 생성한다. 특히 KST(UTC+9) 타임존에서 00시~08시 구간, 소수점 3자리 나노초가 존재할 때 내부 계산 오류로 음수 나노초가 생성되는 현상이 재현되었다.
해당 버그는 Hibernate 라이브러리 내부의 LocalTimeJavaType.unwrap 메서드 로직에서 발생하며, GitHub PR #8328에서 수정되었으나 당시 릴리즈되지 않은 상태였다. 개발팀은 LocalTime 객체 저장 및 조회 시 나노초를 제거하는 AttributeConverter를 적용하여 문제를 해결했다. 이는 큰 버전 업그레이드 시 디버깅과 테스트 커버리지의 중요성을 보여주는 사례다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.