221126 TIL 게시판에서 원하는 게시물 찾기

2022. 11. 26. 23:15·성장이야기/TIL

오늘은 게시판 서비스에 없으면 불편한 기능인 검색 기능을 구현하려고 한다.

 

게시판에 검색기능이 없다고 생각해보자 만일 게시판에 게시글이 3, 4개 정도 있으면 찾으려는 게시물을 한눈에 찾을 수 있겠지만 게시물이 20, 30개만 돼도 찾으려는 게시물 하나를 찾기 위해서 2페이지 가서 찾고 3페이지 가서 찾는 과정이 필요하다. 

사용자 입장에서 이는 매우 불편하기 때문에 게시판에서 검색기능은 필수라고 생각이 된다.

 

JPA에서 검색 기능

검색을 하기 위해선 검색한 단어가 포함된 게시글들을 불러와야 하는데 JPA를 사용하면 편리하게 Repository의 메서드 이름으로 쿼리를 지정해서 찾을 수 있다.

List<Post> posts = postRepository.findByTitleContaining(keyword);

위와 같이 Containing을 By이후에 붙여주면 SQL의 Like 검색이 된다.

  •  SQL의 LIKE 연산자는 ‘~와 같다’라는 의미로 특정 문자열이 포함되어있는지 조회할 때 사용한다.

 

즉 PostRepository의 Title 칼럼에서 파라미터로 전달된 keyword가 포함되어있는 post들을 찾아서 반환한다.

 

Title뿐만 아니라 게시글의 제목이나 작성자 등등 찾고싶은 칼럼의 이름을 By이후에 써주고 Containing만 붙여주면 파리 미터로 전달해준 키워드가 포함된 게시물들을 찾아준다.

 

 

구현 코드

1. Controller

 

프론트엔드에서 찾고 싶은 게시물의 제목을 검색해서 params로 넘겨주면 controller에서 검색 키워드를 받아 서비스로 넘겨준다.

 

 

2. Service

 

서비스에서는 해당 키워드가 포함된 게시물들을 findByTitleContaining 메서드를 이용해 postRepository에서 찾는다.

 

3. Repository

 

 

위의 로직들을 거치면 제목에 원하는 키워드가 포함된 게시물들을 리스트로 받아 볼 수 있다. 이제 검색 결과가 여러 개일 때를 대비해 페이징 처리까지 해주면 깔끔할 것 같다.

 

 

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

 

'성장이야기 > TIL' 카테고리의 다른 글

221128 TIL 사용자 등급을 위한 enum클래스  (1) 2022.11.28
221127 TIL 검색 기능 구현 중 만난 문제 (pagination)  (0) 2022.11.27
221125 TIL OAuth 2.0 알아보기  (0) 2022.11.25
221124 TIL axios.delete 요청 시 데이터 전달하기  (0) 2022.11.24
221123 TIL columnDefinition으로 기본값 설정  (0) 2022.11.23
'성장이야기/TIL' 카테고리의 다른 글
  • 221128 TIL 사용자 등급을 위한 enum클래스
  • 221127 TIL 검색 기능 구현 중 만난 문제 (pagination)
  • 221125 TIL OAuth 2.0 알아보기
  • 221124 TIL axios.delete 요청 시 데이터 전달하기
seungjjun
seungjjun
  • seungjjun
    개발이야기
    seungjjun
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 성장이야기
        • TIL
        • 주간회고
      • Java
        • Spring
        • Spring Security
      • 트러블슈팅
      • Kafka
      • OS
      • Network
      • 메가테라
      • Database
      • Algorithm
      • Git
      • HTML
      • CSS
      • 독서
      • 컴퓨터 이해하기
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    주간회고
    항해플러스
    메가테라 주간회고
    graphQL
    항해99
    Til
    이커머스 프로젝트
    개발일지
    메가테라
    redis
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seungjjun
221126 TIL 게시판에서 원하는 게시물 찾기
상단으로

티스토리툴바