Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

coyojo10의 개발블로그!

[개인 프로젝트] 앨범 목록 불러오기 API 만들기 본문

백엔드

[개인 프로젝트] 앨범 목록 불러오기 API 만들기

coyojo 2023. 4. 20. 11:20

💡 입출력 정보 확인 

      -  API 문서에서 다음과 같은 입력 정보와 출력 정보를 확인하기

 

 

   입력

 

 

출력

💡 Controller 구조 잡기

...
@RestController
@RequestMapping("/albums")
public class AlbumController {
...	
		@RequestMapping(value="", method = RequestMethod.GET)
    public ResponseEntity<List<AlbumDto>>
    getAlbumList(@RequestParam(value="keyword", required=false, defaultValue="") final String keyword,
                 @RequestParam(value="sort", required=false, defaultValue = "byDate") final String sort) {

    }
}
요소  이유
URL value = " " 호출 URL이 단순 /albums 이고 이미 AlbumController에서 정의해줬으니, 추가 경로가 없을 경우 해당 메서드로 들어온다.

앞서 만든 앨범 생성하기 API랑 URL은 같지만 HTTP 메서드가 다르기때문에 가능하다. 
HTTP RequestMethod.GET API 문서에서 GET으로 정의
입력 타입 @RequestParam(value="keyword", required=false, defaultValue="") final String keyword,

@RequestParam(value="sort", required=false, defaultValue = "byDate") final String sort
Query String으로 입력값을 keyword,sort를 받게 된다.

required = false 는 필수 값이 아니라는 의미 이고 defaultValue는 Client에서 입력값이 없을 떄 설정되는 기본 값이다.

출력 타입  ResponseEntity<List<AlbumDto>> 위의 출력 JSON을 보면 Array 안에 앨범 정보가 들어있는데 대표 썸네일 이미지 4개를 제외하고는 기존 AlbumDto 필드값이랑 동일하다. 이런 경우 AlbumDto에 thumbUrl 필드를 추가할 수 있다.

그래서 새로운 Dto를 정의해주는 대신 기존 코드를 활용하는 방법으로 진행한다.

 

 

💡 Service 로직 관련

날짜와 앨범명 기준으로 정렬할 수 있는데, 입력된 정렬 기준에 맞게 DB에 쿼리를 보내서 정렬된 값을 가져온다.

  • 날짜 기준 정렬, 앨범명 기준 정렬로 나눠서 별도로 repository 호출해서 앨범 도메인 리스트를 반환받는다.
  • AlbumRepository에 사용자 정의 메서드 추가 
  • 앨범 도메인 리스트를 DTO 리스트로 매핑한다
  • 각 앨범마다 가장 최신 업로드된 이미지 4장 썸네일 url DTO에 필드값 입력
  • 앨범 DTO 리스트 반환 

💡 Album 검색/ 정렬 Repository 메서드 추가

 어떤 Repository 메서드가 필요한지 분석

   -  검색 키워드를 받는다 

         -> 앨범명에 검색 키워드가 포함되어 있으면 반환한다.

   -  정렬 기준을 받는다.

        -> ByName은 전체 DB를 조회하여 앨범명을 오름차순으로 받는다

        -> ByDate는 전체 DB를 조회해 날짜 최신순으로 받는다. 

 

@Repository
public interface AlbumRepository extends JpaRepository<Album, Long> {
    List<Album> findByAlbumNameContainingOrderByCreatedAtDesc(String keyword);

    List<Album> findByAlbumNameContainingOrderByAlbumNameAsc(String keyword);
}