인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

김규혁님의 프로필 이미지

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

게시글 목록 API - 페이지 번호 구현

count 쿼리 질문있습니다

해결된 질문

작성

·

92

0

  • 학습 관련 질문을 최대한 상세히 남겨주세요!

  • 고민 과정도 같이 나열해주셔도 좋습니다.

  • 먼저 유사한 질문이 있었는지 검색해보세요.

  • 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

구조를 보면 마지막 페이지로 갈 수록 모든 페이지 목록을 불러오는거 같은데 제가 이해한게 맞나요?

 

pageLimitCalculator를 보면

 

page=4, pageSize=10, movablePage=3일때

 

pageLimitCalculaotr를 계산하면 61인데 현재 4페이지에 있다면 2번째 그룹인데 2번째 그룹의 데이터 목록들만 불러오는게 아니라 1번째 그룹데이터까지 포함해서 총 60개를 불러오는게 맞는거죠?

 

그렇다면 pageLimitCalculator 공식에서

(((page - 1) / movablePageCount) + 1) pageSize movablePageCount + 1;

 

마지막에 1을 더해주는데 왜 해주는 건가요?

다음 페이지에 데이터가 있나 없나를 확인하기 위해 1을 더하는건줄 알았는데 제가 생각한대로 마지막페이지로 갈수록 모든 데이터를 불러오는 구조라면 굳이 마지막에 1을 더할 필요가 있나 싶어서요

궁금합니다!

답변 2

0

쿠케님의 프로필 이미지
쿠케
지식공유자

규혁님, 안녕하세요!

 

구조를 보면 마지막 페이지로 갈 수록 모든 페이지 목록을 불러오는거 같은데 제가 이해한게 맞나요?

맞습니다! 마지막 페이지라면, 모든 페이지 목록(카운트 말씀하신거겠죠!?)을 불러와야 합니다!

 

pageLimitCalculaotr를 계산하면 61인데 현재 4페이지에 있다면 2번째 그룹인데 2번째 그룹의 데이터 목록들만 불러오는게 아니라 1번째 그룹데이터까지 포함해서 총 60개를 불러오는게 맞는거죠?

맞습니다! 카운트는 2번째 그룹의 데이터 목록만 불러올 수는 없습니다. 4페이지에 있다는 사실 자체가 1번째 그룹을 이미 스킵한 상황이기 때문입니다. (1번째 그룹의 개수도 당연히 알아야 2번째 그룹이란걸 알 수 있는 상황)

 

마지막에 1을 더해주는데 왜 해주는 건가요?

3번째 그룹은 61번째부터의 데이터입니다.

만약 60개만 카운트했다고 가정해보겠습니다.

3번째 그룹이 있는지/없는지 알 수 없습니다.

61개 카운트해서, 그 1개가 있어야, "다음" 버튼을 활성화할지 결정할 수 있습니다.

만약 61개 조회했는데 실 데이터가 60개밖에 없어서 60개만 카운트 됐다면, "다음" 버튼은 비활성화해서 더 이상 다음 그룹은 없다는 사실을 나타낼 수 있습니다.

실 데이터가 61개가 있어서 61개가 카운트 됐다면, "다음" 버튼을 활성화할 수 있는 것이고요!

 

혹시 더 궁금한 점 있으시면 편히 문의 주세요!

 

김규혁님의 프로필 이미지
김규혁
질문자

답변 감사합니다! 완전히 이해했습니다

 

또 궁금한 것이 있는데, 그럼 마지막 페이지에 갈수록 모든 데이터를 불러와야 하기 때문에 성능이 떨어지는 것은 어쩔 수 없는 부분인 것 같은데 이를 해결할 방법이 있는건가요? 혹은 모든 데이터라 할지라도 count한 개수만 불러오는 것이기 때문에 그렇게까지 성능이 떨어지지는 않는건가요?

쿠케님의 프로필 이미지
쿠케
지식공유자

이건 강의 수강하시면서 해소될 문제일 것 같네요!

모든 데이터라면 count 쿼리는 성능이 떨어집니다. (데이터가 많아질수록)

해결 방법 간단히 언급드리면,

  • 어뷰징이라 판단하고 너무 많은 뒷페이지는 제한을 건다거나

  • 무한 스크롤 사용성을 쓴다거나

  • 카운트 데이터 자체를 조회시점에 쿼리하는게 아니라 단일 레코드로 미리 만들어둔다거나(좋아요 강의에서 만들어봅니다)

이러한 방법들이 있습니다! 뒷 부분 보시다보면 강의에서도 나오게 될겁니다!

김규혁님의 프로필 이미지
김규혁
질문자

아직 강의를 다 안들어서 그랬던거군요 답변해주셔서 감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 김규혁님.

페이지네이션의 count 쿼리와 관련한 질문에 대해 답변드립니다. 페이지네이션에서 데이터의 양 및 마지막 페이지 여부를 결정하는 로직은 매우 중요합니다. 이를 이해하는 데 있어 핵심은 페이지네이션 로직과 다음 페이지의 데이터 존재 여부를 검사하는 것입니다.

페이지와 그룹 관계

  1. 현재 페이지 및 그룹: 페이지네이션 로직에서 page=4, pageSize=10, movablePage=3이라는 값이 주어졌을 때, 이는 4번 페이지가 두 번째 그룹(3페이지당 하나의 그룹)이라는 의미입니다.

  2. 데이터 로딩 방식: 페이지네이션 로직에 따라 특정한 그룹의 레코드만 로드할지, 또는 이전 그룹을 포함하여 로드할지는 설정에 따라 다를 수 있습니다. pageLimitCalculator의 계산 결과가 61이라는 것은 페이지네이션이 특정 그룹의 데이터를 완전히 가져오고 그 다음 그룹의 첫 요소까지 확인하는 방식을 염두에 두고 있다는 것입니다.

1을 더하는 이유

  1. 다음 페이지 여부 확인: 마지막에 1을 더하는 것은 기본적으로 현재 페이지의 데이터만을 가져오는 데서 나아가, 다음 페이지의 존재 여부를 확인하기 위해 추가 데이터를 요청할 수 있다는 의미로 해석됩니다. 이는 사용자가 더 많은 데이터를 요청할 때 사용자 경험을 개선하기 위해 널리 사용되는 방법입니다.

  2. 모든 데이터를 불러오는 구조가 아닌 경우: 해당 공식이 모든 데이터를 불러오는 것이 아니라 정확한 마지막 데이터 여부를 체크하려는 구조라고 이해할 수 있습니다. 이는 프론트엔드에서 버튼을 활성화/비활성화할 근거를 제공합니다.

더 구체적인 정보를 얻으시려면, 유사한 질문에 대한 답변을 참고해보세요:
- 무한 스크롤 쿼리와 페이지 번호 쿼리 질문 있습니다

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김규혁님의 프로필 이미지
김규혁
질문자

음.. 더 궁금한 점은 그렇다면 1을 더해서 다음 페이지 데이터의 유무를 확인하려는 거라면 혹시 다음 페이지 유무를 확인하는 코드는 어디있을까요..? 저는 아무리 봐도 다음 페이지에 데이터가 있는지 확인하는 코드를 못찾겠습니다