티스토리 뷰

728x90
반응형

1. 게시판 페이징 구현

(1) 페이징 기능 구현

  • 게시판 페이지에는 이전, 페이지 번호, 이후를 넣고, 게시글 페이지에는 이전, 이후 의 페이징 기능을 넣을 것이다.
  • Service > PagenationService 클래스를 생성한다.
  • 숫자 리스트를 받아 뷰에서 그려주는 방식으로 구성한다.
  • 현재 페이지, 전체 페이지 번호(즉 마지막 번호)를 리스트로 받는다.
  • 페이지네이션 bar 크기를 상수로 정하고 현재 bar의 길이를 return 하도록 한다.

 

(2) 테스트

  • 현재 페이지 번호와 총 페이지 수가 주어졌을 때, 페이징 바 리스트를 생성하도록 한다.
  • @ParameterizedTest : 동일한 메소드를 여러 번 테스트하는 방식
    • 유닛 테스트의 각각의 제목을 포맷에 맞춰 보여줄 수 있다.
    • Index는 현재 번호, 입력값의 순서대로 번호가 주어진다.
    • 예를 들어 “[{index}] 현재 페이지: {0}, 총 페이지: {1} => {2}” 로 작성할 수 있다.
  • @MethodSource : 테스트 입력 데이터
  • actual에는 페이지네이션 바의 숫자들을 담은 리스트를 받아 전달하고, actual이 expected와 동일한지 확인한다.
  • 테스트에 쓰일 메소드는 static으로 만드는데, 이름은 테스트 메소드와 동일하게 작성하면 자동으로 인식한다.
  • Stream.of를 사용하여 테스트할 arguments들을 넣어주면 된다.
  • @SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = Void.class): 부트테스트의 무게를 줄일 수 있다.
  • 추가
    • 스팩의 명세를 코드에 드러내기 위해 테스트 코드에서 페이지네이션의 길이를 확인하는 내용을 넣어줄 수 있다.
    • 페이지네이션에 관한 테스트 외에도 페이지네이션을 사용하는 곳에 paginationService에 대한 테스트를 간단하게 추가해주어야 한다.

 

(3) 구현

  • currentPageNumber와 totalPages를 사용해서 startNumber와 endNumber을 계산해서 리스트를 return해주면 된다.
  • startNuber는 바 길이를 고려하여 Math.max(currentPageNumber – (bar_length/2),0) 로 계산한다.
  • endNumber는 Math.min(startNumber + bar_lengh, totalPages) 로 계산한다.

 

(4)

  • 기존에 구현한 내용에서 id를 추가한다.
  • Xml을 통해 Thymeleaf 문법으로 작성한다.
  • Previous와 next를 남기고 가운데 숫자 부분을 th:each를 통해 치환하며 페이지 번호를 추가하도록 구현한다.
  • Prev는 현재 페이지 -1, next는 현재 페이지 + 1로 구현한다.
  • 이 때 링크는 th:href로 작성된다.
  • 현재 페이지는 disabled 설정을 추가로 해준다.

 


 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/43z0P6S

 

 

#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완

728x90
반응형
댓글