2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

queryDSL란? QueryDSL 설정방법, 설치 , 의존성 추가

2023. 6. 20. 17:46ㆍ[스프링 DB]/QueryDSL

 

[QueryDSL이란?]

 

QueryDSL은 하이버네이트 쿼리 (HQL : Hibernate Query Language)의 쿼리를 

타입에 안전하게 생성 및 관리 해주는 언어이다.

 

즉 스프링에서는 동적 쿼리를 작성할 때 정말 까다롭지 않을 수 없다.

 

동적쿼리를 짜기 위해서는 더러운 코드가 작성될 가능성이 크며

코드가 난잡해 질 가능성이 크다.

 

하지만 QueryDSL을 사용한다면 이 동적쿼리를 깔끔하게 해결할 수 있다는 장점이 있다.

 

 

 

QueryDSL의 장점 은 크게 몇가지 있다.

 

▶ 쿼리를 Java로 type - safe 하게 개발 할 수 있게 하는 프레임워크이다.

 

▶주로 Jpa 쿼리 (JPAL)에 사용된다.

 

▶ 복잡한 동적쿼리를 쉽게 작성할 수 있게 한다.

 

 

[QueryDSL의 동작 방식]

 

 

 

QueryDSL은 JPA와 함께 쓰는 프레임워크라 할 수 있는데

 

그 이유는 Jpa가 관리하는 엔티티 객체를 APT가 읽어서 쿼리용 객체를 만들어준다.

 

예를들어

 

Item이라는 Jpa 엔티티 객체가 있다고 한다면 QueryDsl을 사용한다면 이 객체를

 

QItem이라는 쿼리용 객체를 따로 만들어준다. 

 

 

 

[QueryDsl 사용방법]

 

QueryDsl은 사용방법은 크게 어렵지 않지만 설정이 조금 어렵다.

 

한번 설정방법을 보도록 하자.

 

dependencies {
   //QueryDsl의존성 주입
   implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
   implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
}

 

 

일단 dependencies에 이러한 의존성을 넣어야 한다.

 

또한 QueryDSL의 경우 옵션을 몇개 넣어야 하는데 

 

//Gradle에서 사용할 추가적인 task
//Q객체를 넣기위한 경로 
def querydslDir = "$buildDir/generated/querydsl"

//querydsl 추가 시작

querydsl {
   jpa = true
   querydslSourcesDir = querydslDir
}
sourceSets {
   main.java.srcDir querydslDir
}
compileQuerydsl{
   options.annotationProcessorPath = configurations.querydsl
}
configurations {
   compileOnly {
      extendsFrom annotationProcessor
   }
   querydsl.extendsFrom compileClasspath
}
//querydsl 추가 끝

 

디펜던시 밑에 이 옵션을 넣도록 하자.

 

 

다 넣었으면 맨위부분에 

 

buildscript {
   //Add
   ext {
      queryDslVersion = "5.0.0"
   }
}

 

이러한 코드를 추가하면 QueryDSL의 의존성 추가는 끝이다.

 

사진으로 본다면 이러한 느낌일 것 이다.

 

 

 

[주의] 

 

QueryDsl은 스프링부트의 버전마다 설정방법이 다르다.

그렇기 때문에 이 의존성 추가 부분은 스프링 3.0미만 버전까지 적용되는 것 이다.

만약 3.0이상의 스프링부트를 사용한다면 QueryDsl의 설정방법이 다르기 때문에

오류가 뜰 수 있다.

 

 

 

[QueryDSL]의 사용

 

QueryDSL의 의존성 주입이 끝난다면 여기서

 

Build설정에 따라 설정하는 방법이 다르다.

 

우리는 QueryDSL을 의존성을 주입받았기 때문에

 

이제는 APT로 Q객체를 만들어줘야 한다.

 

 

 

필자의 경우는 이미 QueryDsl을 쓰고있기 때문에 Q객체가 있지만

설정을 아직 덜 마친 사람은 이 Q객체가 존재하지 않는다.

 

그렇기때문에 이 객체를 만들어줄려면 추가적인 설정이 더 필요하다.

 

 

[Build가 Gradle일 경우]

 

 

 

 

여는 방법은 컨트롤 + shift + S로 열면된다.

 

만약 이 Build가 Gradle일 경우는 

 

 

 

Ctrl + E 누른 후 

 

 

 

Gradle 클릭을 한다.

 

 

 

Gradle을 누르면 이러한 화면이 나올텐데

 

Clean 누른 후 -> Compile.java를 클릭하면 컴파일이 된 후

 

 

 

이러한 Query객체가 생길 것 이다.

 

만약 생기지 않는다면 설정을 잘못한 것 이기에 꼼꼼히 해보길 바란다.

 

 

 

[인텔리제이로 실행할 경우]

 

 

인텔리제이로 통해 실행할 경우 그냥

 

 

 

 

프로젝트로 빌드하거나 IDE를 빌드 시켜주면 쿼리 객체가 생성될 것 이다.

 

이렇게 Q객체가 생성되었다면 QueryDsl을 사용할 준비가 완료된 것 이다.

 

QueryDSL의 사용방법이 궁금하다면 여기를 참고하면 될 것 이다.