221206 TIL 조회수 순으로 게시글 가져오기

오늘은 어드민 기능 중 인기 게시글을 파악하기 위한 통계 관련 기능을 구현하는 것을 목표로 했다.
조회수가 가장 높은 게시글 순위, 댓글이 가장 많이 달린 게시글 순위, 좋아요를 가장 많이 받은 게시글 순위 이렇게 세 가지 순위를 통계자료로 보여주기로 기획했었다.
    
조회수가 가장 높은순으로 게시글 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