Spring Boot version 4
Spring boot 4 is the latest major release of the popular Java framework for building web applications and microservices.
Spring Boot의 메이저 버전을 올릴 때는 애플리케이션 코드뿐 아니라 스타터와 테스트 의존성도 함께 확인해야 한다. Boot 4에서 달라지는 부분을 업그레이드할 때 살펴볼 순서로 정리했다.
플랫폼/베이스라인 변화
Spring Boot 4는 Spring Framework 7을 기반으로 한다. Java 17 이상이 필요하고, JDK 25 LTS와 Jakarta EE 11 계열의 Tomcat 11, Hibernate ORM 7, Validator 9도 함께 확인할 대상이다.
Kotlin을 사용한다면 2.2 이상, GraalVM Native를 사용한다면 25 계열을 기준으로 의존성을 살펴보자. 빌드 도구 쪽에서는 Gradle 9 지원이 추가됐다.
가장 큰 구조적 변화: “모듈화(Modularization)”
기존 spring-boot-autoconfigure가 여러 작은 모듈로 나뉜다. 필요한 기능에 맞춰 의존성을 선택할 수 있도록 스타터 구성도 함께 바뀐다.
예를 들어 Flyway는 라이브러리 jar만 추가하는 대신 전용 스타터를 사용해야 한다. web에서 webmvc로 이름이 바뀌는 스타터도 있어, 기존 의존성 목록을 그대로 가져오기 전에 확인이 필요하다.
테스트 의존성도 따로 살펴봐야 한다. spring-boot-starter-webmvc-test처럼 기능에 대응하는 테스트 스타터가 추가됐다. 한 번에 모듈을 나누기 어렵다면 Classic 스타터로 먼저 옮긴 뒤 필요한 모듈로 분리하는 방법도 있다.
웹/HTTP 스택의 기능 추가
M2에서는 @HttpServiceClient 기반의 선언적 HTTP 클라이언트와 API Versioning 지원이 소개됐다. HTTP 호출 인터페이스를 선언하거나 API 버전별로 요청을 라우팅할 때 살펴볼 기능이다. RC1에는 HTTP 테스트에 사용할 RestTestClient도 언급됐다.
관측 가능성(Observability) & 운영
OpenTelemetry 연동을 위한 스타터와 기본 설정이 보강된다. RC1에는 Redis 관련 메트릭과 트레이싱 개선도 포함되어 있다. 기존에 직접 구성한 계측 설정이 있다면 새 자동 설정과 함께 어떻게 동작하는지 확인해두는 편이 좋다.
언어/라이브러리 생태계 업데이트
Jackson 3, JUnit 6, Kotlin 2 계열로 의존성 기준이 올라간다. Boot 버전만 바꾸기보다, 직접 사용하는 직렬화 코드와 테스트 유틸이 새 버전에서도 동작하는지 함께 확인해야 한다.
부수적이지만 유용한 변화들
M2에는 JSpecify 기반의 null-safety 주석도 포함됐다. IDE와 정적 분석 도구가 null 가능성을 판단하는 데 활용할 수 있다. 앞에서 본 모듈화와 테스트 스타터 작업은 RC1에서 완료됐다고 안내됐다.
업그레이드 체크리스트(실무용 요약)
- JDK 17+ 준비(가능하면 JDK 21/25 LTS) → CI/CD 빌드 이미지도 함께 교체.
- Spring Framework 7 의존성 라인으로 전체 정렬(Jakarta EE 11 계열 포함).
- 스타터 재정비 • spring-boot-starter-web ➜ spring-boot-starter-webmvc (WebFlux면 그에 맞는 스타터) • DB 마이그/관리는 전용 스타터 필수(예: spring-boot-starter-flyway). • 각 스타터에 -test를 test scope로 추가.
- Classic 스타터로 임시 올림 → 모듈별로 점진 분해(대규모 레포/사내 공용 스타터가 있을 때 특히 유용).
- OTel·관측성 설정 재검토(새 스타터로 간소화, Redis 메트릭/트레이싱 확인).
- 빌드 도구 업데이트: Gradle 9 지원 확인.
- 테스트/런타임 호환성: Jackson 3, JUnit 6 도입에 따른 테스트 유틸/모킹 라이브러리 호환 확인.
코드/설정 예시(Gradle, 간단 스케치)
아래는 의존성 구성을 확인하기 위한 예시다. 실제 프로젝트에 적용할 때는 멀티모듈 구성과 BOM, 버전 카탈로그에 맞춰 조정하면 된다.
plugins {
id("org.springframework.boot") version "4.0.0-RC1" // GA 나오면 교체
id("io.spring.dependency-management") version "1.1.6"
kotlin("jvm") version "2.2.0" // 사용 시
kotlin("plugin.spring") version "2.2.0"
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(21))
}
} // 최소 17+
dependencies {
implementation(platform("org.springframework.boot:spring-boot-dependencies:4.0.0-RC1"))
// Web MVC
implementation("org.springframework.boot:spring-boot-starter-webmvc")
// Flyway는 전용 스타터 필요
implementation("org.springframework.boot:spring-boot-starter-flyway")
// OpenTelemetry(관측성)
implementation("org.springframework.boot:spring-boot-starter-opentelemetry")
// 선언적 HTTP 클라이언트 사용 시
implementation("org.springframework.boot:spring-boot-starter-http-client")
testImplementation("org.springframework.boot:spring-boot-starter-webmvc-test")
testImplementation("org.springframework.boot:spring-boot-starter-flyway-test")
}
참고: 공식 발표/문서(최근순)
• RC1 릴리스 블로그: 모듈화 작업 완료, RestTestClient, Redis 관측성 강화.
• 모듈화 상세 블로그: 모듈 경계, 스타터·테스트 스타터, Classic 스타터, 마이그레이션 예시.
• M2 릴리스 블로그: Gradle 9, @HttpServiceClient, API Versioning, JSpecify, OTel 스타터 개선.
• Road to GA(총론): JDK 17 유지, Jakarta EE 11/ Jackson 3/ JUnit 6/ Kotlin 2 로드맵과 주간 연재 목록(예: Spring gRPC 예정).
• Boot 4 마이그 가이드/요건: Java 17+, Kotlin 2.2+, GraalVM 25, Servlet 6.1/Jakarta EE 11, Framework 7.x.