본문 바로가기
TIL (Today I Learned)

TIL) Spring에서 Error creating bean with name 에러 발생!

by Won's log 2023. 6. 26.

Spring으로 과제 진행 중 실행시킬 때 다음과 같은 에러 메시지가 나왔다.

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productController' defined in file [/Users/...controller/ProductController.class]: 
Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'productService' defined in file 
[/Users/...myselectshop/service/ProductService.class]: Unsatisfied dependency expressed through constructor parameter 0: 
Error creating bean with name 'productRepository' defined in com.sparta.myselectshop.repository.ProductRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.
EnableJpaRepositoriesConfiguration: Could not create query for public abstract org.springframework.data.domain.Page com.sparta.myselectshop.repository.ProductRepository.
findAllByUserAndProductFolderList_FolderId(com.sparta.myselectshop.entity.User,java.lang.Long,org.springframework.data.domain.Pageable); 
Reason: Failed to create query for method public abstract org.springframework.data.domain.Page com.sparta.myselectshop.repository.ProductRepository.findAllByUserAndProductFolderList_FolderId(com.sparta.myselectshop.entity.User,java.lang.Long,org.springframework.data.domain.Pageable); 
No property 'productFolderList' found for type 'Product'; Did you mean 'productFoldersList'

끊어서 읽어보니 Error creating bean with name '.. Controller'에서 문제가 발생했고 이어서 읽어보니 '... Service'와 '... Repository'에서 문제가 발생하였다.

일단 스프링에서는 빈 생성은 빈번하게 발생한다고 한다. 그리고 주된 이유로는 대부분 서버를 새로 시작할 때 발생(Servlet)한다고 한다. 

이와 같은 메시지가 뜨는 경우 다음과 같이 세가지 방법을 확인해 보면 된다. 

 

1. Unsatisfied dependency expressed through field 'XXXService';

어노테이션이 있는지 확인해보기. @Service 혹은 @Component가 포함되어 있는지 확인해 보기

 

2. Unsatisfied dependency expressed through field 'XXXServiceImpl';

어노테이션이 있는지 확인해 보기.@Repository 등)

 

3. 작성한 Sql(쿼리)의 오타나 에러를 확인해 보기

쿼리문이나 다른 코드의 오타나 스펠링 오류가 있는지 확인해 보기

 

나의 경우, 오류 메시지 마지막에서 No property 'productFolderList' found for type 'Product'; Did you mean 'productFoldersList'이 나온다.읽는 순간 아차 싶어서 productFolderList가 확인되는 파일을 검색하고 트랙 하기 시작했다.

아니나 다를까 ProductResponseDto 파일에서 's'를 포함한 것이 확인되어 수정해 보니 코드가 잘 작동하게 되었다.

 

새 앎: 코드는 거짓말을 하지 않는다. 사람보다 더 정확하고 정직하게 결과를 드러낸다. 어쩌면 코딩은 내가 생각하는 것보다 덜 복잡한, 오히려 생각보다 접근이 용이하고 간단한 기능이 아닐까 싶다. 인간은 문제가 발생하면 자연치유력이 있으니 그냥 내두어도 괜찮은 반면 코드는 스스로 치유할 수 없으니 오류가 발생하면 '내'가 직접 문제를 해결하기 위해 힘써야 한다. 다만 인간의 자가면역력과 다르게 코딩은 문제가 발생한 원인과 결과가 또렷하다. 상처가 언제 치료되고 흉이 질까 고민하는 인간의 문제보다 어쩌면 코딩은 명확한 해결법이 존재하니 문제를 해결하는 데에 있어서 거침이 없어도 괜찮지 않을까라는 마음이 들었다. 즉 코딩은 정답과 해결법이 꼭 존재하니 오류와 문제를 해결하는 과정이 캄캄한 어둠 속을 헤쳐가는 것이 아닌 이미 답이 있을 것이라는 확신 속에 그 순간을 즐기면서 도전하는 것이 더 재밌게 코딩을 하는 방법이 아닐까 한다.

== 오류를 두려워하지 말자. 정답과 해결법은 항상 있다.