Spring으로 프로젝트를 구현하다보면은 Filter, Interceptor, AOP를 이용해 전/후처리를 할 수 있습니다.
셋 다 비슷한 기능을 가지고 있는데 헷갈리는데 내부 구현 로직에는 큰 차이가 존재한다고 합니다.
여러 블로그 참고 및 제가 사용해온 경험을 토대로 정리했습니다.
1. 정리
구분 |
Filter (필터) |
Interceptor (인턴셉터) |
AOP (관점지향프로그래밍) |
실행 위치 |
서블릿 (Dispatcher Servlet 바깥) |
서블릿 (Dispatcher Servlet 안쪽) |
메소드 |
실행 순서 |
1 |
2 |
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처리, 인코딩처리 등으로 사용하긴하는데
이쪽으론 좀 더 공부가 필요할 듯 합니다.
'Java' 카테고리의 다른 글
Spring MVC 모델 2 (MVC 패턴) (0) | 2018.09.06 |
---|---|
Spring Framework (스프링프레임워크) 기본 동작 순서 및 구조 (2) | 2018.09.06 |
자바 저장 시 톰캣 자동 재시작 방지 (톰캣 Auto Reload) (0) | 2018.09.05 |
이클립스 Checksum mismatch 에러 처리(SVN) (0) | 2018.09.03 |
톰캣 재시작 후 세션 유지/죽임 처리 (Persistent Session) (0) | 2018.08.30 |
댓글