[Photogram] 인기 페이지 구현

2022. 7. 16. 11:52·🚗 Backend Toy Project/Photogram
  • 이번시간에는 사용자가 좋아요 표시를 한 글들을 좋아요가 많은 순서대로 출력하여 보여주는 페이지를 구현해보려고 합니다.


📝 Repository

  • 이를 위해 먼저 아래와 같이 네이티브 쿼리를 작성해주었습니다.
package com.cos.photogram.domain.image;

...

public interface ImageRepository extends JpaRepository<Image, Long>{

	...
	
	@Query(value = "SELECT i.* FROM image i INNER JOIN (SELECT image_id, COUNT(image_id) like_count FROM likes GROUP BY image_id) c ON i.id = c.image_id ORDER BY like_count DESC", nativeQuery = true)
	List<Image> popular();
}
  • 해당 쿼리는 image 테이블과 likes 테이블을 조인하여 GROUP BY와 COUNT, ORDER BY를 통해 좋아요 개수에 따른 정렬을 수행한 뒤 image 테이블에 대한 정보만 뽑아내어 테이블을 구성합니다. 따라서 ImageRepository에서 해당 함수를 실행할 수 있습니다.

📝 Service

package com.cos.photogram.service;

...

@RequiredArgsConstructor
@Service
public class ImageService {

	private final ImageRepository imageRepository;
	
	...
	
	@Transactional(readOnly = true)
	public List<Image> popular() {
		return imageRepository.popular();
	}
}

📝 Controller

  • 해당 페이지가 요청될 때 Model 객체에 해당 페이지에 출력될 이미지들을 저장하여 View 페이지로 전달하는 방식을 사용하였습니다.
@GetMapping("/image/popular")
public String popular(Model model) {
    List<Image> images = imageService.popular();
    model.addAttribute("images", images);

    return "image/popular";
}

📝 View

  • View 페이지는 아래와 같이 구현되어있습니다.
<!--인기게시글 갤러리(GRID배치)-->
<div class="popular-gallery">
    <c:forEach var="image" items="${images}">
        <div class="p-img-box">
            <a href="/user/${image.user.id}"> <img src="/upload/${image.post_image_url}" />
            </a>
        </div>
    </c:forEach>
</div>

 

GitHub - Daegwon-Kim/SpringBoot-Photogram

Contribute to Daegwon-Kim/SpringBoot-Photogram development by creating an account on GitHub.

github.com

 

저작자표시 (새창열림)

'🚗 Backend Toy Project > Photogram' 카테고리의 다른 글

[Photogram] 댓글 구현  (0) 2022.07.17
[Photogram] 프로필 사진 변경  (0) 2022.07.16
[Photogram] 좋아요 구현하기  (0) 2022.07.15
[Photogram] 스토리 페이지  (0) 2022.07.14
[Photogram] 구독하기 - 구독 모달  (0) 2022.07.14
'🚗 Backend Toy Project/Photogram' 카테고리의 다른 글
  • [Photogram] 댓글 구현
  • [Photogram] 프로필 사진 변경
  • [Photogram] 좋아요 구현하기
  • [Photogram] 스토리 페이지
Baeg-won
Baeg-won
  • Baeg-won
    좋았다면 추억이고 나빴다면 경험이다.
    Baeg-won
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🍃 Spring, Spring Boot
        • 스프링 프레임워크 기초
        • 스프링 핵심 원리 - 기본편
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편
        • 스프링 MVC
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리..
      • 🥑 Web Technoloy
      • 🚗 Backend Toy Project
        • 스프링 부트 게시판
        • Photogram
        • Baeg-won Clothing Gallery
      • 🥇 Problem Solving
        • Breadth-First Search
        • Depth-First Search
        • Backtracking
        • Simulation
        • Two-pointer
        • Binary Search
        • Greedy
        • Dynamic Programming
        • Minimum Spanning Tree
        • Dijkstra
        • Floyd warshall
      • ☕ Java
        • 명품 자바 에센셜
        • Applications
      • 🍦 JavaScript
        • JavaScript 기초
      • 🐧 Linux
        • 이것이 리눅스다(CentOS 8)
      • 📟 Database
        • 혼자 공부하는 SQL
      • 🧬 Data Structure
      • 🎬 HTML
      • 🎤 Tech Interview
      • 📌 etc
        • Unity 2D Raising Jelly Game
        • C++
        • 영어 쉐도잉
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Baeg-won
[Photogram] 인기 페이지 구현
상단으로

티스토리툴바