Spring Boot 3.0은 단순한 버전업이 아닙니다. Java 17, Jakarta EE 전환, 대대적인 API 정비까지—지금 마이그레이션 준비가 되셨나요? 이 가이드에서 안정적이고 체계적인 이전 전략을 확인하세요.
Spring Boot 3.0 마이그레이션의 핵심 변경 사항

Spring Boot 3.0은 단순한 프레임워크의 업데이트가 아닌, 자바 백엔드 개발 환경 전반에 영향을 미치는 대규모 변화를 포함하고 있습니다. 이번 버전은 Java 17을 최소 요구사항으로 하고 있으며, Jakarta EE 9+로의 전환을 통해 API 네임스페이스가 변경되었습니다. 이러한 변화는 기존 프로젝트에 큰 영향을 줄 수 있으므로, 마이그레이션 전에 반드시 주요 변경 사항을 이해하고 대비해야 합니다.
1. Java 17 이상 필수
Spring Boot 3.0은 Java 17을 최소 버전으로 요구합니다. 이는 레코드(Record), 패턴 매칭, Sealed 클래스 등 최신 자바 기능을 활용할 수 있다는 장점이 있지만, 기존 Java 8 또는 11 기반 프로젝트는 JDK 업그레이드가 선행되어야 합니다.
- JDK 17 설치 및 빌드 환경 점검
- 라이브러리 호환성 확인 (특히 bytecode 버전)
- JVM 옵션 및 GC 설정 재검토
2. Jakarta EE 9+ 네임스페이스 전환
Spring Boot 3.0은 Jakarta EE 9+를 기반으로 하며, 기존의 javax.*
패키지가 jakarta.*
로 변경되었습니다. 이는 특히 서블릿, JPA, Bean Validation을 사용하는 애플리케이션에 직접적인 영향을 미칩니다.
예를 들어, 다음과 같은 코드 변경이 필요합니다:
import javax.persistence.Entity;
// 변경 후
import jakarta.persistence.Entity;
이러한 변경은 단순한 검색/치환 이상의 작업이 필요할 수 있으며, 라이브러리 호환성도 함께 확인해야 합니다.
3. Deprecated API 제거 및 정비
Spring Boot 3.0에서는 그동안 Deprecated 처리되었던 API들이 완전히 제거되었습니다. 예를 들어, 일부 Spring Security
설정 방식이나 WebMvcConfigurerAdapter
등은 더 이상 사용할 수 없습니다.
이로 인해 마이그레이션 시 다음과 같은 점검이 필요합니다:
- 사용 중인 API의 Deprecated 여부 확인
- 대체 API로의 변경
- 라이브러리 버전 업그레이드 (Spring Security, Spring Data 등)
4. Native Image 지원 강화
Spring Boot 3.0은 GraalVM 기반의 Native Image 빌드를 공식 지원합니다. 이는 클라우드 환경에서 빠른 기동 시간과 낮은 메모리 사용량을 가능하게 합니다.
하지만 Native Image 빌드를 위해서는 다음과 같은 준비가 필요합니다:
- 리플렉션 사용 최소화
- Spring AOT (Ahead-of-Time) 컴파일 설정
- GraalVM 설치 및 환경 설정
Spring Boot 3.0의 Native Image 지원은 특히 Spring Native 프로젝트와 통합되어 있으며, 향후 클라우드 네이티브 개발에 큰 장점이 될 수 있습니다.
5. Spring Framework 6 기반
Spring Boot 3.0은 Spring Framework 6을 기반으로 하며, 이는 Observability, AOT 컴파일, Jakarta EE 호환성 등 다양한 최신 기능을 포함합니다. 특히 Micrometer
를 통한 메트릭 수집과 Actuator
의 기능 확장이 주목할 만합니다.
이전 버전과의 주요 차이점은 다음과 같습니다:
항목 | Spring Boot 2.x | Spring Boot 3.0 |
---|---|---|
Java 버전 | Java 8~11 | Java 17 이상 |
EE 네임스페이스 | javax.* | jakarta.* |
Native Image | 미지원 또는 실험적 | 공식 지원 |
Java 17 및 Jakarta EE 도입에 따른 영향

