티스토리 뷰

 

문제 발생

No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor ..... 

개발 과제를 하던 중에

게시글 단건조회, 전체조회를 할 때 계속 No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor ..... 오류가 발생했다.

찾아보니 이 오류는 데이터 직렬화 과정에서 발생한 문제로, Jackson이 Hibernate의 지연 로딩(lazy loading) 으로 인해 생성된 프록시 객체의 내부를 직렬화하려 할 때 발생한다고 한다.

 

문제 상황

Post 엔티티에서 Blog를 참조하는 경우, 다음과 같은 PostFindDto를 사용했다.

public record PostFindDto(String title, String content, Blog blog) {
    public static PostFindDto of(Post post){
        return new PostFindDto(post.getTitle(), post.getContent(), post.getBlog());
    }
}

 

이 구조에서 Blog 엔티티를 직접 참조함으로써, Jackson은 Hibernate의 프록시 객체와 지연 로딩된 데이터를 직렬화하려 하면서 문제가 발생하게 되었다.

 

해결 방법

문제를 해결하기 위해, Blog 엔티티 대신 DTO를 사용하는 방식으로 접근했다. 

public record BlogFindDto(
        String title,
        String description,
        MemberFindDto member
) {
    public static BlogFindDto of(Blog blog) {
        return new BlogFindDto(
                blog.getTitle(),
                blog.getDescription(),
                MemberFindDto.of(blog.getMember())
        );
    }
}

 

우선 Blog조회 dto인 BlogFindDto를 만들어주었다.

 

public record PostFindDto(String title, String content, BlogFindDto blog) {
    public static PostFindDto of(Post post){
        return new PostFindDto(post.getTitle(), post.getContent(), BlogFindDto.of(post.getBlog()));
    }
}

 

그리고 PostFindDto를 수정하여 Blog 대신 BlogFindDto를 사용하도록 변경해주었다.

이렇게 Blog 엔티티를 직접 사용하지 않고 BlogFindDto를 사용함으로써, Hibernate의 프록시 객체와 지연 로딩 문제를 피할 수 있었고, 필요한 데이터만을 간단한 구조로 직렬화할 수 있게 되어 에러를 해결할 수 있었다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함