lottie
Seungjun's blog
blog
필터 vs 인터셉터

필터(Filter)와 인터셉터(Interceptor)

필터(Filter)와 인터셉터(Interceptor)는 모두 웹 애플리케이션에서 요청을 가로채 처리하는 역할을 하지만, 그들의 사용 목적과 작동 방식에는 차이가 있습니다.

필터(Filter)

필터는 자바 표준 스펙으로 서블릿 컨테이너 layer에서 동작하며, 서블릿 사양의 일부입니다. 필터는 클라이언트의 요청이 서블릿에 도달하기 전과 후에 처리를 수행할 수 있습니다. 필터는 인코딩, 보안, 로깅, 이미지 변환 등의 기능을 수행하는 데 주로 사용됩니다. 필터는 web.xml에 등록하거나 @WebFilter 어노테이션을 사용하여 등록할 수 있습니다.

인터셉터(Interceptor)

인터셉터는 스프링에서 지원하며 스프링 프레임워크 layer에서 동작하며, 스프링 MVC의 일부입니다.

인터셉터는 컨트롤러가 요청을 처리하기 전과 후, 뷰가 렌더링되기 전에 처리를 수행할 수 있습니다. 인터셉터는 CORS, 인증, 권한 확인, 로깅, 트랜잭션 관리 등의 기능을 수행하는 데 주로 사용됩니다. 인터셉터는 스프링의 설정 파일이나 @Configuration 어노테이션을 사용한 설정 클래스에서 등록할 수 있습니다.

 인터셉터(Interceptor)AOP

인터셉터 대신에 컨트롤러들에 적용할 부가기능을 어드바이스로 만들어 AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)를 적용할 수도 있다.

하지만 다음과 같은 이유들로 컨트롤러의 호출 과정에 적용되는 부가기능들은 인터셉터를 사용하는 편이 낫다.

  • 컨트롤러는 타입과 실행 메소드가 모두 제각각이라 포인트컷(적용할 메소드 선별)의 작성이 어렵다.

  • 컨트롤러는 파라미터나 리턴 값이 일정하지 않다.

  • AOP에서는 HttpServletRequest/Response의 객체를 얻기 어렵지만 인터셉터에서는 파라미터로 넘어온다.

필터와 인터셉터는 비슷한 역할을 하지만, 필터는 서블릿 컨테이너 수준에서 동작하고, 인터셉터는 스프링 프레임워크 수준에서 동작합니다.

또한 필터는 보안, 인코딩, 로깅 등의 일반적인 웹 처리를 수행하는 데 사용되며, 인터셉터는 인증, 권한 확인, 로깅, 트랜잭션 관리 등의 스프링 관련 처리를 수행하는 데 사용됩니다.


즉, **필터는 웹 애플리케이션의 모든 요청에 대해 일관된 처리를 수행해야 하는 경우**에, **인터셉터는 특정 컨트롤러에 대한 요청에 대해 세밀한 처리를 수행해야 하는 경우**에 사용하는 것이 좋습니다.