Spring Security도 DeadLock처럼 순환 참조가 생긴다. 알아보자.

1) 순환참조
우선 처음 나의 문제는 순환참조 문제였다.
3번 사진의 경우는 문제가 안 됐지만 순환참조가 일어났던 곳은 첫 번째 사진과 두 번째 사진이었다.
②번이 ⑤번에 의존성을 주입해서 사용하고 있고
④번이 첫번 째 사진의 CustomAuthenticationProvider에 의존성 주입을 해 사용하고 있다.
→ 결과적으로 서로 참조하는 관계가 생기므로 에러가 나는 것이다.
2) 생성자 주입
그 후 순환참조 문제로 인해서 ②번의 @Autowired를 뺀 "private passwordEncoder passwordEncoder"을 생성했다.
코드 상에서의 문제는 없지만 NullPointerException이 떨어졌는데 그것은 바로 필드 주입을 했기 때문이다.
@Autowired를 생성하게 되면 필드 주입을 해서 의존성을 주입하고 안에 있는 내용을 가져오게 되지만
@Autowired가 없으면 그 클래스의 껍데기만 가져오는 것이다. 결과적으로 @Autowired를 빼서
의존성을 주입하지 않았으므로 NullPointerException이 맞다.
→ 이로 인해 최종적으로 ③번 방식으로 직접 객체를 생성자로 만들어서 가져왔다. 즉 생성자 주입을 한 것이다.
결국 CustomAuthenticationProvider의 경우는 직접적으로 의존성 주입을 한 것이 아니므로 순환 참조 에러가 나지
않는다.
'Spring_SpringBoot > 코드' 카테고리의 다른 글
| [ Spring Security 6 ] - 4 , UsernamePasswordAuthenticationFilter (0) | 2024.07.07 |
|---|---|
| [ Spring Security 6 ] - 3 , AccessDeniedHandler, AuthenticationEntryPoint (0) | 2024.07.07 |
| [ Spring Security 6 ] - 2 , SecurityConfig (0) | 2024.07.07 |
| [ Spring Security 6 ] - 1 (0) | 2024.07.07 |
| JWT(JSON Web Token) (0) | 2024.06.24 |