본문 바로가기
Library&Framework/Spring Data JPA

Spring Boot 3.2.3에서 의존성 호환성 설정[JPA, Redis, Java Mail Sender, Thymeleaf, Validation, Web, Datatype-hibernate6, Hibernate Core] Hibernate5 -> Hibernate6변경

by 우지uz 2024. 3. 6.

인프런 김영한님의 실전! 스프링 부트와 JPA 활용2 강의를 듣고
Project Undemand 프로젝트 dependencies를 설정하는 과정에서 
java.lang.ClassNotFoundException:javax.persistence.Transient 
다음과 같은 에러가 발생하여, 이를 해결하는 과정을 담고자 포스팅을 합니다. 

먼저 프로젝트 initializers 를 다음과 같이 셋팅하고 시작했다는 점을 말씀드립니다. 

여기서 각 Dependencies 가 어떤 기능을 하는지는 , 다루지 않겠습니다 !

스프링부트 3.2 릴리즈노트를 보시면, 최소 지원버전 및 중요한 정보들을 확인하실 수 있습니다.

 

강의에서 Hibernate5JakartaModule 설정

저는 강의에서 스프링 부트 3.0 이하에서의 Hibernate5JakartaModule 설정과

저는 강의에서 스프링 부트 3.0 이상에서의 Hibernate5JakartaModule 등록 방법을 확인했고

 

등록하고 나서도, ClassNotFoundException 및 설정관련 오류가 계속 나와서

구글링 + 문서를 확인해보고 현재 버전에 맞는 

// Hibernate6JakartaModule
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate6:2.16.1'
implementation 'org.hibernate:hibernate-core:6.4.4.Final'

설정을 찾아보고 설정했습니다. 

Spring Boot 3.2 버전부터는 기본적으로 Hibernate 6.3를 사용합니다(참고).
Hibernate는 JPA의 구현체로 이번에 마이너 버전이 올라갔고, 관련해서 아래와 같이 몇 가지 눈에 띄는 변경 사항이 있습니다.
자세한 내용은 Hibernate 6.3 릴리스 노트를 읽어보시길 바랍니다.

 

이외에 스프링부트 3.2.3 버젼으로 되어있는데, 자바는 17버젼으로 선택했고, gradle은 7.6.1로 설정하고 있습니다.

 

구글링 할때에는 자바 JDK Version 이 17일때, Gradle 최소 지원 버젼이 7.3 이었는데 (링크)

실제로 gradle-7.3 버젼으로 설정을 하면 , 

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

2024년 3월 5일 , Gradle은 최소 7.5 버젼부터 호환이 된다고 IDE에서 에러메시지가 나왔습니다. (자바 JDK 17기준)

 

저는 Gradle 을 사용하기 때문에, build.gradle 을 들어가서 보겠습니다. 

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.3'
    id 'io.spring.dependency-management' version '1.1.4'
}

현재 스프링 부트 버젼과 의존성 매니저 버젼이 다음과 같음을 알 수 있습니다. 


dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'

    implementation 'org.springframework.boot:spring-boot-starter-mail'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'

    implementation 'org.springframework.boot:spring-boot-devtools'

    // Hibernate5JakartaModule
    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate6:2.16.1'
    implementation 'org.hibernate:hibernate-core:6.4.4.Final'

    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    //JUnit4 추가
    testImplementation("org.junit.vintage:junit-vintage-engine") {
       exclude group: "org.hamcrest", module: "hamcrest-core"
    }
}

일단 여기서 가장 중요한 것은, 스프링 부트 3.2.3 기준으로 

모든 dependencies 들이 맞춰져 있다는 것입니다.

버젼이 적혀있지 않은 

jpa, redis, mail, thmeleaf, validation, web, devtools, lombok, h2-database,starter-test 등 모두

호환이 되다는 기준하에, 최신 버젼으로 업데이트 되어 있습니다. 

스프링부트 3.2 릴리즈 노트에 가시면, 최소 지원 버전에 대해 
스프링부트 스타터를 사용했을때, 어떤 버전이 설치되는지 확인할 수 있었습니다.

 

 

참고문헌

(2023-11-08)스프링부트2에서 스프링부트3으로 마이그레이션(이관) 경험한 내용 블로그

MVN Repository 에 있는 버젼 관리 : datatype-hibernate6:2.16.1 에서 호환성  

MVN Repository 에 있는 버전 관리 : spring-boot-starter-data-jpa:3.2.3 에서 호환성

2023.06.27 기준 Java JDK < - > Gradle 버전 호환성 최소 기준

https://docs.gradle.org/7.6.1/release-notes.html

spring boot 3.2 release notes. github