[TIL] 23.01.17 사과농장 쇼핑몰(1) 상품 CRUD 기능, 페이징처리

hyewon jeong·2023년 1월 17일
0

TIL

목록 보기
71/138

개발 진행에 따른 기록 작성(★★★★★)

판매상품조회 페이징처리

1. 어떠한 이유로 해당 기능을 사용하였는지

게시판은 만들어보지 않았을 때 글 전체를 다 가져오는 줄 알았다.

하지만 그렇게한다면 사이트는 엄청나게 느려질 것이고, 글이 많으면 많아질수록 굉장히 과부하가 걸릴 것이다.

그렇기 때문에 게시판은 글 개수를 정하여 예시로 10개의 글 개수를 보여준다고 하면 총게시글을 10개씩 보여준다면 몇 페이지가 만들어질까를 적용해서
📢 페이징을 할 때마다 그 구간에 맞는 글 정보를 가져오기 위해 페이징을 적용하였다.

👍 Spring Data JPA에서 Pageable 를 활용한 Pagination

많은 게시판은 모든 글을 한 번에 보여주지 않고 페이지를 나눠 쪽수별로 제공한다. 정렬 방식 또한 설정하여, 보고 싶은 정보의 우선순위를 설정할 수도 있다. 이처럼 정렬 방식과 페이지의 크기, 그리고 몇 번째 페이지인지의 요청에 따라 정보를 전달해주는 것이 Pagination 이다.

2. 해당 기능의 코드는 어떠한 로직을 가지고 있는지

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();
    }
    

    }
  1. 코드를 작성하며 발견된 버그오류는 어떠한게 있었는지 그리고 어떻게 해결하였는지.
    구글링 하며 찾아본 pageable 을 사용한 코드를 공부하다보니 , 복잡해지고, 내가 원하는 코드가 되지 않아 , 단순화하여 pageable 의 속성을
    파악후 별도로 pageableSetting 메서드로 설정하여 , 원하는 페이징이 구현 됐습니다.

참고
pageable

profile
개발자꿈나무

0개의 댓글