Debug Log

에러코드 해석하는 방법. 에러코드를 꼼꼼히 해석하는 습관을 들이자..!

밍미a 2023. 1. 8. 17:12
728x90

문제인식

프로젝트 좋아요 기능을 구현하던 도중에 빈을 생성할 수 없다는 에러가 발생하였다.

 


Try

어노테이션이 잘 달려있는지 확인했으나 어노테이션은 빠진것 없이 잘 달려있었다.

좋아요 기능의 코드 문제인 줄 알고 좋아요 기능 구현해놓은것을 주석처리 할 수 시도해보았으나 똑같은 오류가 발생하였다.

컨트롤러부터 서비스까지 하나하나 확인하며 오타가 없는지 확인하였다. 한참 찾았음에도 발견을 할 수 없었다.

최후의 방법으로 다른 사람에게 에러의 원인을 함께 봐달라고 부탁하였다.

 


문제해결

에러코드 분석 : 

에러코드 : 

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'likeController' defined in file [C:\Users\user\Documents\Sparta-codingClub\spartaCamp\myblog\dailyblog\build\classes\java\main\com\example\dailyblog\controller\LikeController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'likeService' defined in file [C:\Users\user\Documents\Sparta-codingClub\spartaCamp\myblog\dailyblog\build\classes\java\main\com\example\dailyblog\service\LikeService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'postLikeRepository' defined in com.example.dailyblog.repository.PostLikeRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.Optional com.example.dailyblog.repository.PostLikeRepository.findByUsername(java.lang.String); Reason: Failed to create query for method public abstract java.util.Optional com.example.dailyblog.repository.PostLikeRepository.findByUsername(java.lang.String)! No property 'username' found for type 'PostLikes' Did you mean ''userName''; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.example.dailyblog.repository.PostLikeRepository.findByUsername(java.lang.String)! No property 'username' found for type 'PostLikes' Did you mean ''userName''

 

에러코드 해석:

Error creating bean with name 'likeController' defined in file : 컨트롤러의 빈을 만들 수 없다 파일을 찾을 수 없다~~ 

Error creating bean with name 'likeService' defined in file  : 서비스에 빈을 만들 수 없다~ 파일을 찾을 수 없다~~

Error creating bean with name 'postLikeRepository' defined in com.example.dailyblog.repository. : com.example.dailyblog.repository 경로안에 postLikeRepository 이름의 빈을 만들 수 없다~~

Could not create query : 쿼리를 만들 수 없다~~ PostLikeRepository.findByUsername(java.lang.String) : 이 뭐리를~~

Failed to create query for method  : 메서드의 쿼리 만드는것을 실패했다~~

PostLikeRepository.findByUsername(java.lang.String)! No property 'username' found for type 'PostLikes' Did you mean ''userName'' : findByUsername의 'username'속성을 찾을 수 없다~~ ''userName''을 의미하는 것이냐~~..

 

 

>> PostLikeRepository 레파지토리의 Optional<PostLikes> findByUsername(String userName); 메서드를 

Optional<PostLikes> findByUserName(String userName); 로 바꿔주니까 해결되었다.

원인은 JPA 레파지토리의 메서드를 소문자로 입력해줘서 난 오류였다... N과n 코드로 볼때 하필 비슷하여 혼자서는 눈에 안보였다.

에러가 발생하면 에러코드의 첫줄을 천천히 읽어보자.

에러코드 첫줄을 읽었는데도 원인을 찾을 수 없다면 에러콘솔창에서 Caused by 를 검색해 한줄한줄 내려가보면서 에러의 원인을 찾아보자..! 인텔리제이가 웬만하면 다 알려준다..!


느낀점

원인을 힘들게 찾고나니, 에러코드안에 원인이 나와있었던 것을 확인하고 너무나 허무했다.

에러코드를 꼼꼼히 봐야겠다는 교훈을 얻었다.