Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FIX] 노오프셋 페이징 기법으로 변경 #209

Merged
merged 2 commits into from
Oct 2, 2024

Conversation

jaewonLeeKOR
Copy link
Member

PR 타입(하나 이상의 PR 타입을 선택해주세요)

  • 기능 추가
  • 기능 삭제
  • 버그 수정
  • 의존성, 환경 변수, 빌드 관련 코드 업데이트

반영 브랜치

fix/#208/noOffsetPagination -> develop

변경 사항

  • 페이지네이션 방식을 노오프셋 페이징 기법으로 변경하였습니다. No Offeset 이란
  • 기존의 방법의 컨텐츠 제한선을 둔 컨텐츠 고정 방식은 잘 쓰지 않는 방법이라 판단하였으며, 마지막으로 조회한 데이터의 마지막 인덱스를 이용한 페이지네이션 방식인 노오프셋 방식이 무한스크롤에서 더 적합하다고 판단하여 수정하게 되었습니다.
  • 페이지네이션을 사용하는 API의 요청,반환값의 수정이 있습니다.
    • 요청값
      • pageNumber 제거 : 노오프셋 방식은 이전의 인덱스를 기준으로 다음 컨텐츠를 조회하는 방식으로 현재 페이지 위치가 필요하지 않게 되었습니다.
    • 반환값
      • hasPrevious 제거 : 노오프셋 방식과 무한 스크롤 방식의 특징상 앞선 데이터가 있는지는 중요하지 않아 제거하였습니다.
      • number 제거 : 요청값의 설명과 동일합니다.
  • JPQL로 사용해도 되지만 Pageable을 이용하는 이유
    • JPA의 Slice를 사용하기 위해서는 Pageable 객체를 argument로 주어져야 한다는 조건이 있는것으로 파악하였습니다.
    • Slice를 써야하는 이유로는 다음의 컨텐츠가 존재하는지(hasNext), 실제로 불러와진 데이터가 몇개인지(numberOfElements)을 자바 코드로 작성하지 않고 반환받을 수 있다는점입니다.
  • 수정된 페이지네이션 플로우는 다음과 같습니다.
sequenceDiagram
actor u as customer
participant c as client
participant s as server
u ->>+ c : Pull to Refresh
c ->>+ s : infiniteScroll API<br>with pageSize<br>without threshold
s ->>- c : API result<BR>with threshold, hasNext
c ->> c : save threshold per API

loop hasNext == true
u ->>+ c : Scroll
c ->>+ s : infiniteScroll API<br>with pageSize, threshold
s ->>- c : API result<BR>with threshold, hasNext
c ->> c : save threshold per API

break hasNext == false
c --> u : end of content
end
end
Loading

테스트 결과

image
image

@jaewonLeeKOR jaewonLeeKOR added the 🌟enhancement New feature or request label Oct 2, 2024
@jaewonLeeKOR jaewonLeeKOR self-assigned this Oct 2, 2024
youngeun-dev
youngeun-dev previously approved these changes Oct 2, 2024
Copy link
Contributor

@youngeun-dev youngeun-dev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

페이징 기법 바꾸시느라 수고하셨어요 ,, 👍👍

Copy link
Contributor

@tnals2384 tnals2384 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 고생하셨습니다 ㅎㅎ

@jaewonLeeKOR jaewonLeeKOR merged commit 93ff3d8 into develop Oct 2, 2024
1 check passed
@jaewonLeeKOR jaewonLeeKOR deleted the fix/#208/noOffsetPagination branch October 2, 2024 16:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🌟enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FIX] 중복 데이터 방지를 위한 페이지네이션 기법 노오프셋 방식으로 변경
3 participants