정기간행물/daily

Filter vs Interceptor vs AOP

:)jun 2023. 9. 8. 21:57

Filter vs Interceptor

Filter

  • J2EE 표준 스펙 기능으로 디스패처 서블릿에 요청이 전달되기 전/후에 url패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다.
  • 스프링 밖에 존재한다.
  • 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너(서블릿 컨테이너)에 의해 관리된다. (스프링 빈으로 등록은 된다.)

Interceptor

  • J2EE 표준 스펙인 필터와는 달리 Spring이 제공하는 기술로써, 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다.
  • 스프링 안에 존재한다.
  • 디스패처 서블릿은 핸들러 매핑을 통해 적절한 컨트롤러를 찾도록 요청하는데 , 그 결과로 실행 체인(HandlerExecutionChain)을 돌려준다 이 실행 체인은 1개 이상의 인터셉터가 등록되어 있다면 순차적으로 인터셉터들을 거쳐 컨트롤러가 실행되도록 하고, 인터셉터가 없다면 바로 컨트롤러를 실행한다.

 Interceptor vs AOP

인터셉터 대신에 컨트롤러들에 적용할 부가기능을 advice로 만들어 AOP를 적용할 수도 있다. 하지만 다음과 같은 이유들로 컨트롤러의 호출 과정에 적용되는 부가기능들은 인터셉터를 사용하는 편이 낫다.

  1. 컨트롤러는 타입과 실행 메소드가 모두 제각각이라 포인트컷(적용할 메소드 선별)의 작성이 어렵다.
  2. 컨트롤러는 파라미터나 리턴 값이 일정하지 않다.
  3. AOP에서는 HttpServletRequest/Response를 객체를 얻기 어렵지만 인터셉터에서는 파라미터로 넘어온다.