얼마 전부터 SpringBoot를 본격적으로 공부하기 시작했는데, 오늘 황당한 경험을 했다.
이 문제가 IDE별로 차이가 발생하는 문제인지는 모르겠으나, 필자의 개발툴은 Intellij를 사용하고 있다.
먼저 에러 로그와 상황을 보자.
# error log
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class
[개발 환경]
- Intellij
- multi module gradle
- SpringBoot
위 같이 개발 환경을 구성하고 main class를 작성했을 뿐인데, 저런 에러가 발생했다.
[해결방안]
main class를 package 안에 위치 시켜라.
에러가 깔끔히 사라졌다.
원인이 무엇인지 정확히는 모르겠으나 아마 아래의 내용과 관련이 있어 보인다.
@SpringBootApplication 어노테이션은 Spring의 3가지 성격을 가진 어노테이션을 묶어놓은 것이다.
- @Configuration : 이 어노테이션은 스프링의 자바 기반 구성 클래스를 지정한다. Spring Boot는 Java-based 설정을 선호한다. 따라서 필요한 클래스에 @Configuration 을 추가하여 설정 클래스를 가져올 수 있다.
- @EnableAutoConfiguration : 이 어노테이션은 Spring Boot에서 기본 beans 들을 classpath 설정이나 다른 beans, 여러가지 property 등 어플리케이션에 추가된 jar와 관련된 설정을 자동으로 설정한다. 또한 EnableAutoConfiguration은 main class가 위치해있는 root package를 기본 package로 정의한다. 예를 들면, 만약 JPA 애플리케이션을 작성하는 경우에, @EnableAutoConfiguration 애노테이션이 위치한 클래스의 패키지는 @Entity 항목을 검색하는데 사용된다.
- @ComponentScan : 컴포넌트 검색 기능을 활성화 한다. 이 어노테이션도 특별한 basePackage 속성을 지정하지 않고도 main class가 위치해있는 root package를 기본 속성으로 사용하여 자동으로 다른 컴포넌트 클래스들을 검색하여 빈으로 등록한다.
=> 아마도 @SpringBootApplication 어노테이션으로 인해 root package를 찾는데, 내가 package를 생성해주지 않아서 오류가 발생했던 것 같다. 자세한 내용은 조금 더 찾아봐야겠다.
갈 길이 멀구나.
<참조 사이트>