간단이론정리

Filter, Interceptor 그리고 AOP

눕고싶은사람 2024. 6. 12. 13:10

 

https://goddaehee.tistory.com/154

 

1. 서버를 실행시켜 서블릿이 올라오는 동안에 init이 실행되고, 그 후 doFilter가 실행된다. 

2. 컨트롤러에 들어가기 전 preHandler가 실행된다.

3. 컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 진행이 된다.

4. 서블릿 종료 시 destroy가 실행된다.


1. Filter

필터는 주로 스프링 영역 밖에서 처리된다.

인증이나 권한 체크에 많이 쓰이며 모든 요청에 대한 로깅이나 검사나 이미지/데이터 압축 및 문자열 인코딩에서도 사용하게 된다.

 

사용하기 위해선 javax.servlet의 Filter 인터페이스를 구현하면 된다.

  • init(FilterConfig filterconfig) : 필터 객체를 초기화 하여 서비스에 추가하기 위한 메소드. 웹 컨테이너가 1회 init 메소드를 호출하여 초기화 하면 이후 모든 요청은 doFilter를 통해 처리 된다.
  • doFilter(ServletRequest request, ServletResponse response, FilterChain chain) : url-pattern에 맞는 모든 요청이 디스패처 서블릿으로 가기 전에 실행된다. chain.doFilter() 전/후에 원하는 처리 과정을 넣어서 사용한다.
  • destroy() : 필터 객체를 서비스에서 제거하고 자원을 반환하기 위한 메소드이며 1번 호출 되면 doFilter에 의해 처리되지 않는다.

 

2. Interceptor

인터셉터는 스프링이 제공하는 기능이며, 컨트롤러의 동작 전/후에 동작하게 된다.

좀 더 세부적인 인증이나 API 호출 로깅에 사용하며 컨트롤러로 넘겨주는 데이터의 가공이 필요 할 때도 사용한다.

 

org.springframework.web.servlet의 HandlerInterceptor 인터페이스를 구현하여 사용이 가능하다.

  • preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) : 컨트롤러 호출 전 실행 되기에 컨트롤러 이전에 처리 할 내용을 작성한다.
  • postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) : 컨트롤러가 호출 되고 난 후 실행된다. RestAPI 기반 컨트롤러가 많이 사용되면서 자주 사용 되지는 않는 편이다. 컨트롤러 하위 계층에서 작업이 진행되다가 예외가 발생하면 호출하지 않는다.
  • afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) : 모든 작업이 완료된 이후 실행된다. 요청 처리 중에 사용한 리소스를 반환 할 때 사용한다. 컨트롤러 하위 계층에서 작업이 진행되다가 예외가 발생하더라도 반드시 호출 된다.

 

3. AOP(Aspect Oriented Programming)

관점 지향 프로그래밍을 뜻하는 용어.

앱 전반에 걸쳐 공통으로 사용되는 기능들에 대한 관심사를 공통 관심 사항이라고 부르는데, 이 공통된 기능을 재사용 하는 것을 말한다. (로깅, 트랜잭션, 에러 처리 등)

 

인터셉터와 필터는 주소로 대상을 구분하지만, AOP는 주소, 파라미터, 어노테이션 등의 다양한 방법으로 대상을 구분 할 수 있다.

  • Aspect : 흩어진 관심사를 모듈화
  • Target : Aspect를 적용하는 곳(ex. 클래스, 메서드...)
  • Advice : 실질적인 부가기능을 담은 구현체
  • JointPoint : Advice가 적용될 위치. 다양한 시점에 적용 가능
  • PointCut : JointPoint의 상세한 스펙을 정의한 것. 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음

포인트컷 어노테이션

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

 

AOP는 좀 더 자세히 볼 필요가 있을듯.

 

 


출처 및 참고

https://goddaehee.tistory.com/154

 

[Spring] Filter, Interceptor, AOP 차이 및 정리

[Spring] Filter, Interceptor, AOP 차이 및 정리 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ [Spring] 필터, 인터셉터, AOP 정리 ] 입니다. : ) 공통 프로세스에 대한 고민자바 웹 개발을 하다보면, 공통적으

goddaehee.tistory.com

https://mangkyu.tistory.com/173

 

[Spring] 필터(Filter) vs 인터셉터(Interceptor) 차이 및 용도 - (1)

Spring은 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있도록 많은 기능들을 지원하고 있다. 이번에는 그 중에서 필터(Filter) vs 인터셉터(Interceptor)의 차이에 대해 알아보고자

mangkyu.tistory.com

https://memodayoungee.tistory.com/114

 

[Spring] Filter, Interceptor, AOP의 차이점에 대해

AOP를 공부하게 되면 뒤따로오는 개념인 필터와 인터셉터. 인터셉터를 오늘 처음으로 어떤 것인지에 대해 공부하게 됐는데, AOP와 비슷하다 생각했다. 그래서 AOP와 인터셉터의 차이점에 대해 블

memodayoungee.tistory.com

https://life-is-potatoo.tistory.com/30

 

[Spring] AOP Aspect Orientend Programming(관점 지향 프로그래밍)

AOP Aspect Orientend Programming(관점 지향 프로그래밍) : 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠 보고 그 관점을 기준으로 각각 모듈화하는 것 Crosscutting Concerns(흩어진 관심사) :

life-is-potatoo.tistory.com