SW 개발

Spring Boot 3.0, Kotlin, Gradle 기반 프로젝트에서 Spring Data JPA, Querydsl 사용하기

지단로보트 2022. 12. 7. 16:04

개요

  • 2022-11-28 Spring Boot2.7에서 3.0으로 오랜만의 메이저 버전 업그레이드되었다. Java 17를 최소 버전으로 요구하는 등의 큰 변경점이 있었고, 업그레이드해보니 Break Changes가 있어 소스 코드에도 자잘한 수정이 요구된다. 최근 국내 대부분의 현업 프로젝트에서 Kotlin, Gradle, Spring Data JPA, Querydsl을 사용하고 있는 만큼 도움이 될까 해서 새로운 설정 방법을 정리했다.

build.gradle.kts 수정

  • 프로젝트 루트의 build.gradle.kts에 아래 내용을 추가하거나 변경한다. (Spring Boot 2.X.XSpring Boot 3.0.0 주석을 확인하여 Spring Boot 3.0.0 부분만 적용하면 된다.)
buildscript {
    dependencies {
        classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.10")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.22")
        classpath("org.jetbrains.kotlin:kotlin-allopen:1.7.22")
        classpath("org.jetbrains.kotlin:kotlin-noarg:1.7.22")
    }
}

plugins {
    id("org.springframework.boot") version "3.0.5"
    id("io.spring.dependency-management") version "1.1.0"
    kotlin("jvm") version "1.7.22"
    kotlin("plugin.spring") version "1.7.22"
    kotlin("plugin.jpa") version "1.7.22"
    kotlin("kapt") version "1.7.22"
    idea
}

allOpen {

    // Spring Boot 2.X.X
    annotation("javax.persistence.Entity")
    annotation("javax.persistence.MappedSuperclass")
    annotation("javax.persistence.Embeddable")

    // Spring Boot 3.X.X
    annotation("jakarta.persistence.Entity")
    annotation("jakarta.persistence.MappedSuperclass")
    annotation("jakarta.persistence.Embeddable")
}

dependencies {

    // Spring Boot 2.X.X
    implementation("org.springframework.boot:spring-boot-starter-data-jpa:2.7.10")
    implementation("com.vladmihalcea:hibernate-types-55:2.21.1")
    implementation("com.infobip:infobip-spring-data-jpa-querydsl-boot-starter:7.2.4")
    kapt("com.querydsl:querydsl-apt:5.0.0:jpa")

    // Spring Boot 3.X.X
    implementation("org.springframework.boot:spring-boot-starter-data-jpa:3.0.5")
    implementation("com.vladmihalcea:hibernate-types-60:2.21.1")
    implementation("com.infobip:infobip-spring-data-jpa-querydsl-boot-starter:8.1.1")
    kapt("com.querydsl:querydsl-apt:5.0.0:jakarta")
}

idea {
    module {
        val kaptMain = file("build/generated/source/kapt/main")
        sourceDirs.add(kaptMain)
        generatedSourceDirs.add(kaptMain)
    }
}

소스 코드 참조 패키지 수정

  • Spring Boot 3.0.0으로 업그레이드하면 Servlet, JPA의 패키지명이 변경된다. 거의 대부분의 사례에서 javax 문자열을 jakarta 문자열로 변경하면 간단히 해결된다.

참고 글