히콩쓰 개발 일지
SpringBoot UnsatisfiedDependencyException 해결 본문
UnsatisfiedDependencyException
: 직역_만족되지 않은 종속성 예외
프로젝트 구현 중, 위와 같은 에러를 마주했다.
에러 코드를 읽어보니, Bean 생성에 실패한 것이었고, 구글링 해보니 대부분 @Service
@Controller
@Component
의 Annotation 관련 오류였다.
하지만, 구현된 코드에는 Annotation이 적절하게 작성되어 있었고, 혹시나 하여 파일 위치까지 잘 살펴봤지만 별다른 문제를 발견하지 못했다.
그런데 왜 Service와 Controller 모두 Bean 생성이 되지 않는 것인지 도무지 알 수 없었고, 단순히 Annotation 문제라고 생각했던 자신을 책망하며 에러코드를 뜯어보기 시작했다.
에러코드를 천천히 살펴보니, 가장 아래쪽에서 그 원인을 찾을 수 있었다.
Could not resolve placeholder 'jwt.secret.key' in value "${jwt.secret.key}"
카카오 로그인을 구현하면서 토큰을 생성하기 위해 Jwt를 사용하고 있었는데, 이 때⭐ jwt secret key
를 제대로 받아오지 못해 발생한 문제로 추측됐다.
jwt secret key
는 원래 이렇게 관리하면 안되지만, 쉽고 빠른 구현을 위해 application.yml 파일에 직접 넣어놓은 상태였다.
jwt:
secret:
key= 7Iqk7YyM66W07YOA7L2(이하 생략)
원래 application.properties로만 사용하다가 이번 프로젝트에서 yml 파일을 사용하게 됐는데, 문법이 익숙치 않았고 아래의 원래 코드를 복붙해서 넣었다.
jwt.secret.key=7Iqk7YyM66W07YOAL2(이하 생략)
위 코드를 yml 파일에 복사해서 넣으니, intellij에서 형식을 자동으로 변환해주길래 나보다 똑똑한 intellij를 믿었다.
⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️
하지만 intellij가 변환해준 코드는 아래와 같았고, 이 _문법적 오류 때문에 애초에❗ Bean 생성이 되지 않고 있었던 것_이다.
jwt:
secret:
key=7Iqk7YyM66W07YOA7L2(···)Lg==:
정상적인 코드 작성을 위해 yml 파일의 문법 형식에 맞게 아래와 같이 코드를 수정하였다.
jwt:
secret:
key: 7Iqk7YyM66W07YOA7L2(이하 생략)
코드를 수정하니, 정상적으로 작동되었다.
Annotation의 문제가 가장 흔하고 많을 테지만, Annotation의 문제가 아니라고 판단된다면 에러코드를 천천히 읽어보면서 문제의 원인을 파악하는 것이 좋을 것 같다.
구글링의 결과가 전부 Annotation 오류여서 다른 이유를 생각하기 어려웠는데, 항상 문제의 원인은 다양할 것이며 구글링이 무조건 내 상황과 완벽하게 일치하지는 않을 것이다. 라는 생각을 기본적으로 해야겠다고 느낀 계기가 되었다.ಥ_ಥ 바보같은 실수를 해버렸다😭