ahnnyung ,/Spring

[Spring] Spring MVC Request Lifecycle (Filter, Interceptor, AOP 차이 및 정리)

hi,ho 2020. 11. 24. 10:41
반응형

Spring MVC request lifecycle

요청에 대한 실행순서

Filter → Interceptor → AOP → Interceptor → Filter 순으로거친다.

실행 순서를 보면 Filter가 Dispatcher servlet 바깥쪽인 가장 외부, Interceptor가 Dispatcher servlet 다음으로 존재, 그리고 그 안에 AOP가 있는 형태이다. 

 

1. Filter

Filter는 Dispatcher servlet 앞단에서 스프링 컨텍스트 외부에 존재하여 스프링과 무관한 자원에 대해 동작한다. 요청과정에서 요청내용을 변경하거나 여러가지 체크를 수행할 수 있고, 응답과정에서도 자원의 처리가 끝난 이후의 응답내용에 대해서도 변경이 가능하다. 보통 web.xml에 등록하며 일반적으로 인코딩 변환 처리, XSS방어 등의 요청에 대한 처리로 사용된다.

 

2. Interceptor

Interceptor스프링의 DistpatcherServlet이 컨트롤러를 호출하기 전, 후로 끼어들기 때문에 스프링 컨텍스트(Context, 영역) 내부에서 Controller(Handler)에 관한 요청과 응답에 대해 처리한다. 위의 그림에선 Controller 영역에 존재하는 것 같지만 Controller 외부에 존재하는 녀석이다. 컨트롤러가 처리되기 전과 후에 (preHandle()/postHandle()) 동작하는 게 Interceptor이다. View가 다 처리(화면종료)되고 난 다음에도(afterCompletion()) Interceptor가 실행될 수도 있다. Interceptor는 보통 로그인 체크, 권한체크, 프로그램 실행시간 계산작업 로그확인 처리로 사용된다. 

 

3. AOP (Aspect Oriented Programming)

OOP를 보완하기 위해 나온 개념 

 

객체 지향의 프로그래밍을 했을 때 중복을 줄일 수 없는 부분을 줄이기 위해 종단면(관점)에서 바라보고 처리한다.

 

주로 '로깅', '트랜잭션', '에러 처리'등 비즈니스단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용합니다.

Interceptor나 Filter와는 달리 메소드 전후의 지점에 자유롭게 설정이 가능하다.

Interceptor와 Filter는 주소로 대상을 구분해서 걸러내야하는 반면, AOP는 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있다.

 

AOP의 Advice와 HandlerInterceptor의 가장 큰 차이는 파라미터의 차이다.

Advice의 경우 JoinPoint나 ProceedingJoinPoint 등을 활용해서 호출한다.

반면 HandlerInterceptor는 Filter와 유사하게 HttpServletRequest, HttpServletResponse를 파라미터로 사용한다.

AOP Interceptor
method & parameter request & response
@before preHandle()
@After postHandle()
After Returning afterCompletion()

 

반응형