안녕하세요, 이번 글에서는 Spring Boot 3.0.2로의 업그레이드와 관련된 주요 사항들, 특히 Spring Data JPA 3.0.1과 Querydsl 5.0.0을 중심으로 다룰 것입니다. 이 글은 업그레이드 과정에서 발생할 수 있는 문제와 그 해결 방법을 중심으로 작성되었습니다.
기술 스택
이 글에서 다룰 기술 스택은 다음과 같습니다:
- 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으로의 전환이 필수적이며, 각종 의존성들의 변경 사항을 주의 깊게 살펴보아야 합니다.
'SW > Spring Boot' 카테고리의 다른 글
GraalVM Native Image와 함께하는 Spring Boot 3 완벽 가이드 (0) | 2024.09.13 |
---|---|
Spring Boot Security를 활용한 기본 인증 구현: 단계별 가이드 (0) | 2024.09.10 |
Spring Boot와 Quarkus: 웹 애플리케이션 성능 비교 (0) | 2024.06.16 |
Spring Boot 애플리케이션에서 Neo4j 데이터베이스 연결 검증 방법 (0) | 2024.06.02 |
Spring Boot 애플리케이션에서 Neo4j 데이터베이스 연결 검증하기 (0) | 2024.06.01 |