QueryDSL의 페이징 카테시안 곱 문제 해결 방법 복잡한 일대다 연관관계를 가진 데이터를 페이징 처리할 때 어떤 어려움을 겪은 적이 있으신가요? 저는 실무에서 페이징을 처리하다 보면 목록을 조회할 때 단순하게 하나의 연관관계가 아니라 일대다의 연관관계를 한두 개가 아닌 여러 개를 같이 조회할 경우가 생기게 됬었습니다. 이때 평소와 같이 페이징을 구현했더니 결과는 제대로 나오지 않았습니다. 이유는 바로 1:N 관계에서 발생하는 카테시안 곱 문제 때문입니다. JPA를 사용한다면 다들 한번쯤 겪어볼 문제이기 때문에 해결하기 위한 전략과 팁을 공유하기 위해 작성했습니다. 카테시안 곱(Cartesian Product)이란? JPA에서의 카테시안 곱은 데이터베이스 쿼리 수행시 여러 테이블 간의 조인을 잘못 사용..
QueryDSL에서 JPA N+1 문제 해결하기 JPA를 배우며 N+1 문제에 대해 인지를 했지만, QueryDSL을 사용했을 때 어색하고, 잘 활용하지 못했던 경험이 있었습니다. 그래서 자주 사용하는 QueryDsl 기준으로 N+1문제를 해결하는 방법에 대해 알아보기 위해 글을 작성했습니다. JPA N+1 한 Entity를 조회했을 때 한 개의 쿼리가 생성되는 기댓값을 가지고 조회를 합니다. 하지만 어떤 상황의 경우에 한 개의 쿼리가 아닌 여러 개의 쿼리가 N개만큼 추가로 발생하는데 이것을 JPA의 N+1 문제라고 합니다. N+1문제가 발생하는 상황은 다음과 같습니다. 즉시 로딩 엔티티를 조회하는 경우 즉시 로딩의 경우 엔티티를 조회 할때마다 쿼리를 바로 날리기 때문에 N+1문제가 발생합니다. 지연 로..