JPA와 Gradle 스택으로 프로젝트를 구성하기 위해 IDE와 환경을 세팅하던 중, 로컬환경에서 'package javax.persistence does not exist'라는 오류를 접할 수 있습니다.
(Full error msg는 → error: package javax.persistence does not exist import javax.persistence.Entity)
많은 블로그 글을 찾아보면서 그럴듯(?)한 해결책의 늪에 계속해서 빠져있을 때쯤, 결국 스택오버플로우의 해결방법을 통해 해결한 내용을 간단하게 정리합니다.
이 오류는 주로 Java Persistence API(JPA)가 프로젝트에 제대로 설정되지 않았을 때 발생합니다.
이번 포스트에서는 이 오류를 해결하기 위해 시도했던 방법을 단계별로 기록합니다.
목차
1. Jakarta Persistence로 전환
이 방법은 가장 마지막에 시도했던 방법이자 성공한 방법 입니다.
https://stackoverflow.com/questions/77257576/springboot-package-javax-persistence-does-not-exist
Spring Boot 3.0 이상을 사용하는 경우, Java EE API가 Jakarta EE로 전환되었습니다.
따라서
javax.persistence
대신
jakarta.persistence
를 사용해야 합니다.
javaimport jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
Oracle이 Java 상표권을 보유하고 있기 때문에, Jakarta EE에서는 네임스페이스가 **javax.***에서 **jakarta.***로 변경됨과 동시에 패키지명도 변경된 것 입니다.
이렇게 변경된 이유는 Java EE의 한계를 극복하고, Jakarta EE가 현대적인 엔터프라이즈 애플리케이션 개발을 위한 플랫폼으로 자리 잡기 위한 것이라고 하는데, Java 진영의 역사를 잘 모르니 궁금하신 분들은 아래를 링크를 통해서 더 자세한 내용을 보시면 좋겠습니다.
https://www.samsungsds.com/kr/insights/java_jakarta.html
2. JPA 의존성 추가하기
Java 프로젝트에서 JPA를 사용하려면 JPA 라이브러리를 의존성으로 추가해야 합니다.
의존성이 추가되지 않아 실제로 찾지 못해서 에러가 되는 경우도 더러 있는 것 같습니다.
build.gradle 파일에 다음과 같은 의존성을 추가해야합니다.
파일은 보통 {프로젝트 루트경로}/build.gradle 경로에 있습니다.
groovyimplementation 'org.springframework.boot:spring-boot-starter-data-jpa'
이 의존성은 JPA 구현체인 Hibernate를 포함해서
javax.persistence
패키지를 제공합니다.
3. IDE 동기화 문제
1번에서 Jakarta Persistence로 전환 과 의존성을 추가 했음에도 불구하고 오류가 지속된다면, IDE에서 의존성이 제대로 로드되지 않았을 수 있습니다. 시스템환경이 캐싱되는 개념과 같습니다.
IntelliJ IDEA와 같은 IDE에서는 다음과 같은 방법으로 문제를 해결할 수 있습니다.
(실제로 Pycharm 의 경우도 마찬가지로 리로드 해주는 것 만으로도 대부분 오류가 해결되긴 했습니다;;)
- Gradle 프로젝트 동기화: File 메뉴에서 **Sync Project with Gradle Files**를 선택하거나 Reload All Gradle Projects 버튼을 클릭합니다.
- 캐시 무효화 및 재시작: File > **Invalidate Caches / Restart...**를 선택하여 캐시를 무효화하고 IDE를 재시작합니다.
결론
- Jakarta Persistence로의 전환 시도
- 의존성 해결
- IDE 재시작
- 그래도 안되면 재부팅!