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
[Roach] Mission6 step6. 페이지 나누기 #97
Conversation
where deleted Flag 를 검증한 뒤 false 인 경우에만 보이도록 설정
포스트를 페이징하기위해서 Pageable 클래스를 이용하였습니다.
Python Script 로 1000개정도 넣어줄 예정
- 넘어오는 list 의 원소들로 pagenation 을 할 수 있도록 함
- 페이지 네이션을 위해 PageBlock class 생성 각 메뉴 단위를 5개가 보이도록 블록을 생성해주는 클래스
Pageable 을 Wrapping 하여 최대한 한 객체로 서 전달될 수 있도록 하였고, 요구 사항에 맞춰서 작동될 수 있도록 하였습니다.
- 페이징을 다르게 할 경우 작동이 안되는 버그가 있어 페이징 개수를 기반으로 하는 로직으로 변경 여러 테스트를 통해 확인했음.
- 현재페이지 + 4 가 5페이지므로 DEFAULT_PAGE_COUNT 의 숫자를 하나 낮췄습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
본격적인 리뷰에 앞서 PageBlock
이 어떤 의도로 설계됐고, 어떻게 사용되는지 조금 설명해 주셨으면 좋겠어요.
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
public class PageBlock { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 클래스의 역할을 잘 모르겠어요. 어떻게 왜 쓰나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
다섯 칸의 블럭을 생성해보자!
- 일단 초점은 [1,2,3,4,5] 와 같은 블럭을 게시물을 페이징 할 수 있는 만큼 만들어주는 클래스입니다.
- 예를 들면 1페이지당 3개의 게시물 기준으로 16 개 게시물이 있다면, 총 6페이지가 나올 수 있을 것입니다.
- 하지만 [0,1,2,3,4,5] 이렇게 보여주는 것이 아닌, 처음에는 Page=0 의 상태이므로 [0,1,2,3,4] 하고 1 페이지로 넘어갔을때 [1,2,3,4,5] 이런식으로 보여주게 하기 위해 해당 클래스를 구성하였습니다.
- 예를들어 제가 구현을 했을때 현재 page 가 가장 좌측에 놓이도록 하는데, 예를 들면 현재 페이지가 2페이지라면 [2,3,4,5,6] 이런 식으로 이런 블록을 생성해주는 Block 이 PageBlock 클래스 입니다.
좌측 기준으로 정렬하다보니 생기는 문제
- 만약에 페이지당 게시물 3개 기준으로 16개의 페이지가 있다면 MaxPage = 6 일 것입니다.
- 만약 3페이지로 갔을때 현재 페이지 부터 MaxPage 까지 나열한다면 [3,4,5,6] 으로 나열되게 됩니다.
- 저렇게 4개로 되는 것을 방지하기 위해서 아래 작업을 통해서 [2,3,4,5,6] 으로 만들어 줍니다.
if (count <= 4) {
currentPage -= (DEFAULT_PAGE_COUNT - (count + 1));
}
일단 컨셉 위주로 설명 드렸는데 혹시 이해 가셨는지 모르겠네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 보기에는 이건 백엔드가 아니라 프론트 영역에서의 구현과제라고 보여지는데요.
우선 Page
와 Pageable
의 사용에 집중해주시고 이 과제는 나중에 구현하시면 어떨까 하는 아쉬움은 드네요.
실제로도 페이징을 이렇게 접근하는 방식은 그리 흔하진 않거든요.
잘 정리해주신 것처럼 좌측 기준으로 정렬하다보니 생기는 문제 도 발생하죠.
일단 컨셉은 이해했으니 리뷰는 마저 진행토록 하겠습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드상에 특별히 이상한 점은 없어보입니다. 👍
PageBlock
이라는 클래스를 사용하는 것이 여전히 어색해보이기는 하지만, 로치가 판단하시기에 이것이 최선이라면 그 방법을 택하셔도 됩니다.
PageBlock
에 대해 확신이 있으시다면 바로 merge 하겠습니다. 💯
이렇게 Spring Q&A를 끝내시게 됐네요. WAS 미션을 진행할 때까지 아쉬운 점을 보강하셔도 좋고, 추가적으로 구현하고 싶은 내용이 있다면 브랜치 분기해서 다시 PR 열어주시면 리뷰어 누군가가 봐 줄 겁니다. (그쵸 @ksundong ?)
수고하셨습니다. 🥇
페이징을 하면서 고려한점
배포링크
https://fierce-bayou-72083.herokuapp.com/