• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

1:N 을 N:1로 바꿔 페이지네이션을 할 시 데이터 개수를 어떻게 기대한 1쪽에 맞출 수 있을지 궁금합니다

24.04.17 15:08 작성 조회수 60

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

1:N 관계에서 1을 기준으로 페이지네이션 조회에 대해 질문드립니다.

강의에서는

  1. N을 기준으로 조회

  2. lazy loading을 이용한 성능을 포기한 조회

  3. @BatchSize를 이용한 방법 이 세 가지가 제안되었습니다.

만약 이 페이지네이션에서 강의 초반부 예시처럼 N쪽에 조건문이 걸려야 해서 그에 대한 결과물을 가져와야 하는 경우

E.g. where m.age = 10

1번 방법으로 조회를 해야할 것 같은데

1번 방법에서 N:1임에도 1 입장에서 페이지네이션 개수 그대로 데이터를 추출할 수 있는 방법이 떠오르지 않아 질문드립니다.

 

N:1로 바꿔서 PAGE_SIZE를 10이라고 가정할 때 조회
(memberId가 10개가 나온다)
teamId:1, memberId:1
teamId:1, memberId:2
teamId:1, memberId:3
teamId:2, memberId:4
teamId:2, memberId:5
teamId:2, memberId:6
teamId:2, memberId:7
teamId:3, memberId:8
teamId:3, memberId:9
teamId:3, memberId:10

실제 기대하는 조회
(team 이 10개가 나오기를 기대)
teamId:1, memberId:1
teamId:1, memberId:2
teamId:2, memberId:3
teamId:2, memberId:4
teamId:3, memberId:5
teamId:3, memberId:6
teamId:4, memberId:7
teamId:5, memberId:8
teamId:5, memberId:9
teamId:5, memberId:10
teamId:6, memberId:11
teamId:6, memberId:12
teamId:7, memberId:13
teamId:7, memberId:14
teamId:8, memberId:15
teamId:8, memberId:16
teamId:8, memberId:17
teamId:9, memberId:18
teamId:9, memberId:19
teamId:10, memberId:20
teamId:10, memberId:20

 

답변 1

답변을 작성해보세요.

0

codesweaver님의 프로필

codesweaver

2024.04.18

안녕하세요. won님, 공식 서포터즈 코즈위버입니다.

데이터 조회와 페이징을 위한 카운트 쿼리는 결국 분리하여 사용할 수 밖에 없습니다.

1:N 으로 쿼리하 되 1의 아이디로 group by 를 활용하여 카운트를 세야 합니다.

감사합니다.