강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

이승은님의 프로필 이미지
이승은

작성한 질문수

영한쌤 JPA 로드맵 성능최적화 부분 듣는데 페이징 질문입니다!

작성

·

174

0

 

    public List<Order> findAllWithItem() {
        return em.createQuery(
                "select distinct o from Order o" +
                        " join fetch o.member m" +
                        " join fetch o.delivery d" +
                        " join fetch o.orderItems oi" +
                        " join fetch oi.item i", Order.class)
                .setFirstResult(1)  //첫 번째 것을
                .setMaxResults(100) //100개 가져옴
                .getResultList();
    }

이 부분인데 첫 번재부터 100개 가져오는데 우린 2개 가져오니까 하나만 가져오면 되겠다고 하셨는데

왜 하나만 가져오면 되나요? 뭘 하나만 가져온다는 건가요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 부분은 JPA에서 실행하는 쿼리에 페이징 처리를 적용하는 상황입니다. setFirstResult(1)는 조회를 시작할 위치를 지정하고, setMaxResults(100)는 조회할 데이터의 최대 개수를 지정합니다. 따라서, 이 코드는 쿼리 결과의 두 번째 엔티티부터 시작해서 최대 100개의 Order 엔티티를 가져옵니다.

하나만 가져오라는 말은, 실제로 필요한 데이터가 몇 개인지에 따라 setMaxResults에 설정하는 값을 줄여서 필요한 만큼만 데이터를 가져오라는 의미일 수 있습니다. 예를 들어, 만약 실제로 필요한 Order 엔티티가 2개뿐이라면 setMaxResults를 2로 설정하여 불필요한 데이터 로딩을 줄일 수 있습니다.

JPA에서 페이징 처리를 사용할 때는 성능 최적화를 위해 실제로 필요한 데이터 양을 고려하여 적절한 페이징 값을 설정하는 것이 중요합니다. 또한, join fetch를 사용하여 연관된 엔티티를 한 번에 로딩하는 경우에도 페이징을 적절히 적용하여 너무 많은 데이터를 한 번에 가져오지 않도록 주의해야 합니다.

Spring Data JPA를 활용한다면 Pageable과 같은 추상화된 페이징 처리 인터페이스를 사용하여 더욱 간편하게 페이징 처리를 할 수 있습니다.

대한 정보는 아래 문서에서 더 자세히 학습하실 수 있습니다.

추가로, JPA 성능 최적화와 관련하여 Stream, Slice, Page 등 다양한 반환 타입 및 결과를 처리하는 방법에 대한 정보가 필요하시다면 이 부분도 확인하실 수 있습니다.

이승은님의 프로필 이미지
이승은

작성한 질문수

질문하기