Spring Boot 3.x 새로운 기능 정리
Spring Boot 3.x는 Java 17 이상을 필수로 하며, GraalVM 네이티브 이미지, 가상 스레드 등 최신 기술을 지원합니다.
주요 변경사항
| 항목 | 변경 내용 |
|---|
| Java 버전 | Java 17+ 필수 |
| Jakarta EE | javax.* → jakarta.* 패키지 |
| Spring Framework | 6.0+ |
| 네이티브 이미지 | GraalVM 공식 지원 |
패키지 변경 (Jakarta EE 9+)
// Before (Spring Boot 2.x)
import javax.servlet.http.HttpServletRequest;
import javax.persistence.Entity;
import javax.validation.Valid;
// After (Spring Boot 3.x)
import jakarta.servlet.http.HttpServletRequest;
import jakarta.persistence.Entity;
import jakarta.validation.Valid;
Virtual Threads 지원
# application.yml
spring:
threads:
virtual:
enabled: true
# 또는 @Async에서 사용
@Configuration
@EnableAsync
public class AsyncConfig {
@Bean
public AsyncTaskExecutor applicationTaskExecutor() {
return new TaskExecutorAdapter(
Executors.newVirtualThreadPerTaskExecutor()
);
}
}
GraalVM 네이티브 이미지
# pom.xml
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
# 빌드
mvn -Pnative native:compile
# 실행 (매우 빠른 시작)
./target/myapp
HTTP Interface Client
// 선언적 HTTP 클라이언트
public interface UserClient {
@GetExchange("/users/{id}")
User getUser(@PathVariable Long id);
@PostExchange("/users")
User createUser(@RequestBody User user);
}
// 빈 등록
@Bean
public UserClient userClient(WebClient.Builder builder) {
WebClient webClient = builder.baseUrl("https://api.example.com").build();
HttpServiceProxyFactory factory = HttpServiceProxyFactory
.builderFor(WebClientAdapter.create(webClient))
.build();
return factory.createClient(UserClient.class);
}
Problem Details (RFC 7807)
# application.yml
spring:
mvc:
problemdetails:
enabled: true
# 자동으로 표준 에러 응답 형식 적용
{
"type": "about:blank",
"title": "Not Found",
"status": 404,
"detail": "User not found",
"instance": "/users/123"
}
Observability 개선
# Micrometer Observation API
@Observed(name = "user.find")
public User findUser(Long id) {
return userRepository.findById(id);
}
# 자동 메트릭, 트레이싱, 로깅 연동
spring:
application:
name: my-app
management:
tracing:
sampling:
probability: 1.0
마이그레이션 체크리스트
- Java 17 이상으로 업그레이드
- javax.* → jakarta.* 패키지 변경
- spring.factories → AutoConfiguration.imports
- Hibernate 6.x 호환성 확인
- 테스트 의존성 업데이트
성능 비교
| 항목 | Boot 2.x | Boot 3.x Native |
|---|
| 시작 시간 | 2-5초 | 0.05-0.1초 |
| 메모리 | 200MB+ | 50MB |
| 빌드 시간 | 빠름 | 느림 (5-10분) |