스프링부트 자바 버전 — 버전별 호환표와 변경 방법
스프링부트 자바 버전은 2.x가 Java 8 이상, 3.x와 4.x가 Java 17 이상입니다. 최대 지원 버전은 계열마다 달라서 3.3은 Java 23, 3.5는 Java 25, 4.0·4.1은 Java 26까지입니다. 즉 지금 새로 시작하는 프로젝트라면 JDK 17이 최소선이고, 그보다 낮은 JDK로는 3.x 이상을 아예 띄울 수 없습니다. 아래는 공식 System Requirements 문서에서 계열별로 확인한 호환표와, 자바 버전을 바꾸는 위치, 버전이 어긋났을 때 나는 에러까지 정리한 내용입니다. (2026년 8월 6일 확인 기준)
1. 스프링부트 버전별 자바 버전 호환표
| 스프링부트 | 최소 Java | 최대 Java | Spring Framework |
|---|---|---|---|
| 2.7.18 | 8 | 21 | 5.3.31 이상 |
| 3.3.13 | 17 | 23 | 6.1.x |
| 3.4.13 | 17 | 24 | 6.2.15 |
| 3.5.16 | 17 | 25 | 6.2.19 |
| 4.0.7 | 17 | 26 | 7.0.8 |
| 4.1.0 | 17 | 26 | 7.0.8 |
주의할 점은 "최소"만 보고 정하면 안 된다는 것입니다. 4.1도 최소는 Java 17이지만, 최신 JDK를 쓰고 싶다면 최대 지원 버전이 계열마다 다릅니다. 예를 들어 Java 25로 개발하려면 3.3·3.4에서는 지원 범위를 벗어나고 3.5 이상이어야 합니다.
2. 자바 버전을 어디서 바꾸나 — Gradle과 Maven
스프링부트 프로젝트에서 자바 버전을 지정하는 자리는 빌드 도구마다 하나씩입니다. 아래는 Spring Initializr가 실제로 만들어 주는 형태 그대로입니다.
Gradle은 build.gradle의 java 블록에 툴체인으로 지정합니다.
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Maven은 pom.xml의 properties에 있는 java.version 한 줄만 고치면 됩니다. 이 값을 spring-boot-starter-parent가 받아 컴파일러 설정으로 넘깁니다.
<properties>
<java.version>17</java.version>
</properties>
빌드 파일을 손대는 김에 환경별 설정도 함께 정리해 두면 좋습니다. 프로파일 분리는 spring boot profile 설정 글에서 다뤘습니다.
3. 자바 버전이 안 맞으면 나는 에러
낮은 JDK로 높은 버전에서 컴파일된 클래스를 실행하면 아래 에러가 납니다. JDK 21로 컴파일한 클래스를 JDK 17로 실행해 본 결과입니다.
java.lang.UnsupportedClassVersionError: Hi has been compiled by a more recent
version of the Java Runtime (class file version 65.0), this version of the
Java Runtime only recognizes class file versions up to 61.0
메시지의 숫자는 자바 버전이 아니라 클래스 파일 버전입니다. 44를 더하면 자바 버전이 됩니다.
| 클래스 파일 버전 | 자바 버전 |
|---|---|
| 52.0 | Java 8 |
| 61.0 | Java 17 |
| 65.0 | Java 21 |
그래서 위 메시지는 "Java 21로 컴파일된 걸 Java 17이 못 읽는다"는 뜻입니다. 컴파일 대상만 낮추면 그대로 실행됩니다.
javac --release 17 -d out Hi.java
참고로 스프링부트 배포 jar 자체도 Java 17 타깃으로 컴파일돼 있습니다. 3.3.5와 4.0.6의 SpringApplication.class를 꺼내 보면 둘 다 클래스 파일 버전 61(= Java 17)이고, 매니페스트의 Build-Jdk-Spec도 17입니다. 그래서 JDK 11에서는 스프링부트 3 이상이 로딩 단계에서 바로 죽습니다.
4. 지금 어떤 버전을 골라야 하나 — 지원 종료일
버전 선택에는 자바 호환만큼이나 지원 기간이 중요합니다. 2026년 8월 기준 각 계열의 오픈소스(무료) 지원 종료일은 아래와 같습니다.
| 계열 | OSS 지원 종료 | 상용 지원 종료 |
|---|---|---|
| 2.7.x | 2023-06-30 | 2029-06-30 |
| 3.4.x | 2025-12-31 | 2026-12-31 |
| 3.5.x | 2026-06-30 | 2032-06-30 |
| 4.0.x | 2026-12-31 | 2027-12-31 |
| 4.1.x | 2027-07-31 | 2028-07-31 |
새 프로젝트라면 선택지가 사실상 정해져 있습니다. Spring Initializr에서 지금 고를 수 있는 스프링부트는 4.1.0과 4.0.7뿐이고, 3.x는 목록에 없습니다. 자바 버전 선택지는 17·21·25·26이며 기본값은 17입니다.
자주 묻는 질문 (FAQ)
Q. Java 11에서 스프링부트 3을 쓸 수 있나요?
없습니다. 3.x부터 최소가 Java 17이라 실행 자체가 안 됩니다. Java 11을 유지해야 한다면 2.7.x가 마지막 선택지인데, 이미 2023년에 무료 지원이 끝난 계열입니다.
Q. 최소 버전인 17만 맞추면 최신 JDK를 써도 되나요?
계열별 최대 지원 버전을 넘지 않는 선에서만 그렇습니다. 4.1은 Java 26까지, 3.3은 Java 23까지입니다.
Q. IntelliJ에서 SDK만 바꿨는데 빌드가 그대로입니다.
빌드 파일이 기준입니다. Gradle이면 java.toolchain.languageVersion, Maven이면 java.version을 바꿔야 빌드·실행에 반영됩니다.
Q. 스프링부트 4는 자바 21 이상이 필요한 것 아닌가요?
아닙니다. 공식 System Requirements 문서 기준으로 4.1.0의 최소 요구 버전은 Java 17입니다. Initializr 기본값도 17입니다.
Q. Gradle·Maven 버전도 봐야 하나요?
네. 4.1 기준으로 Maven은 3.6.3 이상, Gradle은 8.14 이상(8.x) 또는 9.x가 필요합니다. 서블릿 컨테이너는 Tomcat 11.0.x·Jetty 12.1.x(Servlet 6.1)입니다.
마무리
정리하면 2.x = Java 8+, 3.x·4.x = Java 17+이고, 최대 지원 버전만 계열마다 다릅니다(3.3→23, 3.4→24, 3.5→25, 4.0·4.1→26). 버전을 바꿀 자리는 Gradle의 툴체인 블록과 Maven의 java.version 한 곳뿐입니다. 지금 새로 만든다면 무료 지원이 살아 있는 4.x에 JDK 17 또는 21 조합이 무난합니다. 실제 값은 계속 오르니 공식 System Requirements 페이지에서 한 번 확인하고 정하세요.
📚 참고 출처 (2026년 8월 6일 확인)
· Spring Boot 공식 문서 — System Requirements
· Spring Boot 2.7.x 레퍼런스 — System Requirements
· Spring Boot 프로젝트 지원 정책·지원 종료일
· Spring Initializr

COMMENTS