2023-06-20 @이영훈
Spring boot 3.x 버전으로 넘어오면서 kotlin gradle에서 queryDSL 설정하는 방법이 조금 변경되었습니다.
Spring boot 2.x 버전을 사용하신다면, 아래의 글을 참고해주세요
Kotlin Gradle 파일
Spring boot 3 버전으로 넘어오면서 변경 사항을 정리해보면 다음과 같습니다
1.
JPAAnnotationProcessor 가 jakarta로 변경되었습니다
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
복사