인프런 커뮤니티 질문&답변

sol님의 프로필 이미지
sol

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

repository 위치

해결된 질문

작성

·

240

·

수정됨

1

안녕하세요 :) 강사님

 

26강(JPA 이용하여 구현) 강의를 듣던 중 UserRepository 인터페이스 파일을

강사님과 동일하게 Domain -> User 와 같은 위치에 만들고 실행시켰더니

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2023-09-11 22:14:55.016 ERROR 58408 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Resolution of declared constructors on bean Class [com.group.libraryapp.service.user.UserService] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@2437c6dc] failed; nested exception is java.lang.NoClassDefFoundError: com/group/libraryapp/repository/user/UserRepository
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:309) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1302) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1219) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.24.jar:5.3.24]

위와같은 에러가 나서 구글링과 이것저것 찾아보다가

repository 폴더 안으로 옮겼더니 정상적으로 실행이 되었습니다 :)

영상에서는 domain 클래스에 넣고 실행했을 때 정상적으로 작동이 되었는데

제 경로에서는 어떤 이유에서 에러가 발생했던건지, 정확한 답변을 찾을 수가 없어서 문의드립니다! :)

(+ bookRepository는 Book 도메인과 같이 넣어도 정상적으로 실행이 됩니다! )

답변 1

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요, sol님! 질문 주셔서 감사드립니다~~ 😊

아하~~ 어떤 이유에서 에러가 나왔는지 궁금하셨군요!! 최대한 제가 알고 있는 내용을 전달 드려 보겠습니다~!!

 

 

먼저 보내주신 내용에서 파악할 수 있는 것은 NoClassDefFoundError: com/group/libraryapp/repository/user/UserRepository 라는 문구를 통해, 해당 에러는 UserRepository라는 클래스를 찾지 못해 발생했다는 것을 알 수 있습니다.

보통 에러의 stack trace 가 발생하면 아래로 갈 수록 근본 원인이 나오게 되는데요, 이 경우도

1차 에러 : Error creating bean with name 'userService'
-> UserService를 스프링 빈으로 생성하는 것에 실패!

2차 에러 : NoClassDefFoundError: com/group/libraryapp/repository/user/UserRepository
-> UserService에서 사용하는 UserRepository를 찾을 수 없어 실패!

순서로 아래 부분이 더 근본원인이라 할 수 있습니다.

 

그렇다면, "왜 UserRepository를 찾을 수 없다고 했는가" 가 중요한 쟁점일 될텐데요!

 

추측하기로는.. UserRepository를 domain 패키지로 옮기신 이후

  1. import 구문이 정상적으로 domain 패키지를 반영하지 않았거나

  2. 다시 실행 시킬 때는 이전에 빌드 했던 결과물과 현재 코드가 섞이면서 클래스 로딩에 혼선이 있었거나


정도의 이유를 생각해볼 수 있을 것 같습니다!

 

만약 재실행 이전에 깨끗한 상태로 스프링 서버를 동작시키고 싶으시다면,

image

IntelliJ 오른쪽 gradle 탭에서 clean을 사용해보실 수 있습니다!

궁금증이 해소되셨으면 좋겠습니다! 감사합니다. 🙏

sol님의 프로필 이미지
sol
질문자

너무 쉽게 잘 설명해주셔서 감사합니다! :)

말씀해주신 답변 읽어보고 어떻게 오류 사항에 대해 생각해내야되는지도 대략적으로

감이 잡히는거 같아요!ㅎㅎㅎ 빠른 답변 감사드립니다!

sol님의 프로필 이미지
sol

작성한 질문수

질문하기