Spring Boot 3.0으로의 마이그레이션은 단순한 버전 업그레이드가 아닌 플랫폼 전환에 가까운 변화입니다. 특히 Java 17과 Jakarta EE의 도입은 기존 백엔드 아키텍처에 큰 영향을 미치며, 개발자와 운영팀 모두가 주의 깊게 접근해야 합니다.
Java 17 도입의 주요 변화
Spring Boot 3.0은 Java 17을 최소 요구 버전으로 지정하고 있습니다. 이는 Java 8 또는 Java 11을 사용하던 프로젝트에게는 큰 변화입니다. Java 17은 LTS(Long Term Support) 버전으로 안정성과 성능 향상이 크며, 다음과 같은 기능들이 도입되었습니다:
- Sealed Classes: 클래스 계층 구조를 제한하여 보안성과 유지보수성을 높임
- Pattern Matching for instanceof: 코드 간결성과 가독성 향상
- Switch Expressions: 더 유연하고 강력한 switch 문 사용 가능
- Enhanced Pseudo-Random Number Generators: 더 정밀한 난수 생성 제어
이러한 기능들은 코드의 표현력을 높이고, 성능 개선에도 도움을 줍니다. 하지만 기존 코드와의 호환성 문제도 발생할 수 있으므로, 반드시 사전 테스트가 필요합니다.
Jakarta EE 전환의 영향
Spring Boot 3.0은 Jakarta EE 9+를 기반으로 합니다. 이는 기존의 javax 패키지가 jakarta 패키지로 완전히 변경되었음을 의미합니다. 예를 들어, javax.servlet
은 이제 jakarta.servlet
로 변경되어야 합니다.
이러한 변경은 다음과 같은 영향을 미칩니다:
기존 패키지 | 변경된 패키지 | 영향 |
---|---|---|
javax.servlet | jakarta.servlet | 모든 서블릿 관련 코드 및 라이브러리 수정 필요 |
javax.persistence | jakarta.persistence | JPA 관련 엔티티, Repository 등 전면 수정 필요 |
javax.validation | jakarta.validation | Bean Validation 어노테이션 및 Validator 변경 필요 |
이러한 변경은 서드파티 라이브러리에도 영향을 미칩니다. 아직 Jakarta EE 9+를 지원하지 않는 라이브러리를 사용하는 경우, 해당 라이브러리의 최신 버전으로 교체하거나 대체 라이브러리를 검토해야 합니다.
대응 전략
Java 17과 Jakarta EE 전환에 효과적으로 대응하기 위해 다음과 같은 전략을 추천합니다:
- 의존성 점검: Maven 또는 Gradle에서 사용하는 모든 라이브러리의 Jakarta EE 9+ 지원 여부 확인
- 코드 리팩토링: javax 패키지를 사용하는 모든 코드에서 jakarta로 변경
- 테스트 자동화: 마이그레이션 후 회귀 테스트를 위한 테스트 코드 정비
- CI/CD 파이프라인 점검: 빌드 및 배포 환경에서 Java 17이 적용되었는지 확인
Spring 팀은 공식적으로 Spring Boot 3.0 마이그레이션 가이드를 제공하고 있으니, 반드시 참고하여 마이그레이션을 준비하시기 바랍니다.
Spring Boot 2.7.x 경유 업그레이드 전략

Spring Boot 3.0으로의 마이그레이션은 단순한 버전 업그레이드가 아닌, Java 17과 Jakarta EE 9 기반으로의 전환이라는 큰 변화를 포함합니다. 이러한 변화는 기존 애플리케이션에 큰 영향을 줄 수 있기 때문에, Spring Boot 2.7.x를 경유한 점진적 업그레이드 전략이 매우 중요합니다.
왜 Spring Boot 2.7.x를 거쳐야 할까?
Spring Boot 2.7.x는 Spring Boot 2와 3 사이의 브리지 역할을 합니다. 이 버전은 Jakarta EE 네임스페이스로의 전환을 준비할 수 있도록 도와주며, Java 17과의 호환성도 제공합니다. 또한, Spring Framework 5.3을 기반으로 하여 기존 코드와의 호환성을 최대한 유지할 수 있도록 설계되었습니다.
업그레이드 순서 및 체크리스트
안정적인 마이그레이션을 위해 다음과 같은 단계별 전략을 따르는 것이 좋습니다.
- Java 17로 업그레이드: Spring Boot 3.0은 Java 17 이상을 요구합니다. 먼저 Java 17로 프로젝트를 빌드하고 테스트하여 호환성을 확인하세요.
- Spring Boot 2.7.x로 업그레이드: 현재 사용 중인 버전이 2.6 이하라면, 먼저 2.7.x로 업그레이드합니다. 이 과정에서 deprecated API나 경고 메시지를 확인하고 수정하세요.
- 의존성 정리: Gradle 또는 Maven에서 사용하는 라이브러리들이 Spring Boot 3.0과 호환되는지 확인하고, 필요시 최신 버전으로 업데이트합니다.
- Jakarta EE 네임스페이스 전환 준비: javax 패키지에서 jakarta 패키지로의 변경이 필요합니다. 예를 들어,
javax.servlet
→jakarta.servlet
로 변경해야 합니다. - 테스트 및 모니터링: 업그레이드 후에는 모든 단위 테스트와 통합 테스트를 실행하고, 성능 모니터링 도구를 통해 문제점을 조기에 발견할 수 있도록 합니다.
Spring Boot 2.7.x와 3.0의 주요 차이점 비교
항목 | Spring Boot 2.7.x | Spring Boot 3.0 |
---|---|---|
Java 버전 | Java 8~17 지원 | Java 17 이상 필수 |
EE 네임스페이스 | javax | jakarta |
Spring Framework | 5.3 | 6.0 |
호환성 | 기존 코드와 호환성 높음 | 대규모 리팩토링 필요 가능성 |
마이그레이션 시 주의할 점
- 라이브러리 호환성: 일부 서드파티 라이브러리는 아직 Jakarta EE를 지원하지 않을 수 있습니다. 반드시 호환성 여부를 확인하세요.
- 빌드 도구 설정: Gradle이나 Maven의 플러그인 버전도 최신으로 유지해야 오류를 방지할 수 있습니다.
- 테스트 코드 리팩토링: javax 네임스페이스를 사용하는 테스트 코드도 함께 수정해야 합니다.
Spring 공식 문서 참고
보다 정확한 정보를 위해 Spring Boot 마이그레이션 가이드를 참고하세요.
Deprecated API 정리와 설정 키 변경 대응법

Spring Boot 3.0으로 마이그레이션을 준비하는 개발자라면 가장 먼저 확인해야 할 부분 중 하나가 바로 Deprecated API와 설정 키 변경입니다. 이 두 가지는 단순히 코드 변경을 넘어, 전체 애플리케이션의 안정성과 성능에 직접적인 영향을 미치기 때문에 반드시 꼼꼼하게 점검해야 합니다.
1. Deprecated API 정리: Jakarta EE 전환의 핵심
Spring Boot 3.0은 Jakarta EE 9+를 기반으로 하며, 이는 기존의 javax.*
패키지가 jakarta.*
로 변경되었음을 의미합니다. 이로 인해 많은 기존 API가 Deprecated 처리되었고, 더 이상 사용이 불가능한 경우도 많습니다.
예를 들어, 다음과 같은 변경이 필요합니다:
javax.servlet
→jakarta.servlet
javax.persistence
→jakarta.persistence
javax.validation
→jakarta.validation
이러한 변경은 단순한 패키지명 수정이 아니라, 의존성 관리와 빌드 설정까지 함께 점검해야 합니다. IDE의 자동 리팩토링 기능을 활용하거나, Spring 공식 마이그레이션 가이드를 참고하여 단계적으로 적용하는 것이 좋습니다.
2. application.properties 및 application.yml 설정 키 변경
Spring Boot 3.0에서는 설정 키의 명명 규칙이 일부 변경되었으며, 더 이상 사용되지 않는 키도 존재합니다. 이는 설정 충돌, 비정상 동작의 원인이 될 수 있으므로 반드시 확인이 필요합니다.
대표적인 변경 예시는 다음과 같습니다:
기존 설정 키 | 변경된 설정 키 | 비고 |
---|---|---|
server.ssl.key-store-type | server.ssl.keystore-type | 하이픈(-) 대신 카멜케이스 적용 |
spring.jpa.properties.hibernate.dialect | spring.jpa.database-platform | Hibernate 설정 방식 변경 |
management.endpoints.web.exposure.include | management.endpoints.web.exposure.include | 유지되지만 일부 옵션 변경 |
이러한 변경 사항은 Spring Boot 공식 설정 문서에서 최신 정보를 확인할 수 있습니다. 특히 application.yml을 사용하는 경우, 들여쓰기 오류나 키 오타로 인해 애플리케이션이 정상 작동하지 않을 수 있으므로 더욱 주의가 필요합니다.
3. 마이그레이션 자동화 도구 활용
마이그레이션 시 수작업으로 모든 API와 설정을 점검하는 것은 매우 비효율적입니다. 다음과 같은 도구를 활용하면 훨씬 수월하게 이전 작업을 진행할 수 있습니다:
- OpenRewrite: 코드 자동 리팩토링 도구로, Jakarta EE 전환을 지원합니다.
- Spring Boot Migration Guide: 공식 문서 기반의 단계별 가이드 제공
- Spring Initializr: 새로운 프로젝트 구조로 재생성하여 비교 가능
Spring Boot 3.0으로의 전환은 단순한 업그레이드가 아닌, 애플리케이션 구조와 설정 전반을 재정비하는 과정입니다. Deprecated API와 설정 키 변경 사항을 철저히 점검하고, 자동화 도구를 적극 활용한다면 안정적인 마이그레이션이 가능합니다.
마이그레이션 테스트 및 운영 전 검증 절차

