
현재 Spring Boot 3.5.11 버전으로 프로젝트를 생성하고 있는 지금, 곧 Spring Boot 4.xx를 사용하게 될 것 같아 특징을 간단하게 정리해둔다.
1. Virtual Thread 공식 지원 강화
Spring Boot 3에서도 가능하긴 했지만, Spring Boot 4부터는 Virtual Thread가 권장된다.
spring:
threads:
virtual:
enabled: true
이렇게 설정하면 Tomcat, @Async, TaskExecutor 같은 곳에서 Virtual Thread를 사용할 수 있다.
기존에 WebFlux를 통해 스레드풀에서 200개의 요청을 처리했다고 하면, 위의 기능을 통해 10,000개 이상의 요청도 처리할 수 있게 된다.
사실상 가장 큰 변화
2. Native Image / AOT(Ahead Of Time) 강화
이 기능은 Spring Boot 3부터 시작된 기능이라곤 하는데, Spring Boot 4.xx 버전부터 완전히 안정화 되었다고 한다.
기존 Spring Boot 3.xx 버전에서는 Reflection을 많이 사용하여 Native Compile이 상대적으로 어려웠다.
Spring Boot 4.xx 버전으로 올라오면서 AOT 분석을 통해 Reflection을 제거하고 Native build을 할 수 있게 되었다.
따라서 Spring Boot를 통해 Native Binary를 설계? 할 수 있게 되었다고 함.
이 부분은 실행속도에서 알 수 있다.
기존 JVM은 실행시간이 2초 내지는 5초정도 걸리는데, Native로 돌리면 실행시간이 약 50ms 정도로 매우 많이 줄어든다.
이는 Docker에 이미지를 올려서 실행해도 유의미한 차이를 보인다고 한다.
3. Observability 통합 강화 - 모니터링
Spring Boot 3.xx부터 Micrometer Observability가 있다고 한다.
import com.zaxxer.hikari.metrics.micrometer
대충 여기 들어가보면 볼 수 있음
이게 Spring Boot 4.xx 부터 더욱 강화된다고 한다.
구체적으로는 Metrics, Tracing, Logging이 통합된다고 함
따라서 Micrometer가 Prometheus, OpenTelemetry, Zipkin, Grafana를 한번에 관리한다고 함
@Observed
public void createuser() {
}
이렇게 만들면
자동으로 trace, metric, span이 생긴다.
4. HTTP Interface Client가 추가됨
Spring Boot 3의 RestTemplate, WebClient, Fegin(?) 이게 HTTP Interface로 바뀜
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.service.annotation.GetExchange;
import org.springframework.web.service.annotation.HttpExchange;
@HttpExchange("/users")
public interface UserClient {
@GetExchange("/{id}")
Users getUser(@PathVariable Long id);
}
이런식으로 구성해서
User user = userClient.getUser(1L);
형태로 쓸 수 있음
Spring 자체에서 제공하기 때문에 gradle에 추가하지 않아도 될 것 같다
5. Configuration Binding 개선
@ConfigurationProperties가 개선됐다고 한다.
기존에는 setter가 필요했는데, record를 사용할 수 있다고 함
@EnableConfigurationProperties(AppConfig.class)
@SpringBootApplication
public class Test1Application {
public static void main(String[] args) {
SpringApplication.run(Test1Application.class, args);
}
}
@EnableConfigurationProperties를 적고,
@ConfigurationProperties("app")
public record AppConfig(
String name,
int port
) {
}
이런식으로 record 형태로 적으면 됨
6. Deprecated가 제거됨
springboot 4.xx 버전부터는 RestTemplate, HttpInvoker, JAX-RPC 등등이 제거됐다고 함
그리고 Spring 전체가 Jakarta EE 기반으로 완전히 넘어갔다는데, 이것도 마찬가지로 공부가 필요해보인다.
7. Security 변경
WebSecurityConfigurerAdapter가 삭제됐다.
// 예전꺼
extends WebSecurityConfigurerAdapter
이게
@Bean
SecurityFilterChain filterChain(HttpSecurity http)
이렇게 완전히 변했다고함
그리고 Docker나 Container쪽 / Test도 개선됐다고 하는데, 대표적으론 이렇다고 한다
'Spring Boot' 카테고리의 다른 글
| MFA에 대해서 (0) | 2026.03.21 |
|---|---|
| [IntelliJ] .env를 통해 application.yml에 환경변수 적용법 (0) | 2026.03.15 |
| OAuth : OpenID Connect(OIDC) (0) | 2025.10.18 |
| OAuth : 워크플로우 (0) | 2025.10.15 |
| OAuth : 주체와 설정 (0) | 2025.10.15 |