[HEY-TOSS-ME] 상품 필터링

허진혁·2023년 3월 16일
0

Jpa sepcification 사용 배경

프로젝트에서 상품 리스트를 조회 할 때

Page<ItemDto> function(int 페이지 수, int 페이지 크기, String 지역, String 상품기한, String 검색제목, String 카테고리)

위와 같이 많은 검색 필터 조건이 있다.
단순히 모든 리스트를 보내는 것이었다면

List<ItemEntity> list = repository.findAll();
list.stream().filter(item -> item.region.equal(region)...

과 같이 직접 필터를 해주어도 되지만

  1. 페이지 객체로 리턴할 것
  2. 필터 조건이 Optional parmeter이기 때문에 각 조건에 맞게 필터링 할 것

이라는 조건으로 코드의 가독성이 떨어지는 문제점이 발생했다.
그래서 검색 중 동적 쿼리를 사용할 수 있도록하는 라이브러리가 있다는 것을 찾았고 이를 활용하기로 했다.

JPA Specification에 대한 대안

Jpa Specification 같은 경우 검색 조건의 확장성을 고려했을 때 그다지 좋은 선택은 아니다 그래서 그에 대한 대안은 아래와 같다.

QueryDSL : 정적 타입을 이용해서 SQL 등의 쿼리를 생성해주는 프레임워크
Elastic search : 일래스틱서치는 루씬 기반의 검색 엔진

profile
멈추지 않는 개발자입니다.

0개의 댓글