본문 바로가기

좋아하는 것_매직IT/1.spring

querydsl 관련 자주 사용하는 fetch 깔끔하게 정리하기

반응형

출처 : querydsl 홈페이지


블로그 목적 :

SpringBoot 프로젝트 개발시 사용하는 querydsl 관련 fetch 에 대해서 정리해본다.

블로그 요약

SpringBoot 프로젝트를 수행관련 주로 사용하는 fetch, fetchOne 등등 에 대해서 깔끔하게 정리해본다.

블로그 상세 내용


우선 querydsl 이란 무엇인지 알아볼까요?
구글의 검색창에 아래와같이 "querydsl" 이라고 검색을 해볼께요..

위와 같이 querydsl 홈페이지가 나오는데, 해당 홈페이지에 들어가보겠습니다. 
들어가보시면, 아래와 같은 웹페이지를 보실 수 있는데요..

출처 : querydsl 홈페이지


아래는 querydsl 관련 가장먼저 만나는 문구입니다.

Unified Queries for Java.
Querydsl is compact, safe and easy to learn.

즉, 우리말로 해석하자면...
Java용 통합 쿼리, Querydsl은 작고 안전합니다.
그리고 배우기 쉽습니다.
라고 해석할 수 있는데요....

한마디로 말해서,
 - 쿼리를 자바코드로 작성할 수 있게 도와주는 기술이고, Spring Data JPA로 해결하지 못하는 복잡한 쿼리/동적 쿼리를 해결할 수 있다는 장점을 가진 녀석(?)이라고 머릿속에 넣어두시면 될것 같다.
 - 현재 기준(2022년 5월13일) 릴리즈는 5.0 까지 진행된것으로 보이네요..

출처 : querydsl 홈페이지

5.0.0 버전이 release 되었는데 어떤 변경사항이 있었는지 살펴보겠습니다. 

먼저 가장 큰 변화는 자바 8버전 미만은 이제 지원하지 않는 것 인데요, 자바 7버전 이하를 사용하는 분들은 4.x.x 버전을 계속 사용해야 합니다.
그리고 joda-time과 google의 guava 런타임 dependency를 제외하였다고 하네요..
(그외에 자세한 내용은 해당 querydsl 홈페이지를 참고부탁드릴께요~)

그리고, Querydsl 를 사용하기 위해서는  만약 gradle 을 사용한다면, build.gradle 에 아래 의존성을 설정해줘야 합니다.

 

(이점 꼭 머릿속에 넣어두시고요...)


본격적으로, 제가 프로젝트를 참여하면서 자주 사용했던, 아래 내용에 대해서 중점적으로 리마인드 해보겠습니다.
 - fetch 관련 내용 정리

우선, fetch를 이용해서 querydsl 의 결과를 반환할수 있는데 여러가지 방법이 있습니다.
(보통 5가지 정도로 구분가능한데요..)
 - fetch / fetchOne / fetchFirst/ fetchResults/fetchCount 

우선, fetch() 를 시작으로 알아보실까요?
1. fetch() :  리스트로 결과를 반환하는 방법입니다. (만약에 데이터가 없으면 빈 리스트를 반환해줍니다.)
2. fetchOne() :단건을 조회할 때 사용하는 방법인데요. ( 결과가 없을때는 null 을 반환하고 결과가 둘 이상일 경우에는 NonUniqueResultException을 던집니다.)
3. fetchFirst() : 처음의 한건을 쿼리해서 가져오고 싶을때 사용하고요..
4. fetchResults() : 해당 내용은 페이징을 위해 사용될 수 있습니다. 페이징을 위해서 total contents를 가져오고요.
5. fetchCount() : count 쿼리를 날릴 수 있다.

위의 개념 정도 머릿속에 넣어두시고, 자세한것은 직접 검색및 찾아보시면서 구현해 보시면 쉽게 하실 수 있으실거예요...

이중에서 저는 개인적인 프로젝트를 진행하면서...
fetch 와 fechOne 을 사용했습니다. 소스를 한번 보시면 아래와 같습니다. 

1) fetch 사용관련 내용을 공유드리면 아래와 같은데요..

우선, 테이블은 아래와 같고요...

해당 테이블의 entity입니다.  (참고로, jpa buddy를 사용해서 entity를 만들었습니다..)



간단하게 설명드리면 해당 테이블에서 등록일자와 버전정보를 groupBy 해서 가져오는 쿼리를 querydsl 로 구현한내용입니다.

결과는 아래와 같겠죠? 

아래는 Swagger 로 테스트한 결과입니다.


(개인적으로 정상적으로 잘 구현되어서 기분이 좋았습니다. ^^;)


이어서, fetchOne 활용기를 공유합니다.

2) fetchOne관련 간단하게 설명드리면, 해당 테이블에서 id, 버전정보, 등록일자, 메시지를 가져오는 쿼리를 querydsl로 구현한 내용입니다. 

테이블 스키마는 동일하고요...
결과는 아래와 같습니다.

아래는 Swagger 로 테스트한 결과입니다.


아무튼, 이번 프로젝트를 진행 하면서 querydsl 를 사용해서 구현을 했는데요...
querydsl 를 사용하면서, 아래내용을 제 머릿속에 각인 시켜두게 되었네요...^^;

 - 쿼리를 자바코드로 작성할 수 있게 도와주는 기술이고, Spring Data JPA로 해결하지 못하는 복잡한 쿼리/동적 쿼리를 해결할 수 있다는 장점을 가진 녀석(?) 이구나!!

그럼 결론을 정리해 보겠습니다.

결론 

하나, querydsl 은 쿼리를 자바코드로 작성할 수 있게 도와주는 기술이고, Spring Data JPA로 해결하지 못하는 복잡한 쿼리/동적 쿼리를 해결할 수 있다는 장점을 가짐.
 둘, 현재 기준(2022년 5월13일) 릴리즈는 5.0 까지 진행된것으로 보이네요..
 셋, fetch를 이용해서 querydsl 의 결과를 반환할수 있는데 여러가지 방법이 있습니다.
(보통 5가지 정도로 구분가능한데요..사용자가 필요한 기능을 구현하시면 될것 같네요..)
 - fetch / fetchOne / fetchFirst/ fetchResults/fetchCount 

728x90
300x250