게시판에 페이지 기능을 구현하기 위해서는 화면단에서 기본적인 페이지 요청 정보를 컨트롤러에서 받아야 한다.보통 pageRequestVO를 통해서 컨트롤러에서 요청 정보를 받아 온다.

컨트롤러에서 받은 요청 정보는 서비스 레이어에서 PageRequest(Pageable인터페이스의 구현체)를 통해서 데이터 베이스에 요청할 정보를 생성한다.

페이지 요청 정보(PageRequest)를 통해 데이터 베이스에서 게시판 글정보를 가져온 다음 Page객체를 통해서 받는다.

요청 처리

	@GetMapping("/list")
	public void list(@ModelAttribute("pgrq") PageRequestVO pageRequestVO, Model model) throws Exception {
		Page<Board> page = service.**list(pageRequestVO);**
	
		model.addAttribute("pgntn", new PaginationDTO<Board>(page));
	}

서비스 구현

//페이지 번호,페이지당 항목 수를 기반으로 pageable 객체를 생성하고, 이를 기반으로 게시글을 가져오고 페이징된 게시글 목록을 가져온다.
	@Override
	public Page<Board> list(PageRequestVO pageRequestVO) throws Exception {
		int pageNumber = pageRequestVO.getPage() - 1;  //페이지번호-대부분 데이터 베이스 인덱스는 0부터 시작,따라서 하나씩 빼줘야 함
		int sizePerPage = pageRequestVO.getSizePerPage(); //페이지 당 항목 수 
		//interface              구현체
		Pageable pageRequest = PageRequest.of(pageNumber, sizePerPage, Sort.Direction.DESC, "boardNo");
		
		Page<Board> page = repository.findAll(pageRequest);
		
		return page;
  1. PageRequestVO 로 부터 pageNumber와 sizePerPage를 가져온다.

2)데이터 베이스에 요청하기 위해 JPA에서 는 Pageable 인터페이스를 제공하고 있으며,Pageable 구현체인 PageRequest객체를 생성한다.

Pageable pageRequest = PageRequest.of(pageNumber, sizePerPage, Sort.Direction.DESC, "boardNo");