inflearn logo
강의

講義

知識共有

本当! Spring BootとJPAの活用2 - API開発とパフォーマンスの最適化

API開発の高度なクリーンアップ

질문이 있습니다!

482

dm9511251058

投稿した質問数 13

0

안녕하세요. 게시판의 댓글을 계층형으로 짜려고 시도하고 있는데 헷갈려서 복습겸 다시 강의 듣다가 질문드립니다.

우선 처음 게시판을 조회할때 최상위 부모 댓글들을 페이징 처리하여 가져옵니다.

그 후 최상위 부모 댓글의 자식들도 페이징 처리하여 가져오고 싶은데 그냥 페이징으로 가져오면 자식들의 수많큼 쿼리를 날리게 되어 현재 강의의 방식대로 가져오는 방법을 사용해보았는데 이 방법은 특정 ID들에 속한 값들을 모두 조회한 후 gropingBy를 통해 분리했기 때문에 페이징이 불가능한거 같은데 제가 잘못이해하고 있는건가요?

혹은 제가 접근법이 잘못되었는지 궁금해서 질문드립니다.

감사합니다.

spring java JPA spring-boot

回答 5

2

yh

안녕하세요. 동명님

아쉽지만 원하시는 방법은 SQL에서 지원하지 않습니다. 따라서 JPQL로도 문제를 해결할 수 없습니다.

결국 각각의 orderId 각각 마다 각각 쿼리를 따로 실행하셔야 합니다.

실무에서 트래픽 상황에 따라 다음과 같은 방법으로 해결합니다.

1. 성능이 중요하지 않은 경우: 내부 시스템에서 사용하는 어드민이라면 그냥 쿼리를 orderId 수 만큼 실행합니다.

2. 성능이 중요한 경우: 첫번째 페이지만 가지고 있는 데이터를 별도의 캐시에 각각 말아둡니다. 예를 들어서 a,b,c,가 있으면 a,b,c 각각 첫 10건의 데이터만 따로 가지고 있는 것이지요. 그리고 이후에 a에 더보기를 누르면 a 데이터만 테이블의 다음 페이지에서 추가로 조회합니다. 보통 첫 페이지를 보는 유저는 매우 많지만, 그 다음 더보기를 누르는 유저는 상대적으로 적기 때문에 첫 페이지를 캐시에 잘 말아두는 방법을 활용하면 좋습니다.

감사합니다^^

1

dm9511251058

아 그렇군요! 친절한 답변 감사합니다. 참고하겠습니다!

0

yh

네^^! 좋은하루 되세요

0

dm9511251058

아 제가 아직  많이 부족해서 설명을 제대로 못한거같네요.

이 부분에서 where in 절을 사용하여 orderIds들의 값들을 가져오는데 가져올때 orderId 하나하나마다 가져올 데이터 개수를 제한할 수 있는지 물어본거였어요.

그래서 그냥 일단 다 가져오고 개수에 맞게 짤라서 해결했습니다!

private Map<Long, List<OrderItemQueryDto>> findOrderItemMap(List<Long> orderIds) {
List<OrderItemQueryDto> orderItems = em.createQuery(
"select new jpabook.jpashop.repository.order.query.OrderItemQueryDto" +
"(oi.order.id, i.name, oi.orderPrice, oi.count)" +
" from OrderItem oi" +
" join oi.item i" +
" where oi.order.id in :orderIds", OrderItemQueryDto.class)
.setParameter("orderIds", orderIds)
.getResultList();

return orderItems.stream()
.collect(Collectors.groupingBy(OrderItemQueryDto::getOrderId));
}

0

yh

안녕하세요 동명님^^

정확히 어떤 것을 원하시는지 제가 잘 이해하지 못해서 그런데, 매우 구체적인 예제로 다시 한번 설명 부탁드릴께요^^!

강의 관련 외 질문입니다.

0

65

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

0

86

1

BeanCreationException

0

86

3

Update 후 UpdateMemberResponse 매핑할 때

0

46

1

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

0

98

2

페이징 + 검색조건 관련해서 질문드립니다.

0

70

1

Query Dsl Q파일 질문입니다.

0

82

1

루트 쿼리라는것은

0

58

1

메서드를 분리하는 기준

0

62

1

findAllWithMemberDelivery 메서드 질문드립니다.

0

108

3

연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략

0

83

2

fetch join과 영속화와 OSIV의 관계

0

84

2

Distinct 사용 전 결과에 대한 의문

0

113

2

레포지토리 계층에서의 트랜잭션에 대한 의문

0

56

1

영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.

0

78

2

dto 필드 속 엔티티 여부

0

58

1

뷰템플릿 사용 시

0

76

2

Result 클래스 관련 질문

0

56

1

@PostConstruct 프록시 관련 질문드립니다

0

85

1

DTO 대신 Form 사용은 안되나요?

0

133

1

OSIV ON 상태일 때

0

95

1

fetch join VS fetch join 페이징 궁금증

0

179

2

양방향 연관관계 알아보는 법?

0

104

1

16강 17강 간단 정리 이게 맞을까요 ?

0

165

2