2021. 4. 22. 00:57ㆍSpring/Spring Boot
1. Filter, Interceptor, AOP
1) Filter, Interceptor, AOP 흐름
- 서버를 실행하면 서블릿이 올라오는 동안에 init이 실행되고 doFilter가 실행
- 컨트롤러로 들어가기 전 preHandler 실행
- 컨트롤러에서 나와 @Around, postHandler, doFilter 순으로 진행
- 서블릿 종료시 destroy 실행
- 즉, Filter - Interceptor - AOP - Interceptor - Filter 순으로 진행된다.
2) Filter
Filter는 Dispatcher Servlet 영역에 들어가기 전 Front Controller 앞 범위에서 수행된다. 그리고 Controller 이후 자원 처리가 끝난 후 응답 처리에 대해서도 변경, 조작을 수행할 수 있다. 일반적으로 인코딩 변환 처리, XSS 방어를 개발할 때 사용된다.
Filter에서 사용되는 메서드는 다음과 같다.
- init() - Filter 인스턴스 초기화
- doFilter() - 실제 처리 로직
- destory() - Filter 인스턴스 종료
3) Interceptor
Filter의 경우 스프링 컨텍스트 이전에 실행되기 때문에 스프링과 무관하다. 하지만 Interceptor의 경우 스프링의 DispatcherServlet이 Controller를 호출하기 전-후에 끼어들기 때문에 스프링 컨텍스트 내부에서 Controller에 대한 요청과 응답에 관여한다. 또한 스프링의 모든 @Bean에 접근이 가능하다.
preHandler에서 전처리가 이루어지고 postHandler에서 후처리를 한다. Interceptor에서 사용되는 메서드는 다음과 같다.
- preHandler() - Controller 실행 전
- postHandler() - Controller 실행 후
- afterCompletion() - View Rendering 이 후
4) AOP
Controller 처리 이후 주로 비즈니스 로직에서 실행된다. 주로 '로깅, 트랜잭션, 에러 처리' 등 비즈니스 단의 메서드에서 구체적인 조정이 필요할 때 사용한다.
Filter와 Interceptor와 달리 메서드 전후 지점에서 자유롭게 설정이 가능하다. AOP는 주소, 파라메터, 어노테이션 등 다양한 방법으로 대상을 지정할 수 있다.
@Advice의 경우 JoinPoint와 ProceedingJoinPoint 등을 활용하여 호출이 가능하지만 HandlerInterceptor의 경우는 HttpServletRequest, HttpServletResponse를 파라미터로 사용한다.
[참고] velog.io/@sa833591/Spring-Filter-Interceptor-AOP-%EC%B0%A8%EC%9D%B4-yvmv4k96
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] Maven vs Gradle (0) | 2021.04.30 |
---|---|
[Spring Boot] Swagger API 문서 자동화 (0) | 2021.04.10 |
[Spring Boot] Jython (0) | 2021.03.31 |
[Spring Boot] Logback (0) | 2021.03.31 |