프로젝트/Ku:room

필터(Filter) vs 인터셉터(Interceptor) vs AOP 차이점

개발하는 민우 2025. 2. 19. 20:40

https://mangkyu.tistory.com/173

 

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

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

mangkyu.tistory.com

위의 글이 정말 정리가 잘 되어 있어서 위 글을 적극 참고하였다!

 

 

필터(Filter)

필터는 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 URL 패턴에 맞는 모든 요청에 부가작업을 처리할 수 있는 작업을 말함 ( 필터는 스프링 범위 밖에서 처리가 되는 것이다)

 

필터 메서드

  • init 메서드: 웹 컨테이너가 init 메서드를 호출하여, 필터 객체를 초기화하면 이후 요청들은 doFIlter를 통해 처리
  • doFilter 메서드: url-pattern에 맞는 모든 HTTP 요청이 디스패처 서블릿으로 전달되기 전에 웹 컨테이너에 의해 실행되는 메서드
  • destroy 메서드: 필터 객체를 서비스에서 제거하고 사용하는 자원을 반환하는 메서드

 

인터셉터(Interceptor)

디스패처 서블릿(Dispatcher Servlet)이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다.

 

인터셉터 메서드

  • preHandle 메서드: 컨트롤러가 호출되기 전에 실행된다. 컨트롤러 이전에 처리해야 하는 전처리 작업이나 요청 정보를 가공하거나 추가하는 경우에 사용 가능
  • postHandle 메서드: 컨트롤러를 호출된 후에 실행된다. 컨트롤러 하위 계층에서 작업을 진행하다가 예외를 마주치면, postHandle 호출되지 않는다.
  • afterCompletion 메서드: postHandle과 달리, 컨트롤러 하위 계층에서 작업을 진행하다가 중간에 예외가 발생하더라도 반드시 호출

 

인터셉터(interceptor)와 AOP의 비교

  1. 컨트롤러는 타입과 실행 메소드가 모두 제각각이라 포인트컷(적용할 메소드 선별)의 작성이 어렵다.
  2. 컨트롤러는 파라미터나 리턴 값이 일정하지 않다.
  3. AOP에서는 HttpServletRequest/Response를 객체를 얻기 어렵지만 인터셉터에서는 파라미터로 넘어온다.

Request/Response 객체 조작 가능 여부

  • 필터는 Request와 Response를 조작할 수 있지만 인터셉터는 조작할 수 없다. 여기서 조작한다는 것은 내부 상태를 변경한다는 것이 아니라 다른 객체로 바꿔친다는 의미이다.
  • 인터셉터는 우리가 다른 Request/Response 객체를 넘겨줄 수 없다.

 

필터(Filter)의 용도 및 예시

모든 요청에 대한 로깅 또는 감사

 

인터셉터(Interceptor)의 용도 및 예시

API 호출에 대한 로깅 또는 감사