본문 바로가기
Backend2026년 4월 23일6분 읽기

Spring Boot 5 RC 마이그레이션 — Records·Virtual Threads 통합

YS
김영삼
조회 1
Spring Boot 5 RC 마이그레이션 — Records·Virtual Threads 통합

핵심 요약

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 사이 결정

JavaLTS주요 기능
21OVirtual Threads, Records, Pattern Matching
25OStable 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 BootSpring Cloud
3.x2023.x
4.x2024.x
52026.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. 마이그레이션 체크리스트

  1. Java 21+ 환경 확인
  2. 의존성: Spring Boot 5 RC, Spring Cloud 2026, Spring Security 7
  3. Jakarta EE 9+ namespace (javax → jakarta) — 4.x에서 이미 했어야 함
  4. @Transactional readOnly 코드 점검
  5. application.yml virtual threads 활성화
  6. WebFlux 사용 중이면 WebMVC + Virtual Threads로 전환 검토
  7. Records로 DTO 점진 전환
  8. 테스트 — 특히 동시성·트랜잭션 시나리오

10. 실측 — 4.x → 5 효과

지표4.x5
RPS (단순 API)12K14K
RPS (DB-heavy)3.2K18K (Virtual Threads)
메모리 (idle)320MB240MB
콜드 스타트 (Native)2.8초50ms

자주 묻는 질문

4.x를 계속 써도 되나?4.x는 2027 EOL. 가능. 단 Virtual Threads 등 신기능 활용 못함. 1년 안에 5 전환 권장.

WebFlux를 5에서 계속?실시간 streaming·매우 높은 동시성에서만. 일반 CRUD는 WebMVC + Virtual Threads가 단순.

Native (GraalVM) 운영 안정성?5에서 안정. 단 reflection·dynamic loading 라이브러리는 hint 필요. CI에서 native 테스트 필수.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록