문제 정의 (원인)
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'webSecurityConfig' defined in file
[C:\Users\derse\OneDrive\Desktop\Spring\project\Jamrello\build\classes\java\main\com\sparta\jamrello\global\config\WebSecurityConfig.class]:
Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'jwtUtil': Invocation of init method failed
Java
복사
•
사실 수집
MemberService단 통합테스트에서 WebConfig의 생성 파라미터인 jwtUtil의 Bean이 등록이 되지않아 테스트가 진행되지 않는 문제 발생했습니다.
•
원인 추론
해당 오류를 검색한 결과 해당 오류는 Properties등의 설정 파일의 철자오류, 또는 @Configuration, @Service 등 Bean컨테이너로 해당 클래스가 등록이 안되있거나, 해당 클래스의 생성 파라미터의 문제가 발생한 경우 등 여러상황에서 발생할수 있다고 합니다.
조치 방안 검토 (분석)
1.
jwtUtil의 @Configuration 에노태이션이 철자오류없이 제대로 기입되있는지 확인한 결과 이상이 없었습니다.
2.
Properties와 jwtUtil의 연결이 제대로 이뤄져있는지 확인결과 이상없이 값을 잘 불러오는것을 확인이 되었습니다.
3.
jwtUtil의 코드를 전부 면밀히 확인해본결과 @PostConstruct에노테이션이 사용된 key init메소드에서 문제가 발생함을 확인하였습니다.
조치 방안 구현 (해결 + 느낀점)
해당 문제를 확인결과 사용된 jwtSecretKeY의 경우 Base64로 인코딩하여 사용되는데 인코딩한 문자열을 입력할때 "/"철자가 오기입되면서 해당 문자를 디코딩할수없어 오류가 발생하였다는 문제를 발견했습니다. 또한 문제해결과정에서 같은 시크릿키를 사용한 실제 Application환경에서는 오류가 없었는데 Application환경과 테스트환경 둘다 환경변수를 사용함으로서 해당 시크릿키를 입력하여 보안을 유지하고있었는데 테스트환경으로 환경변수를 일일히 복사붙여넣기하는 과정에서 "/"문자가 같이 기입된것으로 확인되었습니다.
해당 문제를 막기위해 환경변수 템플릿을 활용하여 환경변수 오기입문제를 미연에 방지해야겠다는 생각이 들었습니다.