paging 을 좀더 영리하게 처리하기
기존에 paging 을 page를 이용해서 처리하고 있었는데, 오늘 적용 중에 팀원으로 부터 좋은 피드백을 받았다.
- 먼저, 나는 size, page, isAsc, sortBy 등을 DTO로 만들어서 사용중이었다. 하지만, 굳이 DTO를 만들필요없이, Pageable을 곧바로 DTO처럼 만들어서 사용 할 수 있다는 사실을 알았다. size, page, isAsc, sortBy 중 없는것이 있으면, 자동적으로 스킵하고 pageable을 만들어서 곧바로 repository에 넘길 수 있다.
- page를 사용하게 되면, 가장 큰 이슈가 풀스캔을 이용해 total 레코드 수를 불러온다는 것이다. 이것은 매 페이지 요청마다 전체 레코드 수를 세는 로직을 수행함으로서, 디비에 많은 부하를 준다. JPARepository는 Page외에도 Slice, List와 같은 형태도 사용할 수 있다. 이것을 사용하게 되면, total 레코드를 사용하지 않고, 그에 따라 불필요한 count쿼리가 날라가는 것을 방지할 수 있다.