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의 비교
- 컨트롤러는 타입과 실행 메소드가 모두 제각각이라 포인트컷(적용할 메소드 선별)의 작성이 어렵다.
- 컨트롤러는 파라미터나 리턴 값이 일정하지 않다.
- AOP에서는 HttpServletRequest/Response를 객체를 얻기 어렵지만 인터셉터에서는 파라미터로 넘어온다.
Request/Response 객체 조작 가능 여부
- 필터는 Request와 Response를 조작할 수 있지만 인터셉터는 조작할 수 없다. 여기서 조작한다는 것은 내부 상태를 변경한다는 것이 아니라 다른 객체로 바꿔친다는 의미이다.
- 인터셉터는 우리가 다른 Request/Response 객체를 넘겨줄 수 없다.
필터(Filter)의 용도 및 예시
모든 요청에 대한 로깅 또는 감사
인터셉터(Interceptor)의 용도 및 예시
API 호출에 대한 로깅 또는 감사
'프로젝트 > Ku:room' 카테고리의 다른 글
인터셉터에서 RequestBody를 Read 하지 못하는 이유 및 해결방법 (0) | 2025.02.20 |
---|---|
Spring REST Docs와 Swagger-UI 결합하기 (0) | 2025.02.19 |
스프링 로깅 전략을 AOP에서 interceptor로 변경하기 (0) | 2025.02.18 |
개발자 겸 디자이너 겸 PM 도전기 (0) | 2025.02.14 |
nGrinder 스크립트 검증 도중 Connection refused (1) | 2025.02.13 |