핵심 요약
Spring Boot 5 (2026 H1)는 Spring Framework 7 기반. Java 21+ 필수, Jakarta EE 11 기반, Virtual Threads 첫 시민. 이전 4.x → 5 마이그레이션은 큰 변화 동반.
- RC1: 2026-04, GA: 2026-06 예정
- Java 21+ 필수 (17 미지원)
- Spring Framework 7
- Jakarta EE 11
- Virtual Threads 기본 활용
1. Java 21 → 25 사이 결정
| Java | LTS | 주요 기능 |
|---|---|---|
| 21 | O | Virtual Threads, Records, Pattern Matching |
| 25 | O | Stable Values, Compact Source Files |
5는 21이 최소, 25 권장. 25에서 추가 성능·기능 향상.
2. Virtual Threads — Tomcat·HTTP 클라이언트
// application.yml
spring:
threads:
virtual:
enabled: true
# Tomcat 워커 → Virtual Thread
# RestClient·WebClient도 자동I/O bound 워크로드 (DB·외부 API)에서 동시성 10~50배 향상. CPU bound는 차이 없음.
Virtual Thread 트랩
- synchronized 블록은 thread pin → carrier 점유. ReentrantLock 사용
- ThreadLocal는 여전히 작동하지만 비용 큼 → ScopedValue (Java 25)
- JNI·native call은 pin
3. Records로 DTO·VO
// 이전
public class CreateUserRequest {
private String name;
private String email;
// getter, setter, equals, hashCode, toString...
}
// 5 권장
public record CreateUserRequest(
@NotBlank String name,
@Email String email
) {}
@PostMapping("/users")
public User createUser(@RequestBody @Valid CreateUserRequest req) {
return userService.create(req.name(), req.email())
}boilerplate 80% 감소. validation도 record component에 직접.
4. Spring Data JPA + Records Projection
public record UserSummary(Long id, String name, String email) {}
public interface UserRepository extends JpaRepository<User, Long> {
List<UserSummary> findByActive(boolean active);
// 자동으로 Projection — 필요한 컬럼만 SELECT
}5. @Transactional readOnly 동작 변경
5에서 readOnly=true가 진짜 readOnly로 강화. dirty check 무시.
// 5에서 변경 안 됨
@Transactional(readOnly = true)
public User example(Long id) {
User u = userRepository.findById(id).orElseThrow();
u.setLastSeen(Instant.now()); // ❌ 반영 안 됨
return u;
}
// 마이그레이션: readOnly 제거 또는 메서드 분리
@Transactional
public User updateLastSeen(Long id) { ... }6. WebMVC vs WebFlux
5에서 WebMVC + Virtual Threads가 WebFlux를 거의 대체. WebFlux의 reactive는 backpressure가 진짜 필요한 경우에만.
7. Spring Cloud 호환
| Spring Boot | Spring Cloud |
|---|---|
| 3.x | 2023.x |
| 4.x | 2024.x |
| 5 | 2026.x |
Spring Cloud 2026은 Boot 5와 함께 출시.
8. AOT·GraalVM Native
5에서 AOT 컴파일 안정화.
# Native 빌드
mvn -Pnative spring-boot:build-image
# 콜드 스타트: 50ms (vs JVM 3000ms)
# 메모리: 80MB (vs JVM 250MB)9. 마이그레이션 체크리스트
- Java 21+ 환경 확인
- 의존성: Spring Boot 5 RC, Spring Cloud 2026, Spring Security 7
- Jakarta EE 9+ namespace (javax → jakarta) — 4.x에서 이미 했어야 함
- @Transactional readOnly 코드 점검
- application.yml virtual threads 활성화
- WebFlux 사용 중이면 WebMVC + Virtual Threads로 전환 검토
- Records로 DTO 점진 전환
- 테스트 — 특히 동시성·트랜잭션 시나리오
10. 실측 — 4.x → 5 효과
| 지표 | 4.x | 5 |
|---|---|---|
| RPS (단순 API) | 12K | 14K |
| RPS (DB-heavy) | 3.2K | 18K (Virtual Threads) |
| 메모리 (idle) | 320MB | 240MB |
| 콜드 스타트 (Native) | 2.8초 | 50ms |

댓글 0