[Spring]필터(Filter), 인터셉터(Interceptor), AOP 차이점

Imagem de capa

스프링에서 사용되는 Filter, Inteceptor, AOP 세가지 모두 무슨 행동을 하기 전에 먼저 실행하거나, 실행한 후 추가적인 행동을 할 때 사용되는 기능이다. 그렇다면 이 세가지의 차이점에 대해 알아보자.


[Filter, Interceptor, AOP의 흐름]


[필터(Filter)]

말 그대로 요청과 응답을 거른 뒤 정제하는 역할을 한다.

서블릿 필터는 DispatcherServlet 이전에 실행이 되는데 필터가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나, 여러가지 체크를 수행할 수 있다. 또한 자원의 처리가 끝난 후 응답내용에 대해서도 변경 처리할 수 있다. 보통 web.xml에 등록하고, 일반적으로 인코딩처리, XSS방어등의 요청에 대한 처리로 사용된다. (자세한 내용은 필터란무엇인가참고 )


[인터셉터(Interceptor)]

요청/응답을 가로채는 역할을 한다. 필터는 스프링 컨텍스트 외부에 존재하여 스프링과 무관한 자원에 대해 동작한다. 하지만 인터셉터는 스프링의 DispatcherServlet이 컨트롤러를 호출하기 전, 후로 끼어들기 때문에 스프링 영역에서 Controller에 대한 요청과 응답에 대해 처리한다. 또한 스프링의 모든 빈 객체에 접근할 수 있다.

인터셉터는 여러개를 사용할 수 있고 로그인 처리, 권한체크, 프로그램 실행시간 계산작업, 로그확인 등의 업무처리에 활용된다.


[AOP]

OOP를 보완하기 위해 나온 개념. 객체지향의 프로그램을 했을 때 중복을 줄일 수 없는 부분을 줄이기 위해 종단면(관점)에서 바라보고 처리한다. 주로 ‘로깅’, ‘트랜잭션’, ‘에러처리’ 등 비즈니스 단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용한다. 인터셉터나 필터와는 달리 메서드 전후의 지점에서 자유롭게 설정 가능하다. 또한 인터셉터나 필터는 주소로 대상을 구분해서 걸러내야 하는 반면, AOP는 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있다.

AOP의 Advice와 HandlerInterceptor의 가장 큰 차이는 파라미터의 차이다. Advice의 경우 JoinPoint나 ProceedingJointPoint 등을 활용해서 호출한다. 반면 HandlerInterceptor는 Filter와 유사하게 HttpServletRequest/HttpServletResponse를 파라미터로 사용한다


*출처 :