QueryDSL는 Spring Data JPA를 사용하면서 DB 쿼리를 만드는데 de factor standard가 되었다.
(jooQ도 같은 역할로도 사용할 수 있지만 현업에서는 DB 사용 시 JPA를 주로 사용하다보니 QueryDSL가 거의 같이 사용된다)
하지만 QueryDSL은 Github repository를 살펴봤을 때 maintain이 멈춘 상태라고 볼 수 있다.
그래도 DB 쿼리를 만드는데 있어서는 문제없이 그럭저럭 사용할 수 있긴 하지만 security 이슈도 있고
ksp가 아닌 kapt를 계속 사용해야하는 점도 내키지 않을 수 있다.
OpenFeign 진영에서 fork를 한 QueryDSL를 사용한다면 위의 문제를 해결할 수 있다.
(OpenFeign 진영에서 fork를 한 배경에 대해서는 이 글을 확인하면 좋다)
Gradle 설정
(Spring 3.5.x, Java 21, Kotlin 1.9.x 기준)
기본적인 Gradle 설정은 아래와 같다.
plugins {
kotlin("jvm") version "1.9.25"
...
id("com.google.devtools.ksp") version "1.9.25-1.0.20"
}
...
dependencies {
...
// QueryDSL
implementation("io.github.openfeign.querydsl:querydsl-jpa:7.0")
ksp("io.github.openfeign.querydsl:querydsl-ksp-codegen:7.0")
// 6.x 버전 설정
// implementation("io.github.openfeign.querydsl:querydsl-jpa:6.12")
// ksp("io.github.openfeign.querydsl:querydsl-ksp-codegen:6.12")
...
}
...
(전체 설정)
plugins {
kotlin("jvm") version "1.9.25"
kotlin("plugin.spring") version "1.9.25"
id("org.springframework.boot") version "3.5.3"
id("io.spring.dependency-management") version "1.1.7"
kotlin("plugin.jpa") version "1.9.25"
id("com.google.devtools.ksp") version "1.9.25-1.0.20"
}
group = "com.tistory.devs0n"
version = "0.0.1-SNAPSHOT"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
dependencies {
// Kotlin
implementation("org.jetbrains.kotlin:kotlin-reflect")
// DB
runtimeOnly("com.mysql:mysql-connector-j")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
// QueryDSL
implementation("io.github.openfeign.querydsl:querydsl-jpa:7.0")
ksp("io.github.openfeign.querydsl:querydsl-ksp-codegen:7.0")
// 6.x 버전 설정
// implementation("io.github.openfeign.querydsl:querydsl-jpa:6.12")
// ksp("io.github.openfeign.querydsl:querydsl-ksp-codegen:6.12")
// Testing
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
kotlin {
compilerOptions {
freeCompilerArgs.addAll("-Xjsr305=strict")
}
}
allOpen {
annotation("jakarta.persistence.Entity")
annotation("jakarta.persistence.MappedSuperclass")
annotation("jakarta.persistence.Embeddable")
}
tasks.withType<Test> {
useJUnitPlatform()
}
Q class 생성 확인

ksp plugin 버전
참고로 ksp plugin의 경우 더 최신 버전이 존재하지만 SpringBoot 3.5.x 버전에서 지원하는 Kotlin 버전은 1.9.x 버전이기에
더 높은 버전의 ksp plugin을 사용할 수 없다.
이는 직접 Kotlin 버전을 변경하여 설정하거나 Spring 메이저 버전이 올라가면서 정식으로 Kotlin 2 버전을 지원할 때를 기다리면 되겠다.
(참고: https://spring.io/blog/2024/10/01/from-spring-framework-6-2-to-7-0)
'Java & Kotlin > Spring' 카테고리의 다른 글
[springdoc-openapi] 공통 에러 응답 설정하기 (1) | 2025.05.10 |
---|---|
여러 유저를 사용한 E2E test (RestAssured 사용) (0) | 2025.05.06 |
Spring graceful shutdown (+ async, virtual thread) (1) | 2025.03.09 |
Kotlin SpringBoot 환경에서 jOOQ 설정 (2) | 2024.12.03 |
[Spring] Swagger UI 대신 Scalar API Reference를 사용하여 API 문서 사용하기 (1) | 2024.10.29 |
댓글