Skip to content

[FEATURE] - 최신 순, 조회수 순 정렬 구현 및 페이징 처리#50

Merged
polyglot-k merged 12 commits intoTaskSprints:developfrom
na0th:auction_product
Oct 2, 2024
Merged

[FEATURE] - 최신 순, 조회수 순 정렬 구현 및 페이징 처리#50
polyglot-k merged 12 commits intoTaskSprints:developfrom
na0th:auction_product

Conversation

@na0th
Copy link
Copy Markdown
Contributor

@na0th na0th commented Sep 13, 2024

  • 최신 순 정렬 구현 및 페이징 처리
  • 조회수 순 정렬
  • 상품 카테고리 별 조회

name: Pull Request
about: '풀 리퀘스트를 제출합니다.'
title: "[FEATURE] - [기능명] 또는 [FIX] - [버그 설명]"
labels: ''
assignees: ''


🆕 기능 추가 / 🔧 버그 수정

  • 최신 순, 조회수 순 정렬 및 페이징 처리 추가 및 쿼리 DTO 반환으로 수정

📋 변경 사항

  • 페이징 처리, 정렬 기능, 쿼리에서 엔티티 반환 -> DTO 반환 추가

🔍 테스트 사항

  • 기존 테스트에서 페이징, 정렬 , 쿼리 DTO 반환 관련 변경 코드에 맞게 테스트 수정

📄 관련 문서

📝 추가 사항

  • 정렬 조건에 따라 WHERE절이 동적으로 달라져야 하는 부분 처리하는 방법에 대해 고민이 필요(미완)
    예) 마감 임박 순 정렬은 경매 상태가 ACTIVE 해야 하므로 쿼리 WHERE절의 조건이 바뀜
    예) 경매 시작 임박 순 정렬은 경매 상태가 PENDING 이어야 하므로 쿼리 WHERE절의 조건이 바뀜

  • 쿼리에 USER, PRODUCT 외에도 PRODUCT_IMAGE까지 조인 되어야 할 것 같음(미완)

1. 최신순 정렬 구현
2: 쿼리에서 DTO로 변환
3. 페이징 처리

할 일 : 안 쓰는 메서드 삭제해야 함
조회수 순 구현
1 : 페이징, 정렬 처리에 맞게 테스트 수정
1. 구현 전에 만들었던 메서드들 삭제
@na0th na0th added this to the 경매 도메인 milestone Sep 13, 2024
@na0th na0th self-assigned this Sep 13, 2024
@na0th na0th linked an issue Sep 13, 2024 that may be closed by this pull request
7 tasks
1. 조회수 정렬 추가
1. 경매 ID로 조회 테스트 성공: 에서 나던
nullPointerException 해결
1. 검색 필터 쿼리 리팩토링
2. 상품 카테고리 엔드포인트 분리(Deprecated 처리)
3. Product를 create Auction쪽에 Product 매핑(양방향 매핑)
4. 테스트 코드 추가

미흡 :
- 쿼리스트링 부분 없는 값 예외처리 추가 필요
- AuctionResponse에 productCategory null값으로 넘어오는 거 처리 필요
1. 쿼리스트링중 ENUM에 없는 string에 대한 예외 처리
2. count쿼리 from절 product -> auciton 수정
1 : Response DTO를 Create, Update용 Response와 쿼리 Response용 DTO(Details)로 분리

2. 메인 쿼리와 컬렉션 쿼리 분리
=> 컬렉션과 함께 join 연산을 하면, 데이터 row가 증가하여 페이징 처리가 이상해짐

3. of 메서드에서 null 체크
-> product의 images는 null이 가능
+ auction.product나 product.auction이
일반적으로는 어렵지만 혹시 모를 경우 null이 들어올 수 있다.

4. queryDSL에서 JPAQuery부분과 query.fetch부분 코드 합침 + query 부분 주석 제거

주의할점 :
Details클래스 productImageUrls에 @Setter를 추가함
메인 쿼리와 컬렉션 쿼리를 분리했기 때문에 컬렉션을 다시 메인 쿼리에 담아주는 과정에서 setter가 필요해서 추가..
builder는 또다시 객체를 만들어서 옮기는 과정이 불필요하다 생각했음

이 부분 논의가 필요해보입니다.

미흡 :
user 생성 -> auction 생성 -> product 추가순으로 진행하면 검색 필터 사용해서  join 쿼리 조회가 잘 되지만, user 생성 -> auction 생성 후 검색 필터를 입력했을 시 예외처리가 미흡한 것 같다.
1. 기존 N+1 문제를 해결
- toOne관계는 fetch join, toMany(컬렉션)은 batch_size 설정으로 해결
2. 카운트 쿼리는 삭제하고, 어플리케이션에서 쿼리 결과 리스트의 size()를 이용하는 것으로 수정
3. 컬렉션 쿼리는 삭제
-컬렉션을 처리하지 않아도 Details의 of 메서드에서 컬렉션을 불러올 때 지연로딩으로 하이버네이트에서 자동으로 쿼리가 나가는 것을 직접 쿼리를 작성하는 것으로 변경하는 것이 좋아보임
4. 쿼리 결과의 반환 타입이 Page<Auction>으로 변경되어 테스트 코드를 수정
@polyglot-k polyglot-k merged commit f5b7468 into TaskSprints:develop Oct 2, 2024
@polyglot-k
Copy link
Copy Markdown
Member

👍 이상 없어서 일단 merge 했고, 노트북 고치고 나면 좀 디테일한 부분 리뷰해드릴게요

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment