Programming
[Spring Boot 2.x -> Spring Boot 3.x] 마이그레이션 javax.* → jakarta.* 패키지 변경
ipxy
2025. 3. 22. 14:35
728x90
Spring Boot 3.x로 넘어오면서 가장 큰 변화 중 하나가 바로 javax.* → jakarta.* 패키지 변경입니다. 이건 단순한 이름 변경이 아니라, 마이그레이션 시 컴파일 에러와 런타임 이슈를 유발할 수 있기 때문에 매우 중요합니다.
☕ 배경 설명: 왜 javax에서 jakarta로 바뀌었을까?
- javax.*는 원래 Oracle이 소유한 Java EE 패키지 네임스페이스입니다.
- Java EE는 후에 Eclipse 재단으로 이관되었고, 이름도 Jakarta EE로 바뀌었습니다.
- 하지만 Oracle이 javax 네임스페이스를 계속 소유하고 있어서, Eclipse 재단은 새로운 이름 jakarta를 사용해야만 했습니다.
- 그래서 Spring Framework 6 & Spring Boot 3부터는 모든 관련 의존성이 jakarta.*로 변경되었습니다.
✅ 주요 변경 예시
Java EE API | 변경 전 (Spring Boot 2.x 이하) | 변경 후 (Spring Boot 3.x 이상) |
Servlet API | javax.servlet.* | jakarta.servlet.* |
JPA | javax.persistence.* | jakarta.persistence.* |
Bean Validation | javax.validation.* | jakarta.validation.* |
JAXB | javax.xml.bind.* | jakarta.xml.bind.* |
🔧 예제 코드 비교
Spring Boot 2.x (javax)
import javax.validation.constraints.NotBlank;
public class UserDto {
@NotBlank
private String username;
}
Spring Boot 3.x (jakarta)
import jakarta.validation.constraints.NotBlank;
public class UserDto {
@NotBlank
private String username;
}
🔁 마이그레이션 팁
1. Gradle 의존성 체크
Spring Boot 3.x에서는 다음처럼 의존성 버전도 맞춰야 합니다:
dependencies {
implementation 'jakarta.validation:jakarta.validation-api:3.0.2'
implementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
}
대부분은 spring-boot-starter-*가 자동으로 포함해주지만, 직접 사용하는 경우 확인이 필요합니다.
2. IDE 자동 변경 (IntelliJ 기준)
- Find and Replace 혹은 Replace Structurally 기능을 사용하면 javax. → jakarta.로 쉽게 일괄 변경할 수 있습니다.
3. 주의할 점
- 단순히 import만 바꾼다고 끝나는 게 아니라, 해당 API 버전 자체가 바뀌었기 때문에 일부 동작 방식도 달라질 수 있습니다.
- 특히 JPA, Validation, JAXB 등을 직접 사용하는 경우 라이브러리 호환성을 꼭 확인해야 합니다.
📌 정리
항목 | 변경 내용 |
네임스페이스 | javax.* → jakarta.* |
적용 버전 | Spring Framework 6 / Spring Boot 3 이상 |
영향 범위 | JPA, Validation, Servlet 등 Java EE 관련 전반 |
마이그레이션 시 주의 | import 변경 + 라이브러리 호환성 확인 필요 |
728x90