Tuesday, December 11, 2018

Spring Boot JPA를 사용하면서 'No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor' 에러를 해결하는 방법

JPA에서 'No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor' 에러 해결 방법

프로젝트를 진행하다가 잘 동작하던 코드가 갑자기 'No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor' 에러를 발생시키는 경우가 있습니다. 이 문제를 해결하기 위한 몇 가지 방법에 대해 알아보겠습니다.

.properties 파일 수정

첫 번째로 시도할 수 있는 방법은 .properties 파일에 'spring.jackson.serialization.fail-on-empty-beans=false' 옵션을 추가하는 것입니다. 이 설정을 적용한 후, 응답값에서 'hibernateLazyInitializer'라는 키값으로 빈 오브젝트({})가 반환되는 것을 확인할 수 있습니다.

@JsonIgnoreProperties 어노테이션 추가

그러나 이렇게 해도 완전히 문제가 해결된 것은 아닙니다. 따라서 두 번째로 시도해볼 수 있는 방법은 해당 엔티티마다 '@JsonIgnoreProperties({"hibernateLazyInitializer"})' 어노테이션을 추가하는 것입니다.

JPA 지연 로딩(lazy load) 관련 현상

원인을 계속해서 조사해 보니, 이 현상은 JPA의 지연 로딩(lazy load)과 관련된 것으로 파악되었습니다. 특정 설정 변경 없이도 갑자기 발생하는 이 현상에 대해 좀 더 깊게 파고들어야 했습니다.

getOne(id)과 findById(id)의 동작 방식 차이

코드를 다시 검토하니, JpaRepository에서 findById(id) 메소드를 사용하여 하나의 레코드를 가져오던 부분을 getOne(id) 메소드로 변경한 후부터 문제가 생긴 것으로 보였습니다.

'No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor' 에러 원인 및 해결방안 결론

따라서, getOne(id)의 동작 방식이 findById(id)와 다르며, 이 차이 때문에 'No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor' 에러가 발생하는 것으로 결론지었습니다. 이를 통해 문제의 원인을 찾고 해결할 수 있었습니다.


1 comment:

  1. 덕분에 문제 해결했습니다. 감사합니다!

    ReplyDelete