티스토리 뷰

Spring Boot 애플리케이션을 개발하면서 Not a managed type 에러를 만나게 되는 경우가 종종 있습니다. 이 에러는 주로 JPA와 관련된 문제로, Spring Data JPA가 엔티티 클래스를 관리할 수 없음을 나타냅니다. 이번 글에서는 이 에러의 원인과 해결 방법을 살펴보겠습니다.
Not a managed type 에러란?
Spring Data JPA는 @Entity 어노테이션이 선언된 클래스를 관리합니다. 하지만 JPA가 해당 클래스를 관리 대상으로 인식하지 못하면 다음과 같은 에러가 발생할 수 있습니다:
java.lang.IllegalArgumentException: Not a managed type: class com.example.demo.entity.MyEntity
이 에러는 주로 다음과 같은 경우에 발생합니다:
- @Entity 어노테이션이 누락되었거나 잘못 설정된 경우
- 패키지 스캔 범위가 잘못 설정된 경우
- 엔티티가 제대로 빌드되지 않은 경우
에러의 주요 원인과 해결 방법
1. @Entity 어노테이션 누락
JPA 엔티티로 등록하려는 클래스에 @Entity 어노테이션이 누락된 경우 에러가 발생합니다.
문제 코드:
package com.example.demo.entity;
public class MyEntity {
private Long id;
private String name;
}
해결 방법: 클래스에 @Entity 어노테이션을 추가하세요:
package com.example.demo.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class MyEntity {
@Id
private Long id;
private String name;
}
2. 패키지 스캔 범위 문제
Spring Boot는 기본적으로 @SpringBootApplication이 선언된 클래스의 패키지와 하위 패키지를 스캔합니다. 엔티티 클래스가 스캔 범위 밖에 있는 경우 에러가 발생할 수 있습니다.
해결 방법:
- 엔티티 클래스가 @SpringBootApplication 클래스의 하위 패키지에 위치하도록 이동합니다.
- @EntityScan 어노테이션을 사용하여 명시적으로 엔티티 패키지를 지정합니다:
import org.springframework.boot.autoconfigure.domain.EntityScan;
@SpringBootApplication
@EntityScan(basePackages = "com.example.demo.entity")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
3. Hibernate 설정 문제
Hibernate 설정이 누락되었거나, 데이터베이스와의 연결 설정이 잘못된 경우에도 이 에러가 발생할 수 있습니다.
해결 방법:
application.properties 또는 application.yml에 올바른 설정을 추가하세요:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.jpa.hibernate.ddl-auto=update
디버깅 팁
- 에러 로그 확인: 정확한 원인을 파악하기 위해 전체 에러 메시지를 확인하세요.
- 빌드 클린: mvn clean 또는 gradle clean 명령어로 프로젝트를 정리하고 다시 빌드합니다.
- 패키지 구조 점검: 엔티티 클래스와 @SpringBootApplication 클래스의 패키지 구조를 확인하세요.
- 의존성 확인: spring-boot-starter-data-jpa와 같은 JPA 관련 의존성이 포함되었는지 확인하세요.
참고 자료
더 자세한 내용은 공식 Spring Boot 및 Hibernate 문서를 참조하세요:
결론
Not a managed type 에러는 주로 엔티티 클래스 설정 문제나 패키지 스캔 범위 설정 문제에서 발생합니다. 위에서 소개한 해결 방법을 따라가며 문제를 하나씩 점검하면 쉽게 해결할 수 있습니다. 문제가 지속된다면 공식 문서를 참조하거나 추가적인 디버깅을 진행해 보세요.
- Spring Boot JPA
- Not a Managed Type 에러
- Spring Data JPA 설정
- Hibernate 문제 해결
- 엔티티 클래스 설정
- 패키지 스캔 범위
- JPA 디버깅 팁
- Spring Boot 에러 해결
- application.properties 설정
- @EntityScan 활용법
'웹 개발 > 백엔드' 카테고리의 다른 글
| Spring Data JPA에서 여러 AND 조건으로 동적 쿼리 작성하기 (Specification & Querydsl 비교) (0) | 2025.01.05 |
|---|---|
| Spring @Resource vs @Autowired 차이점 비교 (0) | 2025.01.01 |
| Spring Boot 에러 페이지 직접 만들기: Whitelabel Error Page 대체 방법 (1) | 2024.12.19 |
| Spring MVC 오류 해결: ClassNotFoundException 발생 원인과 해결 방법 (1) | 2024.12.15 |
| Jackson ObjectMapper 활용법: Spring에서 JSON 다루기 (0) | 2024.12.12 |