Back-End/Querydsl
-
엔티티의 1:N 관계에서의 QueryDsl fetch Join - (2) 페이지네이션 해결 방법Back-End/Querydsl 2022. 12. 27. 16:00
사실, 이 문제에 대한 해결법에 대해서 많이 구글링을 해 보았지만, 상황에 따라 굉장히 해결법이 다양했다. 그 중에서도 가장 확실하고, 보편적으로 쓰일 만 한 방법을 소개한다. fetch Join + @BatchSize 활용하기 먼저, fetch Join을 통해 ToOne 관계에 있는 모든 entity를 fetch join 한다. ToOne관계의 경우, row수를 증가시키지 않기 때문에 페이징 쿼리에 영향을 주지 않기 때문이다. 이 후, 컬렉션은 지연 로딩으로 조회를 한다. 여기서, 지연 로딩 성능을 최적화하기 위해서 @BatchSize를 사용하게 된다. BatchSize의 경우, 어노테이션을 사용하여 개별로 적용할 수도 있고 application.yml 파일 내에 설정을 통해서 글로벌 적용도 가능하다...
-
엔티티의 1:N 관계에서의 QueryDsl fetch Join - (1) 페이지네이션Back-End/Querydsl 2022. 12. 21. 19:32
QueryDsl은 쿼리 빌더 프레임워크로써, 동적 쿼리 작성과 컴파일 시점에서의 쿼리 오류 검출이라는 큰 장점을 가지고 있다. (동적 쿼리 예시 및 QueryDsl로의 해결법 : https://jaehoney.tistory.com/185 ) 그래서 Spring Data JPA를 사용하는 개발자라면 굉장히 유용하게 사용할 수 있는 프레임워크이다. 사내카페의 포스기 백엔드 서버를 개발하던 중이었다. 팀 동료의 사정으로 팀 동료의 파트를 대신 개발을 하게 되었는데, 포스기에서 판매하는 상품을 조회하는 과정에서 쿼리가 수 십 방이 나가고 있었다. 이유인 즉슨, 테이블의 구조가 다음과 같았는데, 상품과 상품 이미지는 1:N, 상품 이미지와 이미지는 1:1의 구조를 갖고 있었다. 그리고 메뉴를 조회하는 API에 대..
-
Querydsl 및 간단한 작성방법Back-End/Querydsl 2022. 4. 21. 05:49
Querydsl이란, JPQL 빌더라고 할 수 있다. JPA를 사용할 때, 다양한 쿼리 방법을 지원하는데(JPQL, JPA criteria, 네이티브 SQL) 그 중 하나라고 할 수 있다. 여기서 JPQL이란 객체지향 쿼리 언어이다. SQL과 그 형식이 비슷하지만, DB의 테이블에 직접 연결되는 것이 아닌 JPA 엔티티에 대해서 동작을 한다. 그래서 JPQL의 쿼리에는 테이블이 아닌 엔티티에서 표현하고 있는 컬럼의 이름을 써 주어야 한다. TypedQuery query = em.createQuery("select m from Member m", Memeber.class); List memberList = query.getResultList(); 여기서, "select m from Member m" 부분이..