본문 바로가기
Java

Spring Filter, Interceptor, AOP 차이 및 정리

by 전재훈 2018. 9. 6.
반응형


Spring으로 프로젝트를 구현하다보면은 Filter, Interceptor, AOP를 이용해 전/후처리를 할 수 있습니다.


셋 다 비슷한 기능을 가지고 있는데 헷갈리는데 내부 구현 로직에는 큰 차이가 존재한다고 합니다.


여러 블로그 참고 및 제가 사용해온 경험을 토대로 정리했습니다.



1. 정리


 구분

Filter (필터)

Interceptor (인턴셉터)

AOP (관점지향프로그래밍)

 실행 위치

서블릿 (Dispatcher Servlet 바깥)

서블릿 (Dispatcher Servlet 안쪽) 

 메소드

실행 순서 

 1

 3

설정 파일 위치 

 web.xml

xml, java 

xml, java 

 실행 메소드

init (필터 인스턴스 초기화)

doFilter (전/후 처리)

destroy (필터 인스턴스 종료)

 preHandler (컨트롤러 실행 전)

postHandler (컨트롤러 실행 후)

afterCompletion (view 페이지 렌더링 후)

 pointcut (포인트컷)

(@after, @before, @around 등)




2. 호출 순서


  - 그림을 보시면 전체적인 호출 순서가 정리가 될거에요
    

    그림 처림 Request 가 들어오면 Filter를 거친 후 Interceptor가 호출이 됩니다.


    그 후에 Controller내에 Service, Dao 등의 로직을 탈텐데 그 안의 함수들을 처리할 때 AOP를 통해 전/후처리가 가능합니다.


    다시 말해 호출 순서는 Filter -> Interceptor -> aop -> aop -> Interceptor -> Filter가 되는 겁니다.


    전체 순서 : ServletRequest -> Filter -> dispatcherServlet -> Interceptor -> aop -> 함수 -> aop ->Interceptor -> dispatcherServlet -> Filter -> ServletResponse



    


     [이미지 출처 : 심해펭귄의 심해도서관 https://blog.naver.com/platinasnow/220035316135]







실제 사용할 때 적절한것을 골라서 사용해야 한다고 하는데.. 기능이 비슷하다보니 저는 아직 헷갈립니다 ㅜㅜ 


저는 AOP는 트랜잭션, 세션정보 불러오기 등


Interceptor 는 로깅 및 일반적인 전/후처리 등


Filter는 로그인처리, IP처리, 인코딩처리 등으로 사용하긴하는데 


이쪽으론 좀 더 공부가 필요할 듯 합니다.

반응형

댓글