본문 바로가기

Programming/Java & JSP & Spring

[Spring] AOP, Filter, Interceptor의 차이

스프링에서 사용되는 AOP, Filter, Interceptor 세 가지 기능은 모두 무슨 행동을 하기전에 먼저 실행하거나,

실행한 후에 추가적인 행동을 할 때 사용되는 기능들이다.


기능적으로는 비슷하지만 내부 구현적으로는 큰 차이가 있다.


우선 Interceptor와 Filter는 Servlet 단위에서 실행된다. 반면 AOP는 메소드 앞에 Proxy패턴의 형태로 실행된다.

그래서 실행순서에서도  차이가 나는데, Filter가 가장 겉에 있고 그안에 Interceptor, 그안에 AOP가 있는 형태이다.


따라서 요청이 들어오면 Filter → Interceptor → AOP → Interceptor → Filter 순으로 거치게 된다.


실행되는 메소드를 기준으로 설명하면

  1. 서버를 실행시켜 서블릿이 올라오는 동안에 init이 실행되고, 그 후 doFilter가 실행된다. 
  2. 컨트롤러에 들어가기 전 preHandler가 실행된다
  3. 컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 진행이 된다.
  4. 서블릿 종료 시 destroy가 실행된다.



AOP vs Filter, Interceptor

AOP의 경우 Interceptor나 Filter와는 달리 메소드 전후의 지점에 자유롭게 설정이 가능하고,
Interceptor와 Filter는 주소로 대상을 구분해서 걸러내야하는 반면, AOP는 주소, 파라미터, 애노테이션 등
다양한 방법으로 대상을 지정할 수 있다는 장점이 있다.

Filter vs Interceptor
Servlet 기술의 Filter와 Spring MVC의 Interceptor는 특정 URI에 접근할 때 제어하는 용도로 사용된다는
공통점을 가지고 있다.
두 기능의 가장 큰 차이는 위에서도 언급했듯이 실행 시점에 속하는 영역이 다르다. Interceptor의 경우
Spring의 영역(Context)에 존재하고, Filter는 웹 어플리케이션 내에 존재한다.

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

기존에 Controller에서 순수하게 필요한 파라미터와 결과 데이터를 만들어내고,
Interceptor를 이용해서 웹과 관련된 처리를 도와준다.

일반적인 경우라면 컨트롤러를 이용할 때는 AOP의 Advice를 활용하기보다는 Interceptor의
HandlerInterceptor 인터페이스 혹은 HandlerInterceptorAdapter 클래스를 활용하는 경우가 더 많다.








※ 참조 : http://dev-eido.tistory.com/entry/Interceptor-filter-AOP의-차이


'Programming > Java & JSP & Spring' 카테고리의 다른 글

[Spring] VO와 DTO  (0) 2017.02.02
[Spring] 트랜잭션 처리  (0) 2017.02.02
[Spring] AOP 란?  (0) 2017.02.01
[Spring] RestController와 Ajax  (0) 2017.02.01
jQuery와 DOM  (0) 2017.02.01