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




패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 34일차!
오늘은 커뮤니티 피드 서비스의 admin 회원 관리 페이지 구현 작업을 진행하였다.
먼저, 페이징 처리 기능을 구현하였다.
page index와 page size를 받아 offset을 계산하고 limit을 설정하는 Pageable 클래스를 생성했다.
public class Pageable {
private int pageIndex;
private int pageSize;
public Pageable() {
this.pageIndex = 1;
this.pageSize = 10;
}
public Pageable(int pageIndex, int pageSize) {
if (pageIndex < 1) {
throw new IllegalArgumentException("페이지 인덱스는 1 이상이어야 합니다.");
}
this.pageIndex = pageIndex;
this.pageSize = pageSize;
}
public int getOffset() {
return (pageIndex - 1) * pageSize;
}
public int getLimit() {
return pageSize;
}
}
@Test
void givenPageableIndexIsNull_whenGetOffset_thenShouldBeReturn0() {
// given
Pageable pageable = new Pageable();
// when
int offset = pageable.getOffset();
int limit = pageable.getLimit();
// then
assertEquals(0, offset);
assertEquals(10, limit);
}
@Test
void givenPageableIndexIs2Size10_whenGetOffset_thenShouldBeReturn10() {
// given
Pageable pageable = new Pageable(2, 10);
// when
int offset = pageable.getOffset();
int limit = pageable.getLimit();
// then
assertEquals(10, offset);
assertEquals(10, limit);
}
페이징 처리 기능이 제대로 작동하는지 확인하기 위해 테스트 코드를 작성하였다.
첫번째 테스트 코드인 회원 관리 페이지 조회가 처음 수행되었을 경우에는 Pageable의 기본 생성자에 따라 page index는 1, page size는 10이 된다.
처음 화면을 조회하는 것이기에 당연히 offset은 0이고, limit은 page size와 동일한 10이 되어야 한다.
두번째 테스트 코드는 page index가 2, page size가 10인 경우를 테스트한다.
앞의 데이터 10개를 지나친 이후부터의 데이터 10개가 조회되는 것이기 때문에, offset은 10이고 limit은 동일하게 10이 되어야 한다.
public class GetUserTableRequestDto extends Pageable {
// name 기반의 필터링을 위한 필드
private String name;
}
그리고 dto가 Pageable 클래스를 상속받게 하여 간편하게 페이징 관련 기능도 추가할 수 있었다.
이전에 진행했던 프로젝트에서 페이징 기능을 구현해야 했는데, 조금 고생을 했던 기억이 있다.
페이징 처리 클래스를 하나 만들고 상속을 이용하면 이렇게나 편리하게 구현할 수 있다니..!
이번에도 또 좋은 방법을 하나 알게 되어 기쁘다.