-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BE] feat: 상품에 대한 리뷰 목록 조회 동적 쿼리 구현 및 API 성능 개선 #607
Conversation
61440e9
to
dec3256
Compare
This comment was marked as resolved.
This comment was marked as resolved.
dec3256
to
4332023
Compare
회의 결과JPA + Specification으로 동적 쿼리를 만들어 수정하기로 결정 |
backend/src/main/java/com/funeat/review/dto/SortingReviewDto.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
동적쿼리 구현 너무 멋집니다!!
코멘트 확인해주세요!!
backend/src/main/java/com/funeat/review/specification/SortSpec.java
Outdated
Show resolved
Hide resolved
backend/src/main/java/com/funeat/review/specification/SortingReviewSpecification.java
Show resolved
Hide resolved
LongTypeSortSpec -> LongTypeReviewSortSpec
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨슴다~!!👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dto 클래스에서 Boolean -> 기본형으로 바꾸면 될 것 같습니다!
제 pr 에 달렸던 코멘트인데 dto 클래스에 isXXXX 메시지 보단 getter 로 구현하고요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기나긴 목록 조회 개선 여정..
고생하셨습니다~~
Issue
✨ 구현한 기능
Criteria API
+Specification
사용)N+1 문제
기존: 최대 92개
productId
) 검증개선: 최대 14개
productId
) 검증태그 정보를 한 번에 가져오는건 해결할 수 있을지 모르겠네요
로그한 유저가 좋아요를 누른건
boolean
으로 가져오는데, 리뷰 태그를 가져오는건List
라서 전혀 감이 안잡혀요인덱스 설정
[리뷰 좋아요 기준 정렬 -
(product_id, favorite_count desc, id)
]favorite_count
는 나중에 스케줄러 적용할 예정이라 데이터INSERT
,UPDATE
주기가 느려서 적용할 수 있을 것 같아요desc
붙이는건 MySQL 8.0부터 생긴 기능인데,order by
에 맞게desc
적용하니까 성능이 좋아지더라구요[추가 예정 - 리뷰 작성 시간 기준 정렬 -
(product_id, created_at desc, id)
][추가 예정 - 리뷰 평점 기준 정렬 -
(product_id, rating, id)
](product_id, rating, id)
만 걸어줄지, 아니면product_id, rating desc, id)
도 걸어줄지 고민이 됩니다.테스트 방법 예시
localhost:8080/api/login/login/1
로 로그인 쿠키를 획득 (노션에 코드 있음)localhost:8080/api/products/1/reviews?sort=favoriteCount,desc&page=412346
는 기존 페이징 방식localhost:8080/api/future/products/1/reviews?sort=favoriteCount,desc&lastReviewId=4123460
는 바뀐 페이징 방식📢 논의하고 싶은 내용
그래서 프론트와 이야기한 후에 코드를 수정해야합니다
🎸 기타
테코톡으로 공부하는 분은 아래 순서로 간단하게 정리하면서 들으면 이해하기 좋을 것 같고, 추가적으로 공부할 내용으로 커버링 인덱스 적용할만한 상황이라면 적용하면 좋을 것 같습니다.
테코톡 공부 순서
추가적으로 공부하면 좋은 내용
최적화하다가 만난 내용
⏰ 일정