본문 바로가기
개발

Kotlin에 Querydsl 적용하기 - 24.11.14 기준

by 공덕뉸나 2024. 11. 14.

개발을 시작하면서 초기 설정부터 하고 있는데 23년도에 querydsl을 적용했던 방식과 chat gpt가 알려준 방식대로 진행했는데 계속 에러가 뜨는 것이었다,,
 

Execution failed for task ':kaptKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction

 
이런 에러도 발견하고,, 심지어 QuerydslConfig 파일에서는 JPAQueryFactory에서 오류가 발생하고 있었다.
이전 프로젝트랑 챗 지피티한테 물어보면서 진행하고 있는데 해결되지는 않았다.
계속해서 삽질을 하다 구글링을 시작했고 바로 해결했다. 
gradle에서 querydsl을 설정하는 방법이 버전이 업그레이드 되면서 바뀌었다보다.. 광광
뭔가 SpringBoot3이랑 Java17버전 쓰면서 버전이 조금씩 올라갈 때마다 계속해서 뭔가 바뀌는 느낌이다. deprecated 되는 것들도 많고!

(chat gpt야 얼른 업데이트 부탁해)
 

아무튼~ 성공한 방법을 설명해보겠다.
 

build.gradle.kts (gradle 설정 파일)

plugins {
	kotlin("jvm") version "1.9.25"
	kotlin("plugin.spring") version "1.9.25"
	id("org.springframework.boot") version "3.3.5"
	id("io.spring.dependency-management") version "1.1.6"
	kotlin("plugin.jpa") version "1.9.25"
    
	kotlin("kapt") version "1.9.25" // 추가
}

 
Kapt는 Kotlin Annotation Processing Tool의 약자로, Kotlin에서 주석 처리된 코드를 처리하기 위해 사용하는 도구이다.
Java에서는 Annotation Processor를 사용하여 주석을 기반으로 코드 생성, 변환, 검사를 하는데, Kotlin에서는 이를 Kapt라는 도구로 대체한다.

- Annotation Processor(컴파일 시점에서 소스 코드의 주석을 분석하고, 그 주석을 기반으로 추가적인 작업을 수행하는 도구)
 

dependencies {
	implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
	kapt("com.querydsl:querydsl-apt:5.0.0:jakarta")
	kapt("jakarta.annotation:jakarta.annotation-api")
	kapt("jakarta.persistence:jakarta.persistence-api")
}

 

// Querydsl 설정부 추가
val generated = file("src/main/generated")

// querydsl QClass 파일 생성 위치 지정
tasks.withType<JavaCompile> {
	options.generatedSourceOutputDirectory.set(generated)
}

// kotlin source set에 querydsl QClass 위치 추가
sourceSets {
	main {
		kotlin.srcDirs += generated
	}
}

// gradle clean 시에 QClass 디렉토리 삭제
tasks.named("clean") {
	doLast {
		generated.deleteRecursively()
	}
}

 
분명 23년 2월에 개발했을 때는 Q객체 만들어지는 경로는 따로 지정하지 않아도 만들어졌었는데 ,, 다시 하려니까 헷갈린다.

QueryDslConfig.kt

import com.querydsl.jpa.impl.JPAQueryFactory
import jakarta.persistence.EntityManager
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class QueryDslConfig(
        val em: EntityManager
) {
    @Bean
    fun queryFactory(): JPAQueryFactory {
        return JPAQueryFactory(em)
    }
}

 
여기까지 한 후 빌드를 해보면..!

 
정상적으로 Q객체가 만들어졌음을 확인할 수 있다.
 
참고 : https://velog.io/@hana0627/Kotlin-SpringBoot3-QueryDsl-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

[Kotlin] SpringBoot3 + QueryDsl 설정하기

SpringBoot3 + QueryDsl 설정 with Kotlin

velog.io

(덕분에 해결했어요ㅠ0ㅠ 감사합니다,,)