프로젝트에서 상품 리스트를 조회 할 때
Page<ItemDto> function(int 페이지 수, int 페이지 크기, String 지역, String 상품기한, String 검색제목, String 카테고리)
위와 같이 많은 검색 필터 조건이 있다.
단순히 모든 리스트를 보내는 것이었다면
List<ItemEntity> list = repository.findAll();
list.stream().filter(item -> item.region.equal(region)...
과 같이 직접 필터를 해주어도 되지만
이라는 조건으로 코드의 가독성이 떨어지는 문제점이 발생했다.
그래서 검색 중 동적 쿼리를 사용할 수 있도록하는 라이브러리가 있다는 것을 찾았고 이를 활용하기로 했다.
Jpa Specification 같은 경우 검색 조건의 확장성을 고려했을 때 그다지 좋은 선택은 아니다 그래서 그에 대한 대안은 아래와 같다.
QueryDSL : 정적 타입을 이용해서 SQL 등의 쿼리를 생성해주는 프레임워크
Elastic search : 일래스틱서치는 루씬 기반의 검색 엔진