Spring Boot 3.0으로의 마이그레이션은 단순한 코드 변경을 넘어, 운영 안정성 확보를 위한 철저한 테스트와 검증이 필수입니다. 특히 Jakarta EE 전환과 Java 17 지원으로 인해, 기존 코드와의 호환성 문제가 발생할 수 있으므로, 단계별로 테스트를 수행하고 운영 전 최종 검증을 거쳐야 합니다.
1. 로컬 및 단위 테스트 강화
마이그레이션 후 가장 먼저 수행해야 할 작업은 단위 테스트(Unit Test)와 로컬 환경 테스트입니다. 기존 테스트 코드가 Java 17 및 Jakarta EE 환경에서도 정상적으로 작동하는지 확인해야 하며, 다음 항목을 중점적으로 점검하세요:
- @WebMvcTest, @DataJpaTest 등 Spring Boot 테스트 어노테이션 호환성
- Mockito, JUnit5, AssertJ 등 테스트 라이브러리의 최신 버전 적용 여부
- Bean 주입 방식 변경에 따른 테스트 실패 여부
2. 통합 테스트 및 QA 환경 구축
단위 테스트를 통과했다면, 다음은 통합 테스트(Integration Test)입니다. 실제 운영 환경과 유사한 QA 환경을 구성하여 전체 애플리케이션 흐름을 검증합니다. 특히 다음 항목을 확인하세요:
- API 요청 및 응답 포맷이 변경되지 않았는지
- 스프링 시큐리티 설정 변경으로 인한 인증/인가 오류 여부
- 데이터베이스 마이그레이션 스크립트 정상 작동 여부
CI/CD 파이프라인을 통해 자동화된 테스트를 실행하면, 변경 사항이 누락되지 않고 검증됩니다.
3. 성능 테스트 및 부하 테스트
새로운 버전으로 마이그레이션한 후에는 성능 테스트를 통해 시스템의 응답 속도와 처리량을 측정해야 합니다. Java 17의 Garbage Collector 변화나 JVM 최적화로 인해 성능이 달라질 수 있기 때문입니다.
대표적인 도구로는 다음과 같은 것들이 있습니다:
도구 | 특징 |
---|---|
JMeter | HTTP 요청 기반 부하 테스트, 다양한 시나리오 설정 가능 |
Gatling | Scala 기반, 코드로 시나리오 작성 가능, 고성능 |
Locust | Python 기반, 분산 테스트 지원 |
4. 운영 전 최종 검증 체크리스트
운영 환경에 배포하기 전, 다음과 같은 체크리스트를 통해 마지막 검증을 수행하세요:
- Spring Boot 3.0에서 deprecated된 API 사용 여부 확인
- Jakarta EE 네임스페이스 변경에 따른 클래스 충돌 여부
- 서드파티 라이브러리 호환성 (예: Swagger, Lombok, MapStruct 등)
- 운영 로그 및 모니터링 시스템 정상 작동 여부
- 롤백 전략 및 백업 데이터 확보 여부
운영 환경에서의 예기치 못한 오류를 방지하기 위해, Spring 공식 문서를 참고하여 변경된 API와 설정을 꼼꼼히 확인하는 것이 중요합니다.
실무에서 마이그레이션할 때 주의할 점과 팁

