Java/일반

Filter, Interceptor, AOP의 차이

창욱씨 2020. 4. 22. 22:09

1. Filter

 Filter는 DispatcherServlet 이전에 실행이 되어 Filter가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나, 여러가지 체크를 수행할 수 있습니다. 또한 자원의 처리가 끝난 후 응답 내용에 대해서도 변경하는 처리를 할 수 있습니다. Filter는 웹 설정에 기본적으로 등록되는데 대표적으로 인코딩변환, 로그인 여부확인, 권한 체크 등의 요청에 대한 처리로 사용됩니다.

Web.xml에서 필터의 예시

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

2. Interceptor

 Interceptor는 DispatcherServlet가 컨트롤러를 호출하기 전, 후에 실행됩니다. 그래서 Interceptor는 스프링 컨텍스트 내부에 존재하고 스프링 내의 모든 빈에 접근이 가능합니다. Interceptor는 여러 개를 사용할 수 있고 로그인 체크, 권한 체크 등에 사용됩니다.

3. AOP

 앞선 글을 참조

2020/04/18 - [Java/Spring] - AOP

4. AOP, Interceptor, Filter의 차이

 위 그림을 보면 Filter와 Interceptor는 컨트롤러가 실행되기 전, 실행된 이후에 사용된다는 점은 같지만 흐름을 보면 호출되는 시점이 다릅니다. 앞에서 설명했듯이, Filter는 DispatcherServlet을 호출하기 전에 실행되지만 Interceptor는 호출 이후에 실행됩니다. AOP와 Interceptor또한 Controller가 실행되기 전에 사용된다는 점은 같지만 호출되는 시점이 다릅니다. 따라서 요청이 들어오면 Filter -> Interceptor -> AOP -> Interceptor -> Filter 순으로 거치게 됩니다.

728x90