인프런 김영한님의 실전! 스프링 부트와 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 버전 호환성 최소 기준