SW/Spring Boot

Spring Boot 3.0과 Spring Data JPA 및 Querydsl 업그레이드 가이드

얇은생각 2024. 7. 16. 23:30
반응형

안녕하세요, 이번 글에서는 Spring Boot 3.0.2로의 업그레이드와 관련된 주요 사항들, 특히 Spring Data JPA 3.0.1 Querydsl 5.0.0을 중심으로 다룰 것입니다. 이 글은 업그레이드 과정에서 발생할 수 있는 문제와 그 해결 방법을 중심으로 작성되었습니다.

 

 

Spring Boot 3.0과 Spring Data JPA 및 Querydsl 업그레이드 가이드

 

 

기술 스택

이 글에서 다룰 기술 스택은 다음과 같습니다:

  • Spring Boot 3.0.2
  • Hibernate 6.1.6.Final
  • Spring Data JPA 3.0.1
  • Querydsl 5.0.0
  • Spring Framework 6.0.4

 

주요 변경 사항

1. Java 17

Spring Framework 6 Spring Boot 3 Java 17을 기본으로 사용합니다. 따라서 Java 17로의 전환이 필수적입니다.

 

2. Jakarta EE 9+

기존의 Java EE에서 Jakarta EE로의 전환이 필요합니다. 특히, javax 패키지를 사용하는 클래스들은 모두 jakarta 패키지로 변경해야 합니다.

 

3. Spring MVC

Spring MVC 6.0.4에서는 ResponseEntityExceptionHandler 클래스의 메소드 시그니처가 변경되었습니다. HttpStatus 타입이 HttpStatusCode 타입으로 변경되었습니다.

기존 코드 (Spring MVC 5):

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException exception, HttpHeaders headers, HttpStatus status, WebRequest request) {
    return buildResponse(BAD_REQUEST, exception);
}

 

 

변경된 코드 (Spring MVC 6):

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException exception, HttpHeaders headers, HttpStatusCode status, WebRequest request) {
    return buildResponse(BAD_REQUEST, exception);
}

 

 

Hibernate 6.1.6

Hibernate 5.6에서 6.1로 업그레이드되었습니다. 이로 인해 몇 가지 중요한 변화가 있습니다:

1. 로깅

Hibernate의 로깅 패키지가 org.hibernate.type에서 org.hibernate.orm.jdbc로 변경되었습니다. 바인딩과 추출 값에 대해 각각 다른 로거를 사용하도록 분리되었습니다.

Hibernate 5:

logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

 

 

Hibernate 6:

logging.level.org.hibernate.orm.jdbc.bind=trace
logging.level.org.hibernate.orm.jdbc.extract=trace

 

 

2. Semantic Query Model

Hibernate 6에서는 새로운 Semantic Query Model이 도입되었습니다. 자동 중복 제거 기능이 추가되어, 이전 버전에서는 반환되던 중복된 엔티티가 더 이상 반환되지 않습니다.

 

 

Spring Data JPA 3.0.1

Spring Data JPA 3.0.1의 주요 변경 사항은 다음과 같습니다:

  • Java 17 사용
  • Jakarta EE 10 사용
  • Hibernate 6로 업그레이드

 

Querydsl 5.0.0

Querydsl 또한 Jakarta EE로 전환되었습니다. 따라서 의존성을 jakarta로 변경해야 합니다.

Spring Boot 2.7.5:

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <version>${querydsl.version}</version>
    <classifier>jpa</classifier>
    <scope>provided</scope>
</dependency>

 

 

Spring Boot 3.0.2:

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>${querydsl.version}</version>
    <classifier>jakarta</classifier>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <scope>provided</scope>
    <version>${querydsl.version}</version>
    <classifier>jakarta</classifier>
</dependency>

 

 

Liquibase

Liquibase 4.9.1에서 4.17.2로 업그레이드되었습니다. 주요 변경 사항은 JAX-B 의존성을 Javax에서 Jakarta로 전환하는 것입니다.

Spring Boot 2.7.5:

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
</dependency>

 

 

Spring Boot 3.0.2:

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <exclusions>
        <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
</dependency>

 

 

결론

이 글에서는 Spring Boot 3.0.2와 관련된 주요 변경 사항들을 다루었습니다. 특히 Spring Data JPA 3.0.1 Querydsl 5.0.0의 업그레이드 과정에서 발생할 수 있는 문제와 그 해결 방법을 중심으로 설명했습니다. 업그레이드 시, Java 17 Jakarta EE 10으로의 전환이 필수적이며, 각종 의존성들의 변경 사항을 주의 깊게 살펴보아야 합니다.

반응형