221126 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