inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

count 쿼리 질문있습니다

해결된 질문

212

김규혁

작성한 질문수 20

0

 

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

 

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을 더할 필요가 있나 싶어서요

궁금합니다!

java mysql spring-boot kafka redis

답변 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개가 카운트 됐다면, "다음" 버튼을 활성화할 수 있는 것이고요!

 

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

 

0

김규혁

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

 

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

1

쿠케

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

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

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

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

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

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

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

1

김규혁

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

0

인프런 AI 인턴

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

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

페이지와 그룹 관계

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

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

1을 더하는 이유

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

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

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

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

0

김규혁

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

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

0

31

1

consumer에서 에러가 발생할 경우 데이터 유실 문의

0

47

2

게시글 테스트 데이터 삽입

0

50

2

정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?

0

104

2

좋아요 기능 정합성 보장 방법

0

97

2

좋아요 동시성처리 최적의 선택?

1

136

2

프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해

0

92

2

안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.

0

59

1

조회수 조회 로직 질문

1

67

2

비로그인 유저도 어뷰징 방지 정책

1

72

2

CommentServiceTest의 테스트 로직 질문

0

54

2

무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문

1

74

2

path 쿼리 관련 질문드립니다!

0

60

2

antigravity 에디터를 쓰신다면 종료해주세요

1

123

0

프로젝트 구조

0

88

2

article_like_count api test

0

78

2

이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.

0

104

2

[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제

0

91

2

findByPath에서 articleId로도 검색을 해야 할 것 같아요.

0

92

3

jpa ddl-auto none을 하는 이유와 join 방법

0

97

2

팩터리 메소드와 response 객체 사용 이유가 궁금합니다!

0

90

2

커서 기반 페이지네이션 과 무한 스크롤링

0

110

2

게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기

0

97

2

멀티 모듈이 아닌 MSA 환경에서 common

0

156

2