blues_log
Published 2023. 6. 14. 20:55
2023-06-14 TIL (Spring 2주차 숙제) TIL&WIL

오늘 학습한 내용

  • Spring 입문 학습
  • 알고리즘 문풀

숙제 설명

  • Query Methods 기능을 사용하여 내용(contents)에 특정 키워드가 포함된 메모를 조회하는 API를 구현
  • 정렬 방법은 수정 시간을 기준으로 내림차순을 적용

 

해결 과정

Query Methods에서 특정 키워드가 포함(contains)되어있는 메소드를 정의하기 위해서 우선 열심히 검색을 해봤다.

 

참고한 블로그는 다음과 같다.

https://www.baeldung.com/spring-jpa-like-queries

 

그래서 작성한 Query Methods는 다음과 같다.

List<Memo> findAllByContentsContainsOrderByModifiedAtDesc();

Service는 다음과 같이 작성했고

public List<MemoResponseDto> getMemosByKeyword(String keyword) {
    // DB 조회
    return memoRepository.findAllByContentsContainsOrderByModifiedAtDesc(keyword).stream().map(MemoResponseDto::new).toList();
}

Controller는 다음과 같이 작성했다.

@GetMapping("/memos/contents")
public List<MemoResponseDto> getMemosByKeyword(String keyword) {
    return memoService.getMemosByKeyword(keyword);
}

 

이대로 실행하면 될 줄 알았는데 여러가지 에러가 ..

계속해서 코드를 보니 keyword라는 매개변수가 repository부터 controller까지 이어져서 처리가 되지 않았다.

즉 쿼리 메소드에서 파라미터를 적용하지 않았다.

 

쿼리 메소드에서 파라미터를 적용한다는 것은 where 절 뒤에 값을 동적으로 처리하는 것이다.

 

바꾼 메소드는 다음과 같다.

List<Memo> findAllByContentsContainsOrderByModifiedAtDesc(String keyword);

느낀점

 

Spring 학습을 시작한지 2일차인데 매우 어려운 것 같다..

알아야 할 내용도 많고 구조를 깊게 이해하려고하면 너무 복잡해지고 이해하기 어려운 것 같다.

 

그래도 포기하지 않고 꾸준히 노력해보자!