11월 19일 화요일
AM 알고리즘 풀이, 발제
PM 팀플 구상
paging
페이징(Paging)
사용자에게 데이터를 제공할 때 전체 데이터 중의 일부를 보여주는 방식
여러개의 데이터를 한 페이지에서 출력 할 수 있는 한계를 지정하여 로딩 속도 및 데이터를 찾는 불편함을 없앨 수 있다.Page
- Pageable을 파라미터로 가져온 결과물은 Page 형태로 반환되며, Page를 사용한다면 대부분 다수의 row를 가져오기때문에 Page>의 형태로 반환한다.
Pageable
- Spring JPA에서 DB쿼리에 쉽고 유연하게 limit 쿼리를 사용할 수 있게 해준다. 특히 Pageable 타입의 변수를 넘기면 JPA가 DB에 접근해 데이터를 가져올 때 자동으로 limit을 붙여 데이터를 가져온다.
페이징 구현 순서
- Repository 수정
- Service 수정
- Controller 수정
- 페이징 기능 추가
Repository 메서드 추가
Page<Question> findAll(Pageable pageable);
Service 메서드 추가
public Page<Question> getList(int page){ List<Sort.Order> sorts = new ArrayList<>(); sorts.add(Sort.Order.desc("createDate")); Pageable pageable = PageRequest.of(page, 10, Sort.by(sorts)); return this.questionRepository.findAll(pageable); }
Pageable pageable = PageRequest.of(page, 10, Sort.by(sorts)); : 정적 팩토리 메소드를 사용하여 PageRequest를 생성
위에서 page는 조회할 페이지의 번호이고, 두번째 파라미터는 단일 페이지의 크기, 세번째 파라미터는 sort.by로 sort 객체를 의미한다.
PageRequest of 정적 메소드의 구조
public static PageRequest of(int pageNumber, int pageSize) { return of(pageNumber, pageSize, Sort.unsorted()); }
Controller 메서드 추가
@GetMapping("/list") public String list( Model model, @RequestParam(value="page", defaultValue="0") int page) { Page<Question> paging = this.questionService.getList(page); model.addAttribute("paging", paging); return "question_list"; }
GET방식으로 요청된 URL에서 page값을 가져오기 위해 @RequestParam(value="page", defaultValue="0") int page 매개변수가 list메서드에 추가된다.
https://velog.io/@dani0817/Spring-Boot-%ED%8E%98%EC%9D%B4%EC%A7%95Paging-%EC%A0%81%EC%9A%A9
https://congsong.tistory.com/26#2.-%ED%8E%98%EC%9D%B4%EC%A7%95-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0-%EA%B4%80%EB%A6%AC%EC%9A%A9-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0
팀플을 시작했다. 아직 많이 부족하지만 그만큼 더 열심히 해보자