gony-dev 님의 블로그

[Querydsl] 초기 설정하기(Spring boot 3.x.x 이상) 본문

Querydsl

[Querydsl] 초기 설정하기(Spring boot 3.x.x 이상)

minarinamu 2024. 11. 17. 16:10

🔥 Querydsl란?

  • 스프링 부트 + 스프링 데이터 JPA만으로 해결할 수 없는 복잡한 쿼리나 동적 쿼리들을 다루고 발생하는 문제들을 해결하기 위해 Querydsl을 사용한다!
  • 쿼리를 자바 코드로 작성하여 문법 오류를 컴파일 시점에 잡아준다!
  • 특징
    • 동적 쿼리 문제 해결
    • 쉬운 SQL 스타일 문법으로 쉽게 학습도 가능하다.

🔥 Querydsl 초기 세팅

  • 이제 Querydsl를 사용하기 위해 필요한 기본 세팅들을 살펴보자!
  • Querydsl은 Spring boot 프로젝트 생성 시 지원되는 라이브러리가 아니기 때문에 build.gradle에 직접 추가해 주어야 한다.
//build.gradle

dependencies{
	// Querydsl 추가 (Spring boot 3.x 이상)
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

tasks.named('test') {
    useJUnitPlatform()
}

// querydsl 추가 시작
def querydslDir = "src/main/generated"

sourceSets {
    main.java.srcDir querydslDir
}
tasks.withType(JavaCompile).configureEach {
    options.getGeneratedSourceOutputDirectory().set(file(querydslDir))
}

clean.doLast {
    file(querydslDir).deleteDir()
}
// querydsl 추가 끝

라이브러리를 추가하고 빌드하면 다음과 같은 query 파일들이 생성된다!

🔥 QClass 생성 및 삭제

생성

  • 생성과 삭제 작업은 버튼 클릭만으로 완료할 수 있다!
  • Hello라는 엔티티를 생성하고 QHello를 만들기 위해 QClass를 생성하자.
  • Gradle -> Tasks -> other -> compileJava를 차례대로 실행해보자.

  • 순서대로 작업을 완료할 시 gradle에 설정한 경로인 src/main/generated에 QClass가 생성된다!

삭제

  • 삭제는 Gradle -> Task -> build -> clean을 실행하기만 하면 QClass의 경로에 있는 디렉토리와 파일이 모두 삭제된다.
  • 이때 주의할 점은 src/main/generated는 개발할 때 편의를 위해 사용되는 경로이므로, 실제 배포를 할 때 QClass들이 build 디렉터리의 entity와 같은 경로에 포함되기에 Docker와 같은 컨테이너에 generated 디렉토리를 COPY해서 넣을 필요는 없다.

🔥 Querydsl 검증하기

  • Test Class에서 두 가지의 경우가 정상 작동하는지 살펴보기 위해 간단한 테스트 코드를 작성하였다.
  • Querydsl Q타입이 정상 작동하는가?
  • lombok이 정상 작동하는가?

 

 

  • 이렇게 querydsl의 초기 설정과 검증에 대해 실습해보고 알아보았다.
  • 다음 시간에는 entity를 생성하고 이를 querydsl과 연동하면서 기본 문법들을 알아보도록 하겠다!

감사합니다~