감사쟁이야
감사쟁이의 성장기록
감사쟁이야
  • 분류 전체보기 (130)
    • Java-Spring (0)
    • ComputerScience (0)
    • Project (64)
      • TIL, WIL (57)
      • Project Retrospect (7)
    • Problem Solving (63)
    • Book Review (1)
    • Culture & Discovery (0)
    • Daily Log (2)

블로그 메뉴

  • 홈
  • 깃허브
  • 방명록
hELLO · Designed By 정상우.
감사쟁이야

감사쟁이의 성장기록

TIL(45) 21-12-03 : Spring에서 게시글 Pagination 처리하기
Project/TIL, WIL

TIL(45) 21-12-03 : Spring에서 게시글 Pagination 처리하기

2021. 12. 27. 02:43

Facts

오늘은 게시글 전체와, 게시글 검색결과를 Pagination처리를 해주었다.

Findings

Pagination 처리

  • 🤔 왜 Pagination처리를 해줄까?
    만약, 검색을 할 때, 검색 결과 값이 수천만 개의 문서를 Json 형식으로 받는다면?
    메모리가 감당이 되지 않을 것이다.
    그러므로, Pagination 처리는 필수적이다.
    Youtube도 다 Pagination처리를 해서 제공한다.
    무한 스크롤로 보이겠지만, 어느 정도 스크롤을 내리면, 로딩 후에 데이터를 제공한다.
    이것도 Pagination 처리를 해줘서 제공해주는 것이다.

  • TilRepository
    pageable이라는 라이브러리를 사용하면, Page object 형식의 게시글들을 가져올 수 있다.
public interface TilRepository extends JpaRepository<Til, Long> {
    Page<Til> findAllByOrderByIdDesc(Pageable pageable);
    Page<Til> findAllByUser(User user, Pageable pageable);
    Page<Til> findAllByTilTitle(String til_title, Pageable pageable);
    Page<Til> findAllByTagsName(String keyword, Pageable pageable);
}​
  • TilService
public Page<Til> getTilList(int page, int size) {
        Pageable pageable = PageRequest.of(page, size);
        return tilRepository.findAllByOrderByIdDesc(pageable);
}

 public Page<Til> SearchTil(int page, int size, String keyword, String setting) {
        Pageable pageable = PageRequest.of(page, size);

        if(setting.equals("제목")) {  return tilRepository.findAllByTilTitle(keyword, pageable);    }
        else if(setting.equals("작성자")) {
        	 User user = userRepository.findByUsername(keyword)
                    .orElseThrow(() -> new UsernameNotFoundException("해당 작성자 없음"));
            return tilRepository.findAllByUser(user, pageable);
        }
        else {  return tilRepository.findAllByTagsName(keyword, pageable);    }
}
  • TilController
    client로 부터, 조회하고 싶은 게시글의 페이지와 한 페이지당 게시글의 수를 받는다.
    client에게 Pagination 처리된 결과를 TilListDto에 담아 전달한다.
@GetMapping("/til_board")
public TilListDto getTilList(@RequestParam int page, @AuthenticationPrincipal UserDetailsImpl userDetails) {
	page --;
	int size = 10;
    
	Page<Til> tils = tilService.getTilList(page, size, userDetails.getUser());
	TilListDto tilList = TilListDto.builder()
                .tils(tils)
                .page(tils.getNumber())
                .size(tils.getSize())
                .totalPages(tils.getTotalPages()).build();
	return tilList;
 }
@GetMapping("/til/search")
public TilListDto searchTil(@RequestParam int page, @RequestParam String keyword, @RequestParam String setting, @AuthenticationPrincipal UserDetailsImpl userDetails){
	page --;
	int size = 10;
    
	Page<Til> tils = tilService.searchTil(page, size, keyword, setting, userDetails.getUser());
	TilListDto tilList = TilListDto.builder()
                .tils(tils)
                .page(tils.getNumber())
                .size(tils.getSize())
                .totalPages(tils.getTotalPages()).build();
	return tilList;

}
  • TilListDto
    Pagination 처리된 결과를 전송할 객체 TilListDto를 만들어주었다.
    Pagination 처리된 결과의 til과 til의 해당 page, size, totalPages를 담아 client에게 보내준다.
@NoArgsConstructor
@Builder
@Data
@AllArgsConstructor
public class TilListDto {

    private Page<Til> tils;

    private int page;
    private int size;
    private int totalPages;

}​

'Project > TIL, WIL' 카테고리의 다른 글

TIL(47) 21-12-07: ElasticBeanstalk으로 백엔드 아키텍처 구성하고 GithubAction으로 프로젝트 배포  (0) 2021.12.27
TIL(46) 21-12-06: S3와 CloudFront로 프론트엔드 인프라 구성하기  (0) 2021.12.27
TIL(44) 21-11-30 : S3와 CloudFront를 이용한 사진 업로드 구현하기  (0) 2021.12.25
TIL(43) 21-11-28 : Spring Secruity 사용하여, 인증 인가 구현하기  (0) 2021.12.25
TIL(42) 11/22 - 11/27 : TDP 사이트 Flask 👉🏻 Spring  (0) 2021.12.22
    'Project/TIL, WIL' 카테고리의 다른 글
    • TIL(47) 21-12-07: ElasticBeanstalk으로 백엔드 아키텍처 구성하고 GithubAction으로 프로젝트 배포
    • TIL(46) 21-12-06: S3와 CloudFront로 프론트엔드 인프라 구성하기
    • TIL(44) 21-11-30 : S3와 CloudFront를 이용한 사진 업로드 구현하기
    • TIL(43) 21-11-28 : Spring Secruity 사용하여, 인증 인가 구현하기
    감사쟁이야
    감사쟁이야
    sunzero0116@gmail.com

    티스토리툴바