안녕하세요!
2025년 9월에 JDK 25 LTS가 등판하고, 11월에는 기다리고 기다리던 Spring Boot 4.0이 정식 출시되었습니다.
그럼 지금부터 '클라우드 비용 절감'과 '생산성 혁명' 두마리 토끼를 잡을 수 있는 JDK25와 Spring Boot 4.0에 대해서 알아보도록 하겠습니다.
(들어가기 전에) 이런 글도 꼭 보세요 :
2025.12.10 - [IT/SpringBoot] - ☕ Java 개발자의 영원한 숙제, "도대체 어떤 JDK를 써야 할까?" 완벽 정리
1. JDK 버전별 릴리스 일정과 지원 현황
우선 지금 내 프로젝트가 쓰고 있는 JDK 버전이 언제 지원이 종료되고, 그리고 언제 신규 버전으로 갈아타야 하는지 간략 공유 드립니다.
1-1) Java 8 (LTS): 아직도 살아있는 전설의 고대 유물
- 출시일: 2014년 3월
- 지원 현황: 오라클의 무료 기술 지원(Premier Support)은 이미 종료되었습니다. 하지만 워낙 많이 쓰이다 보니 2030년 12월까지 유료 연장 지원은 계속됩니다.
- 현실적인 조언: 여러분, 이제는 놓아주세요. Spring Boot 3.x 이상은 아예 Java 17부터 지원하거든요. Java 8을 쓴다는 건, 최신 Spring 기능을 포기한다는 뜻이고, 보안 구멍이 숭숭 뚫려도 벤더사(Oracle, Azul 등)에 돈을 내지 않으면 패치를 못 받는다는 뜻입니다.
1-2) Java 11 (LTS) : 어중간한 버전
- 출시일: 2018년 9월
- 지원 현황: 오라클 무료 지원은 2023년에 끝났어요. 유료 지원은 2032년까지 가지만, 사실상 Java 17로 넘어가는 징검다리 역할이었죠.
- 특징: 컨테이너(Docker) 환경을 제대로 지원하기 시작한 첫 LTS라 의미는 있었지만, 지금 시점에서는 Java 17이나 25에 비해 성능 메리트가 전혀 없어요. 마이그레이션 1순위 대상입니다.
1-3) Java 17 (LTS): 현재의 '국룰'이자 가장 든든한 허리
- 출시일: 2021년 9월
- 지원 현황: 오라클 무료 지원이 2026년 9월까지예요. 즉, 내년(2026년) 9월이 되면 무료 업데이트가 끊깁니다!
- 중요 포인트: 많은 기업이 지금 Java 17을 쓰고 계실 텐데요, 이제 슬슬 "Upgrade Plan"을 짜셔야 합니다.
내년 9월 이후에는 보안 패치를 받으려면 OpenJDK 빌드(Temurin 등)로 갈아타거나, Java 21 또는 25로 버전을 올려야 합니다
1-4) Java 21 (LTS): 가상 스레드의 혁명
- 출시일: 2023년 9월
- 지원 현황: 오라클 무료 지원은 2028년 9월까지. 아주 넉넉하죠?.
- 특징: 자바의 판도를 바꾼 '가상 스레드(Virtual Threads)'가 정식으로 들어온 버전입니다. 비동기 코드를 짜느라 머리 싸매던 CompletableFuture나 리액티브 프로그래밍의 지옥에서 우리를 구원해 줬죠. 현재 가장 추천하는 안정적인 버전 중 하나입니다.
1-5) Java 25 (LTS): 2025년의 주인공, 그리고 미래
- 출시일: 2025년 9월 16일
- 지원 현황: 2030년 9월까지 무료 업데이트(Oracle NFTC 기준)! 유료 연장 지원은 2033년까지!.
- 특징: 향후 5년 이상 자바 생태계를 지배할 새로운 왕입니다. Spring Boot 4.0이 이 녀석을 타겟으로 나왔어요. 신규 프로젝트라면 무조건, 무.조.건 Java 25를 고려해 보셔야 합니다.
2. Java 25, 도대체 뭐가 달라졌을까 ?
"버전 올리면 뭐해요? 그냥 문법 똑같은 거 아니에요?"라고 묻는 분들께, Java 25는 "아니요, 엔진 자체가 바뀌었습니다"라고 답해드리고 싶어요. 이번 JDK 25에는 무려 18개의 JEP(JDK 개선 제안)가 포함되었는데요 , 개발자의 삶을 윤택하게 만들어 줄 핵심 기능만 설명 드리겠습니다.
2-1) 유연한 생성자 본문 (Flexible Constructor Bodies, JEP 513)
이거 진짜 기다리셨던 분들 많을 거예요. 그동안 자바에서는 상속받은 클래스(extends)의 생성자에서 무조건 super()를 첫 줄에 써야 했잖아요? 그래서 인자값 검증(Validation)을 하려면 이상한 private static 메서드를 만들어서 super(validate(arg)) 이런 식으로 꼼수를 써야 했죠. 코드가 얼마나 지저분해졌는지... 🤦♂️
하지만 Java 25부터는 super() 호출 전에 로직을 넣을 수 있습니다! 예를 들어, "나이가 0보다 작으면 에러를 뱉어라" 같은 코드를 super() 호출 전에 짤 수 있어요. 이게 왜 중요하냐고요? 불필요하게 부모 객체를 초기화하는 비용을 아낄 수 있고, 코드가 사람이 읽기 딱 좋게 바뀌거든요. "검증 먼저 하고 -> 객체 만든다"는 아주 상식적인 순서가 이제야 가능해진 거죠.
2-2) 축소된 객체 헤더 (Compact Object Headers, JEP 519)
이건 눈에 보이지 않지만, 여러분의 클라우드 비용을 획기적으로 줄여줄 마법이에요. 자바 객체는 머리(Header)에 메타데이터를 달고 다니는데, 이게 64비트 시스템에서 꽤 컸어요(96~128비트). 그런데 Java 25에서 이걸 64비트로 확 줄였습니다. "에게? 고작 몇 비트?"라고 생각하시면 안 돼요. 수백만, 수천만 개의 객체를 생성하는 대용량 트래픽 서버에서는 이 작은 차이가 모여서 힙 메모리(Heap Memory) 사용량을 10~20%까지 줄여줍니다. 메모리를 적게 쓴다? -> GC(가비지 컬렉션)가 덜 돈다 -> CPU를 덜 쓴다 -> AWS 인스턴스 사양을 낮출 수 있다 -> 돈이 굳는다!
2-3) 모듈 임포트 선언 (Module Import Declarations, JEP 511)
코딩하다 보면 맨 위에 import java.util.List;, import java.util.Map;, import java.util.stream.Collectors;... 임포트 문만 50줄 넘어가는 거, 지겨우셨죠? 이제는 그냥 쿨하게 import module java.base; 한 줄 딱 쓰면 끝납니다!. java.base 모듈에 있는 모든 패키지를 한방에 가져오는 건데, 특히 간단한 유틸리티 클래스를 만들거나 초보자들이 자바를 배울 때 진입 장벽을 확 낮춰줄 거예요. 물론 IDE가 알아서 해주긴 하지만, 코드 자체가 깔끔해지는 건 언제나 환영이죠.
2-4) 스코프 값 (Scoped Values, JEP 506)
가상 스레드(Virtual Threads) 시대의 필수품입니다. 예전에는 스레드 간에 데이터를 공유하려고 ThreadLocal을 썼잖아요? 근데 이게 가상 스레드 환경에서는 메모리 누수의 주범이 될 수 있어요. 가상 스레드는 수백만 개가 생길 수 있는데, 그 많은 ThreadLocal 맵을 관리한다고 생각해보세요... 끔찍하죠. Scoped Values는 데이터를 불변(Immutable)으로 공유하고, 사용이 끝나면 즉시 메모리에서 날려버려요. 훨씬 안전하고 가볍습니다. 고성능 동시성 서버를 만든다면 이제 ThreadLocal 말고 이거 쓰셔야 해요.
2-5) 기본형 패턴 매칭 (Primitive Types in Patterns, JEP 507)
switch 문이나 instanceof 쓸 때 int, long 같은 기본형(Primitive)을 못 써서 억지로 래퍼 클래스(Integer)로 박싱(Boxing)했던 기억, 다들 있으시죠? 성능 잡아먹는 주범이었는데... 이제는 switch 문에서 바로 int, boolean 같은 기본형을 쓸 수 있습니다!.
switch (x) {
case int i when i > 100 -> System.out.println("큰 숫자네!");
case double d -> System.out.println("소수점도 되네!");
}
이런 코드가 가능해진 거예요. 금융권이나 데이터 분석처럼 숫자를 많이 다루는 분야에서는 성능 향상이 꽤 쏠쏠할 겁니다.
3. Spring Boot 4.0, 과연 갈아타야 할까?
자, 이제 프레임워크 이야기로 넘어가 보죠. 2025년 11월 20일에 나온 따끈따끈한 Spring Boot 4.0. 과연 지금 바로 써도 될까요?
3-1) 신규 프로젝트는 "강력 추천"
- JDK 25와의 환상적인 케미: Spring Boot 4.0은 JDK 17을 최소 사양으로 잡고 있지만, 사실상 JDK 25의 기능(가상 스레드, 스코프 값 등)을 100% 활용하도록 설계되었어요. 지금 4.0으로 시작하면 향후 5년간은 기술 부채 걱정 없이 맘 편히 개발할 수 있습니다.
- Jakarta EE 11 완전 도입: 예전 javax.* 패키지는 이제 역사 속으로 사라졌습니다. jakarta.* 패키지로 완전히 통합된 최신 서블릿 컨테이너(Tomcat 11 등)를 쓰기 때문에 최신 라이브러리들과 호환성이 최고예요.
- 네이티브 이미지(GraalVM) 기본 장착: 클라우드 서버리스(Serverless) 환경에서 0.1초 만에 부팅되는 앱을 만들고 싶다면, Spring Boot 4의 개선된 AOT(Ahead-Of-Time) 지원이 필수입니다.
3-2) 기존 프로젝트 마이그레이션 주의사항
다만, 기존에 Spring Boot 2.x나 3.0을 쓰고 계신다면 당장 4.0으로 가는 건 좀 위험할 수 있어요.
- 패키지명 변경의 압박: javax.을 jakarta.로 다 바꿔야 하는데, 이게 생각보다 손이 많이 갑니다. (물론 OpenRewrite 같은 툴이 도와주긴 하지만요!)
- 서드파티 라이브러리 호환성: 내가 쓰는 라이브러리가 아직 Spring Boot 4를 지원 안 할 수도 있어요. 특히 레거시 XML 설정 많이 쓰는 프로젝트라면... 음... 일단 테스트부터 해보시길 권장합니다.

