[Spring Boot] Filter, Interceptor, AOP

2021. 4. 22. 00:57Spring/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

728x90

'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