ManyToOne N+1문제

프로젝트

목록 보기
20/39
post-thumbnail
  • 장바구니인 Cart 엔티티에서 본인이 담은 장바구니목록을 조회할 때 N+1 문제가 나타난다.
    아래와 같이 장바구니의 목록을 잘 select 해온 후 @ManyToOne으로 가지고 있는 User와 Product의 정보들도 다 select 해온다..

Cart Entity

문제 상황

그래서 해결할 수 있는 방법을 찾아보는데, 즉시로딩(ManyToOne, OneToOne)에서 발생하는 일인 것 같다.
-> 블로그 : 다양한 해결책을 담고있음
-> 김영한님 답변 : join fetch와 엔티티그래프는 무엇인가요?
➡︎➡︎ 여기서 김영한님이 웬만하면 lazy 로딩을 사용하라고 하셨다. 현업에서는 거의 eager를 쓰지 않는다고..

@Query("select c from Cart c join fetch c.user join fetch c.product")
-> inner join을 실행한다. 그 대신 페이징 사용 못함

@EntityGraph(attributePaths = {"user", "product"})
-> left outer join을 실행한다. 페이징을 사용하기 때문에 이걸 사용할 것

profile
백엔드를 공부하고 있습니다.

0개의 댓글