기능
을 사용하였는지게시판은 만들어보지 않았을 때 글 전체를 다 가져오는 줄 알았다.
하지만 그렇게한다면 사이트는 엄청나게 느려질 것이고, 글이 많으면 많아질수록 굉장히 과부하가 걸릴 것이다.
그렇기 때문에 게시판은 글 개수를 정하여 예시로 10개의 글 개수를 보여준다고 하면 총게시글을 10개씩 보여준다면 몇 페이지가 만들어질까를 적용해서
📢 페이징을 할 때마다 그 구간에 맞는 글 정보를 가져오기 위해 페이징을 적용하였다.
많은 게시판은 모든 글을 한 번에 보여주지 않고 페이지를 나눠 쪽수별로 제공한다. 정렬 방식 또한 설정하여, 보고 싶은 정보의 우선순위를 설정할 수도 있다. 이처럼 정렬 방식과 페이지의 크기, 그리고 몇 번째 페이지인지의 요청에 따라 정보를 전달해주는 것이 Pagination 이다.
코드
는 어떠한 로직
을 가지고 있는지ProductConroller
//판매상품 조회
@GetMapping("/{pageChoice}")
public List<ProductResponse> getProducts(@PathVariable int pageChoice, @AuthenticationPrincipal UserDetailsImpl userDetails){
return productService.getProducts(pageChoice,userDetails.getUser());
}
ProductService
@Transactional
public List<ProductResponse> getProducts(int pageChoice, User user) {
Page<Product> products = productRepository.findAllByUserId(user.getId(),pageableSetting(pageChoice));
List<ProductResponse> productResponseList = products.stream().map(ProductResponse::new).collect(Collectors.toList());
return productResponseList;
}
private Pageable pageableSetting(int pageChoice) {
Sort.Direction direction = Sort.Direction.DESC;
Sort sort = Sort.by(direction,"id");
Pageable pageable = PageRequest.of(pageChoice-1,4,sort);
return pageable;
}
ProductRepository
public interface ProductRepository extends JpaRepository<Product, Long> {
Optional<Product> findByIdAndUserId(Long id, Long userId);
Page<Product> findAllByUserId(Long id, Pageable pageableSetting);
}
ProductResponse
@Getter
@NoArgsConstructor
public class ProductResponse {
private Long productId;
private String productName;
private int productPrice;
//재고
private int quantity;
private String productImage;
private String productDetail;
private Long productCategory;
public ProductResponse(Product product) {
this.productId = product.getId();
this.productName = product.getProductName();
this.productPrice = product.getProductPrice();
this.quantity = product.getProductQuantity();
this.productImage = product.getProductImage();
this.productDetail = product.getProductDetail();
this.productCategory = product.getProductCategory();
}
}
코드
를 작성하며 발견된 버그
나 오류
는 어떠한게 있었는지 그리고 어떻게 해결하였는지.참고
pageable