[개발지식] SpringSecurity - configureGlobal 설정 시 creating bean error 발생 해결 과정

Hyo Kyun Lee·2025년 3월 21일
0

개발지식

목록 보기
77/84
post-thumbnail

1. 개요

SpringSecurity에서 passwordEncoder를 사용하여 configureGlobal과 AccountService에서 주입받아 사용할때, 순환참조 및 bean 생성 오류가 발생하였다.

아래와 같이 PasswordEncoder를 static 붙여서 해결 왜 static을 붙이면 해결할 수 있었지만, 왜 해결할 수 있었는지, 순환참조는 왜 발생한 것인지 자세하게 살펴보기 위하여 탐구한 내용을 기록한다.

2. 오류로그 확인

일단 오류로그는 오류가 발생한 지점부터 순차적으로 로그를 기록하므로, 위에 기록된 오류 부터 탐색해 보았다.

  • 첫번째 오류
    Error creating bean with name 'accountController': Unsatisfied dependency expressed through field 'accountService': Error creating bean with name 'accountService': Unsatisfied dependency expressed through field 'passwordEncoder': Error creating bean with name 'webSecurityConfig': Requested bean is currently in creation: Is there an unresolvable circular reference or an asynchronous initialization dependency?

  • 두번째 오류
    Error creating bean with name 'accountService': Unsatisfied dependency expressed through field 'passwordEncoder': Error creating bean with name 'webSecurityConfig': Requested bean is currently in creation: Is there an unresolvable circular reference or an asynchronous initialization dependency?

  • 세번째 오류
    Error creating bean with name 'webSecurityConfig': Requested bean is currently in creation: Is there an unresolvable circular reference or an asynchronous initialization dependency?

위 오류 기록으로 부터 두가지 오류 유발 요소를 정리할 수 있었는데,
1. AccountController에서 passwordEncoder를 주입받을때 무엇인가 문제가 발생하였다.
2. passwordEncoder가 위치한 WebSecurityConfig 클래스에서도 bean 오류가 발생하였고, 현재 필요한 bean은 생성중이다.

이 흐름을 구체화해보았다.

2. 등록하지 못한 passwordEncoder Bean이 오류를 유발하였다.

  • 먼저 AccountService에서 passwordEncoder를 주입받고자 하였으나

  • passwordEncoder가 위치한 WebSecurity에서 생성하지 못한 passwordEncoder bean을 주입받아 사용하고자 하므로 오류가 발생, 이에 따라 WebSecurity에서도 bean오류가 발생하고 있다.

3. passwordEncoder에 static 키워드를 추가하여 bean 생성시점이 더 빠르도록 조치하였다.

일단 passwordEncoder에 static을 추가하여 bean을 먼저 생성할 수 있도록 조치하였으나, 사실 필드변수 독자적인 조치를 할 경우 관리적인 차원, 환경 구성의 일관성을 해칠 수 있기에 더 확실하고 (정확히는 필드 변수를 건드리지 않는 방향의) 견고한 방향성을 더 고민해 볼 필요가 있겠다.

일단 @Lazy, 이 방법은 WebSercurityConfig가 아닌 다른 클래스에서 ComponentScan 을 하는 등의 방법이 있다고 하는데 더 공부할 필요가 있을 것 같다.

이 부분은 추가 공부 후에 기록할 예정이다.

4. 참고자료

유사한 오류 발생 - https://okky.kr/questions/1239554, https://zhfvkq.tistory.com/29

순환 참조(WebSecuirty, configureGlobal 관련 유사한 오류) - https://stackoverflow.com/questions/40695893/spring-security-circular-bean-dependency

@Lazy - https://www.baeldung.com/circular-dependencies-in-spring

configureGlobal의 @AutoWired는 AuthenticationBuildManger를 주입받는 과정이다 - https://www.google.com/search?q=configutreGlobal+autowired&sca_esv=c34f1484862cc875&sxsrf=AHTn8zpjrfoP6f93leQ3PVYrMK_pezwITw%3A1742540340035&source=hp&ei=Mw7dZ_HHO66LptQPtrzk8A0&iflsig=ACkRmUkAAAAAZ90cRM75n4a9ivDrhjGlEOL45W_50JHL&ved=0ahUKEwixreLPzJqMAxWuhYkEHTYeGd4Q4dUDCBo&uact=5&oq=configutreGlobal+autowired&gs_lp=Egdnd3Mtd2l6Ihpjb25maWd1dHJlR2xvYmFsIGF1dG93aXJlZDIFEAAY7wUyCBAAGIAEGKIESNE1UABYgjVwAngAkAEBmAGBBaAB0zqqAQoyLTIyLjIuMi4xuAEDyAEA-AEBmAIcoALnNqgCCsICBxAjGCcY6gLCAgQQIxgnwgILEAAYgAQYsQMYgwHCAgUQABiABMICERAuGIAEGLEDGNEDGIMBGMcBwgIOEC4YgAQYsQMY0QMYxwHCAgoQLhiABBhDGIoFwgIQEC4YgAQY0QMYQxjHARiKBcICDRAAGIAEGLEDGIMBGArCAggQLhiABBixA8ICChAAGIAEGEMYigXCAggQABiABBixA8ICEhAAGIAEGLEDGIMBGAoYRhj_AcICBxAAGIAEGArCAhAQLhiABBixAxjRAxjHARgKwgIEEAAYA8ICChAjGIAEGCcYigXCAgoQABiABBgUGIcCwgIHECMYsQIYJ8ICBxAjGLACGCfCAgcQABiABBgNwgIGEAAYDRgemAML8QXUN6_OfAJafZIHCjIuMC4yMS4zLjKgB7TUAbIHCDItMjEuMy4yuAfVNg&sclient=gws-wiz

0개의 댓글