개발
home
☂️

Spring boot 3 버전에서 kotlin gradle에서 queryDSL 설정하기

Created
2023/06/20
Tags
Kotlin
Gradle
QueryDSL
SpringBoot 3
2023-06-20 @이영훈
Spring boot 3.x 버전으로 넘어오면서 kotlin gradle에서 queryDSL 설정하는 방법이 조금 변경되었습니다.
  Spring boot 2.x 버전을 사용하신다면, 아래의 글을 참고해주세요

Kotlin Gradle 파일

Spring boot 3 버전으로 넘어오면서 변경 사항을 정리해보면 다음과 같습니다
1.
JPAAnnotationProcessorjakarta로 변경되었습니다
2.
IntelliJ 버전이 업데이트 되어서인지는 몰라도, idea plugin을 설정하지 않아도 됩니다 (설정이 편해짐). IntelliJ가 자동으로 QClass도 인덱싱합니다.
build.gradle.kts 전체 파일입니다.
 로 표시한 내용을 주의 깊게 보시면 됩니다.
plugins { val kotlinVersion = "1.8.21" id("org.springframework.boot") version "3.1.0" id("io.spring.dependency-management") version "1.1.0" kotlin("jvm") version kotlinVersion kotlin("plugin.spring") version kotlinVersion kotlin("plugin.jpa") version kotlinVersion } group = "me.leedo" version = "1.0" java { sourceCompatibility = JavaVersion.VERSION_17 } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.kafka:spring-kafka") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.jetbrains.kotlin:kotlin-reflect") implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0") implementation("org.springdoc:springdoc-openapi-starter-common:2.1.0") implementation("com.github.nobel6018:3dbinpacking-kotlin:0.4") implementation("org.hashids:hashids:1.0.3") implementation("io.github.microutils:kotlin-logging-jvm:3.0.5") // ✅ querydsl을 설치합니다. ":jakarta"를 꼭 설정합니다 implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta") // ✅ KAPT(Kotlin Annotation Processing Tool)를 설정합니다 // kotlin 코드가 아니라면 kapt 대신 annotationProcessor를 사용합니다 // JPAAnnotationProcessor를 사용하기 위해 마지막에 :jakarta를 붙입니다 kapt("com.querydsl:querydsl-apt:5.0.0:jakarta") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.kafka:spring-kafka-test") testImplementation("org.assertj:assertj-core:3.24.2") } tasks.withType<KotlinCompile> { kotlinOptions { freeCompilerArgs += "-Xjsr305=strict" jvmTarget = "17" } } tasks.withType<Test> { useJUnitPlatform() }
Kotlin
복사
kapt("com.querydsl:querydsl-apt:5.0.0:jakarta") 는 JPAAnnotationProcessor를 적용하는 부분입니다. 공식문서에 JPAAnnotationProcessor를 다음과 같이 소개하고 있습니다.
The JPAAnnotationProcessor finds domain types annotated with the javax.persistence.Entity annotation and generates query types for them.
JPAAnnotationProcessor는 @Entity 어노테이션이 붙은 도메인을 찾아서 해당 도메인의 쿼리 타입을 생성합니다.

JpaQueryFactory 빈 설정하기

JPAQueryFactory는 Querydsl 라이브러리의 클래스로, JPA를 사용하여 데이터를 조회할 때 복잡한 쿼리를 더욱 간편하고 가독성 높게 작성할 수 있게 도와줍니다.
@Configuration class JpaQueryFactoryConfig { @PersistenceContext private lateinit var entityManager: EntityManager @Bean fun jpaQueryFactory() = JPAQueryFactory(entityManager) }
Kotlin
복사

Generate QClasses

다음 gradle 명령어를 실행해서 Querydsl의 도메인 클래스인 QClass를 생성합니다
./gradlew clean compileKotlin
Bash
복사