전반적인 스프링 시큐리티 동작 원리에 대해 알아보자
시큐리티 의존성이 없는 경우

클라이언트의 요청은 서버의 WAS(톰캣)의 필터들을 통과한 뒤, 스프링 컨테이너의 컨트롤러에 도달한다. (컨트롤러 앞단의 과정은 생략)
※ The typical layering of the handlers for a single HTTP request.

시큐리티 의존성이 추가된 경우
- 스프링 시큐리티가 사용자의 요청을 감시하고 통제하는 지점
-> WAS의 필터 단에서 요청을 가로챈 후 시큐리티의 역할을 수행한다.

- WAS의 필터에 하나의 필터를 만들어서 넣고 해당 필터에서 요청을 가로챔
- 해당 요청은 스프링 컨테이너 내부에 구현되어 있는 스프링 시큐리티 감시 로직을 거침
- 시큐리티 로직을 마친 후 다시 WAS의 다음 필터로 복귀
※ 요청을 가로채는 필터: DelegatingFilterProxy, FilterChainProxy
※ 시큐리티 로직: SecurityFilterChain

스프링 시큐리티 로직은 여러개의 필터들이 나열된 필터 체인 형태로 구성되어 있다.
각각의 필터에서 CSRF, 로그아웃, 로그인, 인가, 등 여러 작업을 수행한다.
- DelegatingFilterProxy: 스프링 Bean을 찾아 요청을 넘겨주는 서블릿 필터
- FilterChainProxy: 스프링 시큐리티 의존성을 추가하면 DelegatingFilterProxy에 의해 호출되는 SecurityFilterChain들을 들고 있는 Bean (매개체 역할)
- SecurityFilterChain: 스프링 시큐리티 필터들의 묶음으로 실제 시큐리티 로직이 처리되는 부분 (FilterChainProxy가 SecurityFilterChain들을 들고 있음)