오늘은 어드민 기능 중 인기 게시글을 파악하기 위한 통계 관련 기능을 구현하는 것을 목표로 했다.
조회수가 가장 높은 게시글 순위, 댓글이 가장 많이 달린 게시글 순위, 좋아요를 가장 많이 받은 게시글 순위 이렇게 세 가지 순위를 통계자료로 보여주기로 기획했었다.
조회수가 가장 높은순으로 게시글 3개를 어떻게 가져올까 생각하다 이전에 동료 한분이 평점순으로 장소를 가져오려고 했던 게 생각이 났다.
조회수 순으로 가져오는거랑 평점순으로 가져오라 방법은 똑같을 거라고 생각을 해 아샬 님이 평점순으로 장소를 가져오는 방법에 대해 답변을 주신 메가 오버플로우를 찾아봤는데 findTop3 OrderBy~~ 이런 형태로 가져올 수 있다는것을 알게 되었다.
바로 아래와 같이 코드를 작성했다. Hit(조회수)를 기준으로 가장 높은 순서대로 3개를 가져오는 것이다.
List<Post> posts = postRepository.findTop3OrderByHitDesc()
그랬더니 쿼리를 만드는데 실패했다는 QueryCreationException에러가 발생했다.
그 이유를 찾아보니 JPA Repository 메서드를 잘못 작성해서 쿼리를 만드는데 실패했던 것이었다.
잘못된 코드 -> findTop3OrderByHitDesc()
수정된 코드 -> findTop3ByOrderByHitDesc()
코드를 수정하고 다시 실행해보면 아래와 같이 조회수 순대로 3개의 게시글만 가져오는 것을 확인할 수 있다.
물론 3개 이상의 게시글을 가져오고 싶으면 Top 바로 다음에 원하는 만큼의 숫자를 적어 쿼리 결괏값 크기를 제한할 수 있다.
만약 숫자를 적지 않는다면 기본값인 1개를 가져온다고 한다.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.limit-query-result
'성장이야기 > TIL' 카테고리의 다른 글
221208 TIL useLocalStorage (0) | 2022.12.08 |
---|---|
221207 TIL 어떤 게시판에 게시글이 가장 많을까? (0) | 2022.12.07 |
221205 TIL 내 채팅과 다른 사용자의 채팅 구분하기 (0) | 2022.12.05 |
221204 TIL 등업 신청 현황 확인하기 (0) | 2022.12.04 |
221203 TIL 하위 게시판 생성하기 (1) | 2022.12.03 |