이글에서는 3개를 간단하게 비교하고 다른 포스팅에서 각각을 자세히 설명하고 코드로 실습해보겠습니다.
이글에서는 가볍게 봐주세요.
- 순서는 Filter -> Interceptor -> AOP -> Interceptor -> Filter 순으로 이루어진다.
- Filter와 Interceptor은 Servlet 단위에서 이루어진다.
Spring Filter
Dispatcher Servlet 영역에 들어가기 전 Front Controller 앞 범위에서 수행된다.
또한, Controller 이후 자원 처리가 끝난 후 응답 처리에 대해서도 변경, 조작을 수행할 수 있다.
일반적으로 인코딩 변환 처리, XSS 방어를 개발할 때 사용한다.
Filter 실행메소드
- init() - 필터 인스턴스 초기화
- doFilter() - 실제 처리 로직
- destroy() - 필터 인스턴스 종료
Spring Interceptor
Filter는 스프링 컨텍스트 이전에 실행되어 스프링과 무관하다.
하지만 인터셉터의 경우에는 스프링의 DispatcherServlet이 Controller를 호출하기 전,후에 끼어들기 때문에 스프링 컨텍스트(Context,영역) 내부에서 Controller에 관한 요청과 응답에 관여한다.
그리고 스프링의 모든 @Bean에 접근이 가능하다.
preHandler에서 전처리가 이루어지고, postHandler에서 후처리를 한다.
Interceptor 실행메소드
- preHandler() - Controller 실행 전
- postHandler() - Controller 실행 후 view Rendering 실행 전
- afterCompletion() - view Rendering 이후
Spring AOP
Controller 처리 이후 주로 비지니스 로직에서 실행된다.
주로 '로깅', '트랜잭션', '에러 처리' 등 비지니스 단의 메서드에서 구체적인 조정이 필요할 때 사용합니다.
Filter와 Interceptor와 달리 메소드 전후 지점에서 자유롭게 설정이 가능하다.
AOP는 주소, 파라메터, 어노테이션 등 다양한 방법으로 대상을 지정할 수 있다.
@Advice와 HandlerInterceptor의 가장 큰 차이는 파라메터의 차이다.
@Advice의 경우에는 JoinPoint와 ProceedingJoinPoint 등을 활용하여 호출 가능하다.
반면 HandelrInterceptor의 경우는 HttpServletRequest, HttpServletResponse를 파라메터로 사용한다.
'Spring' 카테고리의 다른 글
Spring Interceptor (0) | 2021.04.12 |
---|---|
Spring Filter (0) | 2021.04.10 |
Spring AOP (0) | 2021.04.09 |
Spring 요청의 흐름(Spring MVC 패턴) (0) | 2021.04.09 |
IOC & DI (0) | 2021.04.06 |