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

[Roach] Mission6 step6. 페이지 나누기 #97

Merged
merged 9 commits into from Mar 23, 2021

Conversation

tmdgusya
Copy link

@tmdgusya tmdgusya commented Mar 21, 2021

페이징을 하면서 고려한점

  • 한페이지당 보여아하는 글의 개수 15개 -> Pageable 이용하여 처리
  • 보여야 하는 페이지 번호
    • 단순히 현재 페이지 번호에 더해야 하는가 ? => 게시물이 있는 마지막 페이지를 MaxPage 로 두고 현재 페이지 기준에서 5칸씩 만 보여줘야함
    • 예를 들면 총 10장의 페이지가 있다고 했을때, 0번 페이지에 있다면 [ 0 | 1 | 2 | 3 | 4 | ] => 3번 페이지로 이동 => [ 3 | 4 | 5 | 6 | 7 | ]
    • 그리고 MaxPage 를 넘어갈 수 없도록 하였습니다 => 게시물이 있는 페이지까지만 이동 할 수 있도록
    • 5칸 미만의 칸으로 줄어들시 예를 들면 Maxpage 가 6인데 현재페이지가 3인경우는 3,4,5,6 밖에 없으므로 이 경우 자동적으로 2,3,4,5,6 으로 만들어 주도록 하였습니다.

배포링크

https://fierce-bayou-72083.herokuapp.com/

where deleted Flag 를 검증한 뒤 false 인 경우에만 보이도록 설정
포스트를 페이징하기위해서 Pageable 클래스를 이용하였습니다.
Python Script 로 1000개정도 넣어줄 예정
- 넘어오는 list 의 원소들로 pagenation 을 할 수 있도록 함
- 페이지 네이션을 위해 PageBlock class 생성 각 메뉴 단위를 5개가 보이도록 블록을 생성해주는 클래스
Pageable 을 Wrapping 하여 최대한 한 객체로 서 전달될 수 있도록 하였고, 요구 사항에 맞춰서 작동될 수 있도록 하였습니다.
- 페이징을 다르게 할 경우 작동이 안되는 버그가 있어 페이징 개수를 기반으로 하는 로직으로 변경 여러 테스트를 통해 확인했음.
- 현재페이지 + 4 가 5페이지므로 DEFAULT_PAGE_COUNT 의 숫자를 하나 낮췄습니다.
@wheejuni wheejuni self-requested a review March 22, 2021 12:02
Copy link

@wheejuni wheejuni left a 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 {

Choose a reason for hiding this comment

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

이 클래스의 역할을 잘 모르겠어요. 어떻게 왜 쓰나요?

Copy link
Author

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));
        }

일단 컨셉 위주로 설명 드렸는데 혹시 이해 가셨는지 모르겠네요

Choose a reason for hiding this comment

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

제가 보기에는 이건 백엔드가 아니라 프론트 영역에서의 구현과제라고 보여지는데요.
우선 PagePageable 의 사용에 집중해주시고 이 과제는 나중에 구현하시면 어떨까 하는 아쉬움은 드네요.
실제로도 페이징을 이렇게 접근하는 방식은 그리 흔하진 않거든요.
잘 정리해주신 것처럼 좌측 기준으로 정렬하다보니 생기는 문제 도 발생하죠.
일단 컨셉은 이해했으니 리뷰는 마저 진행토록 하겠습니다.

@wheejuni wheejuni self-assigned this Mar 22, 2021
Copy link

@wheejuni wheejuni left a 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 ?)

수고하셨습니다. 🥇

@wheejuni wheejuni merged commit 17fd87b into codesquad-members-2021:tmdgusya Mar 23, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants