관리자 페이지 Users 페이징 처리

박소현·2025년 5월 8일

페이징 처리

public interface AdminRepository extends JpaRepository<Users,Long>
Page<Users> findAll(Pageable pageable);

Page<Users>는 페이징 정보와 Users 엔티티 리스트를 함께 가지고 있는 객체이다
컨트롤러에서는 이 객체를 다음과 같이 활용할 수 있다

GetMapping("/list")

이번에는 서비스를 변경해보자!
기존 서비스에서는 페이징을 사용하지 않고 모든 사용자 목록을 가져오는 방식으로 구현되어 있었다

 //회원 전체 조회 메소드 추가
    public List<Users> getAllUsers() {
        return usersRepository.findAll();
    }

이를 페이징을 추가하여 변경해보았다

public Page<Users> getAllUsers(int page, int size) {
    Pageable pageable=PageRequest.of(page,size);
    return adminRepository.findAll(pageable);

PageRequest.of(Page,size)는 페이지 번호와 페이지 크기를 지정한다
페이지 번호는 변수로 받고 페이지 크기는 10으로 고정하는 방식을 사용하고 있다
Pageable 객체를 adminRepository.findAll(pageable)에 전달하면 JPA가
페이징 처리된 결과를 Page 타입으로 반환한다

여기서 실수한 점!!(오류가 난 이유)
adminRepository를 새로 생성하였다면 UserSerivce 클래스에도 adminRepository를
주입해야 한다

public class UserService {
   private final UsersRepository userRepository;
   private final PasswordConfig passwordConfig;
   private final AdminRepository adminRepository;  //  이 부분 추가

Paging 처리 과정

1. 컨트롤러 단계
클라이언트로부터 페이지 번호(page)와 페이지 크기(size)파리미터를 받는다
2. 서비스 단계
컨트롤러로부터 받은 페이지 번호와 크기로 Pageable 객체를 생성한다
Pageable pageable=PageRequest.of(page,size);
Pageable 객체를 리포지터리 매서드에 전달한다
3. 리포지터리 단계
findAll(pageable) 같은 매서드가 Pageable 객체를 받아 데이터 쿼리에 페이징 조건을
추가한다
JPA는 이 정보를 기반으로 SQL의 LIMIT,OFFSET 등을 사용해 해당 페이지에 맞는 데이터만 조회한다
조회 결과와 페이징 정보를 담아 Page 객체를 생성해서 반환한다
4. 컨트롤러 결과 전달

profile
비전공자로써 금융 IT 취업에 도전하고 있습니다.

0개의 댓글