최근 Spring Security를 학습하면서 필터체인 기반의 동작방식을 확인할 수 있었다.
여러개의 필터가 순서대로 동작하면서 자신의 작업에 해당되는 경우, 자신이 처리하고 다음 필터로 요청을 넘기는 방식으로 동작했다.
이렇듯 사용자 인증, 인가, 검증 필터들을 거친 뒤에야 실제 서비스 로직이 동작하는 구조를 띄고있었다.
조금 더 자세하게 말하자면 각 필터들은 AuthenticationFilter
-> AuthenticationManager
-> Handler
의 순서대로 작업을 처리하고 있었다.
즉, 필터를 순회하면서 자신이 수행해야하는 작업은 Handler
에서 처리하고 있었다.
책임 연쇄 패턴은 이러한 핸들러간의 연결로 이뤄져있다.
각 핸들러는 다음 핸들러로 나아가기 위한 참조를 가지고 있으며, 중간에서 작업중단을 결정할 수 있다
Refactoring Guru의 이미지를 참고하자면 위 형태로 작업이 처리되는 것이다.
단, 위 이미지에서는 Spring Security의 필터체인과 다르게 자신에게 해당되지 않는 작업을 무시하는 기능은 없다
물론, 자신에게 해당되지 않는 작업을 다음으로 넘기는 구조도 책임 연쇄패턴의 한 종류다.
클래스 구조도를 살펴보면 최상위 인터페이스인 Handler
를 구현하는 BaseHandler
가 존재하고,
BaseHandler
에는 다음 핸들러와 관련된 기본적인 동작과 작업처리에 관련된 동작이 구현되어있다.
실제로 세부적인 동작을 구현하는 핸들러는 BaseHandler
를 상속하여 작성할 수 있다.
세부 Handler
들은 자신만의 handle()
을 재정의하며, 자신이 처리할 수 없는 요청을 부모 핸들러에게 넘긴다.