티스토리 뷰
문제 발생
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의 프록시 객체와 지연 로딩 문제를 피할 수 있었고, 필요한 데이터만을 간단한 구조로 직렬화할 수 있게 되어 에러를 해결할 수 있었다.
'Spring' 카테고리의 다른 글
[캡스톤 프로젝트] Spring Boot HTTPS로 배포하기 (0) | 2024.11.26 |
---|---|
[SPRING] Spring Data JPA로 동적 쿼리와 페이징 최적화하기: Specification과 @EntityGraph 활용 (0) | 2024.11.05 |
[SPRING] 로깅에 AOP 적용해보기 (3) | 2024.06.01 |
[SPRING] 로깅에 대해서 알아보자 (0) | 2024.05.25 |
스프링 키워드 모음 #4 (1) | 2024.05.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바 스프링
- 북마크
- EnumType.ORDINAL
- 스프링 커뮤니티
- 회원탈퇴
- 인텔리제이
- 스프링부트
- DP
- 로그아웃
- 자바
- 준영속
- 비영속
- JPA
- 파이썬
- 스프링 북마크
- 커뮤니티
- 다이나믹 프로그래밍
- 백준 파이썬
- 영속
- 웹MVC
- 지연로딩
- 로깅
- SQLD
- 프론트엔드
- SQL
- elasticsearch
- SQL 레벨업
- 백준
- 스프링
- 웹 MVC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함