< Dev-Kidult />

Spring boot JPA Specification + Spring filter 파라미터로 쉽게 조회하기 본문

개발/Back-end

Spring boot JPA Specification + Spring filter 파라미터로 쉽게 조회하기

개른이 2022. 4. 21. 18:28

스프링으로 개발을 하다보면 대부분이 CRUD 개발을 하는것일것이다.

 

그 중 `R` 중에 List를 조회하는쪽을 개발하다보면 기획자의 요구사항에 맞게 많은 필터(검색조건)에 맞춰서 조회를 하는 경우가 생길것이다.

 

기존의 경우라면 검색 할 내용이나 여러 조건들을 파라미터로 받아서 서비스단에서 처리를 하였을 것이다.

 

하지만 지금부터 아래내용을 적용한다면 파라미터로 쿼리를 쓰듯이 써서 넘긴다면 아주 쉽게 해당 내용을 조회 할 수 있다.


https://github.com/turkraft/spring-filter

 

GitHub - turkraft/spring-filter: Painless filtering library for JPA entities and MongoDB collections. Smoothly integrates with S

Painless filtering library for JPA entities and MongoDB collections. Smoothly integrates with Spring APIs. - GitHub - turkraft/spring-filter: Painless filtering library for JPA entities and MongoDB...

github.com

 

보면은 아직 별이 많거나 같이 개발하는사람이 있거나 하는건 아니지만 꾸준한 개발 및 배포 그리고 버전업이 이뤄지고 있으며, 써보니 참 괜찮은 라이브러리인것 같다.


해당 예제는 깃허브에 업로드되어있다. 자세한 내용은 깃허브를 참조하자.

먼저 예를 들어 유저의 나이가 20살 이상이며, 성이 김씨 혹은 이씨로 시작하는 조건으로 조회를 한다고 생각해보자.

userRepository.findAll(QUser.user.age.goe(20).and(QUser.user.name.startsWith("김").or(QUser.user.name.startsWith("이"))))

이전처럼 querydsl을 쓴다면 위처럼 쓰고있었을것이다.

아니면 혹시 더 복잡한 방법으로 조회를 하고 있었을것이다.

 

하지만 위 Spring filter를 적용하게 된다면 API 요청시에 해당내용을 담아서 요청만 하면 된다.

GET api/v1/users?filter=age>:20 and (name~'김%' or name~'이%')

내생각엔 기존의 서비스코드보다 훨씬 심플하다.

 

쿼리의 WHERE절을 생각하고 쓰면 원하는 파라미터를 만드는데는 큰 시간이 필요하지 않을것이다.

위 예제에 쓴것 외에도 Operator는 not까지 3개이고 Comparator도 콜렉션까지 지원하며, 몇몇함수도 이미 만들어져있다.

 

적용법 및 자세한 사용법은 다음 이시간에... 깃허브 예제 봐주세요

 

반응형