> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/web/back-end/what-is-spring-framework/spring-aop/filter-vs-interceptor.md).

# Filter vs Interceptor

이 문서에서는 스프링 필터와 인터셉터의 공통점, 차이점, 특징에 대해 살펴본다.

## 공통점

인터셉터와 필터는 다음의 공통점을 가진다.

### 간섭 객체

필터와 인터셉터 모두 특정한 패턴의 URL에 대한 간섭을 수행할 수 있는 AOP 구현체들이다.\
인터셉터에서 `preHandle` 메소드만 사용한다면 필터를 이용한 것과 유사한 효과가 발생한다.

## 차이점

### 간섭 시점

필터는 `DispatcherServlet`이 실행되기 전 상태의 요청을 간섭한다.\
인터셉터는 `DispatcherServlet`이 실행 중 상태를 간섭한다.

따라서 인터셉터는 `DispatcherServlet`이 처리하지 않는 상태(404 not found)는 처리할 수 없다.\
하지만 필터는 404 not found도 간섭이 가능하다.

### 용도 차이

필터의 경우 다음의 작업이 가능하다.

* 요청, 응답 객체 교체

자주 쓰이는 작업은 아니지만 사용자가 보낸 요청을 기반으로 하여 새로운 요청을 만들어서 전송해야 할 경우 코드 구현이 가능하다.

```java
filterChain.doFilter(request, response);
```

위의 코드가 필터의 속행(통과) 코드인데, 위의 `request`와 `response`를 다른 값으로 변경할 수 있다.

하지만 인터셉터의 `preHandle`에서의 속행 코드는 다음과 같기 때문에 다른 값으로 변경할 수 없다.

```java
return true;
```
