작성
·
245
·
수정됨
0
안녕하세요 강사님! 우선 양질의 강의 잘 듣고 있다는 말씀 드리고 싶습니다.
Spring Security 에서 AuthenticationProvider
를 찾아서 인증을 위임하는 역할을 수행하는 ProviderManger
도 옵저버 패턴을 사용하고있다고 볼 수 있을까요?
ProviderManager (AuthenticationManager) 에서 AuthenticationProvider 들을 가져온후 이들을 순회하며 인증위임을 시키는 코드입니다
단순히 supports()
를 통해 인증을 위임시킬 AuthenticationProvider 들을 골라내는 것뿐, 이것도 옵저버 패턴이 적용된 예인지 알고 싶습니다.
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. PrivilegeEscalate님의 질문에 답변 드리겠습니다.
옵저버 패턴은 객체의 상태 변화에 따라 다른 객체들에게 이벤트를 알리는 방식으로 동작합니다. 일반적으로 옵저버 패턴은 상태 변화를 관찰하는 관찰자(Observer)와 상태 변화를 통지하는 대상(Subject)으로 구성됩니다.
Spring Security의 ProviderManager
는 여러 개의 AuthenticationProvider
를 관리하며, 인증 요청이 들어오면 순회하면서 supports
메소드를 통해 해당 인증 유형을 처리할 수 있는 AuthenticationProvider
를 선택하고, 인증을 위임합니다. 선택된 AuthenticationProvider
가 인증에 성공하면 인증 과정을 종료합니다.
이 과정을 옵저버 패턴의 관점에서 보면, AuthenticationProvider
들이 관찰자(Observer)의 역할을 하고, ProviderManager
가 이들에게 인증 요청이라는 이벤트를 순차적으로 전달하는 것으로 해석할 수 있습니다. 각 AuthenticationProvider
는 인증 가능 여부를 스스로 판단하여 처리하는 주체로 볼 수도 있습니다.
그러나 전통적인 옵저버 패턴의 경우, 일반적으로 Subject에 변화가 있을 때 이를 Observer에게 자동으로 알리는 구조를 가지는데, ProviderManager
의 경우에는 상태 변화를 자동으로 알리는 것이 아니라 인증 요청이라는 명시적인 이벤트에 대해 순차적으로 확인하고 처리합니다. 따라서 ‘옵저버 패턴이 적용되었다’라고 보기에는 조금 다른 양상이며, 옵저버 패턴의 변형 또는 다른 패턴에 가깝다고 볼 수 있습니다.
옵저버 패턴의 정의에 엄격하게 부합하는지에 대해서는 다양한 해석이 가능하지만, ProviderManager
와 AuthenticationProvider
의 관계를 옵저버 패턴의 관점에서 바라보는 것은 하나의 해석으로 볼 수 있습니다. 이러한 해석은 설계 패턴의 적용이 반드시 하나의 정답만을 의미하지 않으며, 상황에 따라 유연하게 적용되고 해석될 수 있음을 보여줍니다.
지금보니 책임 연쇄 패턴에 더 가까운것 같네요!
현재 진행하고있는 프로젝트에서는 질문내용과 DispatcherServlet 의 doDispatch 메서드 안에있는 HandlerExecutionChain 응용해서 캐싱 플랫폼 후보군들(Redis, ExpiringMap) 에 대한 우선순위를 부여하고 이 후보군들을 관리하는 Chain 을 구성해서 사용해보았습니다.
구현체들을 까보면 까볼수록 코드를 보는 시야가 넓어지는것 같아서 보람차네요! 답변 감사합니다!