티스토리 뷰

JAVA/Spring

Interceptor와 Filter

오야토 2023. 9. 22. 15:17
Interceptor
: Spring Framework에서 웹 어플리케이션의 요청과 응답을 가로채고 처리하는 기능을 제공하는 컴포넌트

[ 인터셉터의 주요 역할 ]

1. 요청, 응답 검사

: Client의 요청이 Controller에 도착하기 전이나 Controller에서 나가기 전에 Request와 Response을 가로채 수정하거나 검사할 수 있다.

2. 작업처리

: 웹 어플리케이션의 보안, 로깅, 캐싱, 권한 검사, 로그인 상태 확인 등의 다양한 작업을 처리한다.

3. Controller 전처리와 후처리

: Controller에 들어가기 전에 요청을 처리하는 전처리 단계와 요청을 처리하고 나서 응답을 가공하거나 추가적인 작업을 수행하는 후처리 단계가 있다.

 

4. 유연한 구성 

: Spring에서 xml, java 설정파일에서 구성한다.

 

5. 다중 인터셉터 사용

: 여러개의 인터셉터를 사용해 각각 특정한 작업을 담당할 수 있다.

 

6. 예외처리

: 요청 중에 발생한 예외를 처리하고 예외에 따라 특정한 동작을 수행할 수 있다.

 


Filter
: J2EE 표준 스펙의 기능으로 디스패처 서블릿(Dispatcher Servlet)에 요청을 전/후에 추가 작업을 처리한다.

 

[ 필터의 주요 역할]

1. 요청, 응답 검사

: 웹 애플리케이션의 모든 Request와 Response를 처리한다.

 

2 작업처리

: 문자 인코딩 변경, 보안 헤더 추가, 로깅, 캐싱과 같은 작업을 수행한다.

 

3. 독자적인 프레임워크

: 프레임워크에 독립적으로 사용할 수 있어 다른 웹 애플케이션 프레임워크에서도 사용이 가능하다.

 


 

[ Filter와 Interceptor의 차이점 ]

  Interceptor Filter
범위 Spring MVC로 Controller에 직접 접근을 요청하는 것만 적용 모든 request와 response에 적용되고 URL로 접근을 제한
프레임워크 Spring  독자적, 서블릿에 따라 동작

 



쉽게 설명하자면,

Filter와 Interceptor는 경찰관과 항공 보안관의 역할이다.

첫번째 예시로 Filter와 Interceptor가 도로 위의 경찰관이라면 Filter는 무면허 운전자, 자동차 번호판을 달지 않은 오토바이를 가진 운전자를 막는다. 웹사이트로 치면 유효성 검사를 통해 특정 조건이 충족되지 않으면 요청 자체를 차단한다.

Interceptor는 단속을 하면서 일반 운전자는 통과시키지만 음주를 한 특정 운전자는 면허를 정지시키거나 신호위반 운전자는 벌금을 부과하는 등 검사의 결과에 따라 다르게 처리하는 행위와 같다. 여기서 Controller에 직접 접근하는 것은 "목적지에 직접 차량을 운전해서 접근하는 행위"로 말할 수 있다. 웹 사이트에서 로그인을 하지 않고 마이페이지로 넘어갈 때 접근을 차단하거나 로그인 페이지로 이동하는 행위 등을 비유할 수 있다.

 

두번째 예시로 Filter와 Interceptor 항공 보안관이라면

Filter는 출입국 검사에서 출입국 금지자의 입장을 원천 봉세한다. 웹사이트로 치면 특정 IP에서 오는 요청을 차단한다.

Interceptor는 출입국 검사에서 블랙리스트에 등록된 사람을 철저하게 검사 후 출입국을 허용하는 행위처럼 특정 권한을 가진 사용자는 특정 페이지에 접근할 수 있도록 Controller와 관련된 작업을 처리한다.