Spring Boot 3.0으로의 마이그레이션은 단순한 버전 업그레이드가 아니라, 애플리케이션의 근간을 바꾸는 작업입니다. 특히 Jakarta EE 전환과 Java 17 이상 사용이 필수이기 때문에, 실무에서는 보다 신중한 접근이 필요합니다. 아래에서는 마이그레이션 시 반드시 고려해야 할 주요 포인트와 실무 팁을 정리했습니다.
1. Jakarta EE 네임스페이스 변경 확인
Spring Boot 3.0은 Jakarta EE 9+를 기반으로 하기 때문에, 기존의 javax.*
패키지가 jakarta.*
로 변경되었습니다. 이는 단순한 이름 변경이 아니라, 모든 의존성, 코드, 설정 파일에 영향을 미칩니다.
- 기존 코드에서
javax.persistence
,javax.servlet
등을 사용하는 경우, 모두jakarta.persistence
,jakarta.servlet
로 변경해야 합니다. - 라이브러리 중 일부는 아직 Jakarta EE를 지원하지 않을 수 있으므로, 라이브러리 호환성을 반드시 확인하세요.
2. Java 17 이상으로 업그레이드
Spring Boot 3.0은 Java 17 이상이 필요합니다. 따라서 JDK 버전 업그레이드가 선행되어야 하며, 코드에서 deprecated API나 새로운 문법 사용 여부를 점검해야 합니다.
항목 | Java 11 | Java 17 |
---|---|---|
지원 기간 | 2026년까지 | 2029년까지 (LTS) |
새로운 기능 | 기본 | Record, Pattern Matching, Sealed Class 등 |
Spring Boot 3.0 호환 | 불가 | 필수 |
3. 의존성 및 서드파티 라이브러리 점검
Spring Boot 3.0은 많은 라이브러리 버전이 상향되었기 때문에, 기존 프로젝트에서 사용하는 서드파티 라이브러리가 호환되는지 확인해야 합니다. 예를 들어, springfox-swagger
는 Jakarta EE를 지원하지 않기 때문에, springdoc-openapi로의 전환이 필요합니다.
추천 라이브러리 대체 예시:
- Swagger: springfox → springdoc-openapi
- JPA: Hibernate 5.x → Hibernate 6.x
- Validation: javax.validation → jakarta.validation
4. 테스트 코드 및 빌드 설정 수정
기존의 JUnit 4 기반 테스트는 JUnit 5로 마이그레이션하는 것이 좋습니다. 또한, Gradle이나 Maven 설정에서 spring-boot-starter-parent
버전도 3.0 이상으로 변경해야 하며, plugin
버전도 최신화해야 합니다.
예시: Maven 설정 변경
org.springframework.boot
spring-boot-starter-parent
3.0.0
5. 점진적 마이그레이션 전략 수립
모든 코드를 한 번에 변경하는 것은 리스크가 큽니다. 따라서 다음과 같은 단계적 마이그레이션 전략을 추천합니다.
- Java 17로 먼저 업그레이드하고, 기존 코드가 정상 작동하는지 확인
- Jakarta EE 네임스페이스로 코드 리팩토링
- 의존성 라이브러리 호환성 점검 및 교체
- Spring Boot 3.0으로 버전 업그레이드
- 테스트 코드 및 빌드 환경 점검
이러한 전략을 통해 서비스 중단 없이 안정적인 이전이 가능합니다.