4. 참조하면 좋은 링크
- [Oracle 공식] JDK 25 릴리스 노트 & 다운로드 : https://jdk.java.net/25/
- Spring Boot 4.0 정식 출시 발표 (2025.11.20) : https://spring.io/blog/2025/11/20/spring-boot-4-0-0-available-now/
- IntelliJ IDEA와 함께하는 Java 25 완벽 가이드 : https://blog.jetbrains.com/idea/2025/09/java-25-lts-and-intellij-idea/
- [Inside Java] 바쁜 개발자를 위한 JDK 25 신기능 2분 요약 : https://inside.java/2025/10/17/new-in-jdk-25-2-mins/
- 2025 Java 개발자 생산성 리포트 : https://www.jrebel.com/blog/java-25
'IT > JAVA&SpringBoot' 카테고리의 다른 글
| [Spring Boot] 백엔드 개발자 필독! HTTP 클라이언트 5대장 완벽 비교 & 실전 코드 예시 모음(Restclient, WebClient, OpenFeign, HttpExchange) (0) | 2025.12.15 |
|---|---|
| Java 21(JDK 21) 개발자가 꼭 알아야 할 핵심 변경점 및 마이그레이션 가이드 (0) | 2025.12.15 |
| ☕ Java 개발자의 영원한 숙제, "도대체 어떤 JDK를 써야 할까?" 완벽 정리 (0) | 2025.12.10 |
| MessageSource 기능을 static 메서드로 사용하기 (0) | 2022.03.18 |
| Spring Batch 기동 시 JOB 상태를 STARTED에서 FAILED 로 변경하기 (0) | 2022.03.17 |
댓글