Spring

Filter, Interceptor, AOP

라우브 2021. 8. 26. 00:17

웹 개발시 반복되는 로직들이 종종 발생한다. 예를 들면 로그인 관련(세션처리), XSS 공격 방어 등.

이러한 반복되는 로직들이 발생하는 곳 마다 해당 코드를 작성하면, 코드 중복이 심해진다.

 

이러한, 공통부분(공통로직)을 프로그램의 흐름 앞, 중간, 뒤에 추가하여 모듈화 하여 관리할 수 있다.

Spring 에서는 이러한 기능을 세가지 방법을 통해 제공한다.

 

1. Filter

2. Interceptor

3. AOP

 

각 방법들은 실행되는 타이밍(시점)이 다르다.

 

출처: https://goddaehee.tistory.com/154

Filter

filter는 그림을 통해 알 수 있겠지만, DispatcherServlet 보다도 앞단에서 처리된다. 이는 즉, Spring 영역 밖에 있음을 의미한다.

filter는 결국 Spring Bean을 사용하지 않는 단순 ServletRequest, ServletResponse 수준의 처리라고 생각하면 된다.

ServletRequest 객체에는 요청 Parameters, header, cookie 등과 같은 정보가 담겨있다.

 

구현해야 할 메서드

  • init() : 필터 인스턴스 생성시 실행
  • doFilter() : 요청이 들어오면 실행
  • destroy() : 필터 인스턴스 소멸 시  실행 (애플리케이션 종료될 때)

 

Interceptor

interceptor는 그림에서 볼 수 있듯, DispatcherServlet의 요청이 Controller로 가기 전/후로 동작한다.

작동 범위가 스프링 영역 안에 있기 때문에 당연히 spring bean들을 사용할 수 있다.

파라미터로는 HttpServletRequest, HttpServletResponse 가 들어온다.

 

구현해야 할 메서드

  • preHandler() - 컨트롤러 메서드가 실행되기 전
  • postHanler() - 컨트롤러 메서드 실행직 후 view페이지 렌더링 되기 전
  • afterCompletion() - view페이지가 렌더링 되고 난 후

 

AOP

AOP는 Filter나 Interceptor와는 달리 client의 request와는 무관하게 실행할 수 있다. 즉, 비즈니스 로직의 중복을 줄이는 데

사용된다. 예를들면 Transaction, 로깅 등.

 

AOP의 포인트컷

@Before: 대상 메서드의 수행 전

@After: 대상 메서드의 수행 후

@After-returning: 대상 메서드의 정상적인 수행 후

@After-throwing: 예외발생 후

@Around: 대상 메서드의 수행 전/후



참고자료 : https://goddaehee.tistory.com/154

'Spring' 카테고리의 다른 글

Database Transaction과 데이터 동기화 -2  (0) 2021.08.01
Database Transaction과 데이터 동기화 -1  (0) 2021.08.01
스프링 MVC 구성 요소  (0) 2020.08.02
DispatcherServlet이란  (0) 2020.08.02
서블릿 리스너와 서블릿 필터  (0) 2020.08.01