개발/기능 개발

[Spring] Filter & Interceptor & AOP

뽀글뽀글 개발자 2023. 5. 29. 20:31

실행 순서:Filter → Interceptor → AOP → Interceptor → Filter

 

필터의 특징

  • Filter는 WAS단에 위치하고 있어 spring 자원이 아니다.
  • doFilter() 메소드를 이용해 요청, 응답에 대해 동작한다.
  • Request, Response 객체에 관여할 수 있다. 
  • 스프링의 예외 처리가 되지않는다.

적용

  • Servlet Request, Response
  • spring과 분리되어야 하는 기능
  • 이미지/데이터 압축 및 문자열 인코딩
  • 모든 요청에 대한 로깅
  • 공통된 보안 및 인증/인가 

 

 

인터셉터의 특징

  • spring 컨테이너에 있는 spring 자원이다.
  • preHandler(), postHandler()를 이용해서 요청과 응답에 대한 처리가 분리되어있다.
  • Request, Response 객체에 관여할 수 없다.
  • 스프링의 예외 처리가 가능하다.

적용

  • API 호출에 대한 로깅
  • 세부적인 보안 및 인증 
  • 세션 및 쿠키 체크
  • Controller로 넘겨주는 데이터 

 

AOP

  • 메서드에 대해 전후로 자유롭게 설정가능하다.
  • Interceoptor와 filter와 다르게 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있다.

적용

메소드 마다 반복되는 코드가 있을 경우 AOP로 관리한다.

예를 들어 시간 측정을 하고싶다면 시간 측정 코드를 메서드마다 작성해야하는 불편함이 있다.

이때 AOP를 사용하면 코드를 한번만 작성해서 각 메소드에 적용 시킬 수 있다.

 

적용 방법

  • 메소드 실행 전 후 
  • @Before: 대상 메서드의 수행 전
  • @After: 대상 메소드의 수행 후
  • @After-returning: 대상 메소드의 정상적인 수행 후
  • @After-throwing: 예외발생 
  • @Around: 대상 메서드의 수행 전, 후