일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 가변 객체
- 싱글 스레드
- 참조 타입
- 일괄처리
- @Bean
- Open EntityManager In View
- @componentScan
- open session in view
- open-in-view
- OSIV
- 필드 주입
- 메서드 주입
- Handler Adepter
- Spring Framework
- 익명 함수
- 불변 객체
- 이펙티브 자바
- Request flow
- Spring Batch
- 빈
- @FunctionalInterface
- spring boot
- 스프링 빈
- Batch
- @Configuration
- mavenCentral
- 생성자 주입
- View Resolver
- 컴포넌트스캔
- Dispatcher Servlet
Archives
- Today
- Total
보다 더 나은 내일의 나를 위해
[Spring Boot] Interceptor와 Filter는 어떤 게 다를까? 본문
개요
예전에 했던 프로젝트를 조금 리펙터링 하던 중 인터셉터를 사용할 일이 있었습니다. 그러다 문득 '예전에 인터셉터와 필터가 무엇이 다른지 봤었는데'라는 생각이 났지만, 기억이 나지 않았습니다. 그래서 이 기회에 정리해 보려고 합니다.
실행 시점
우선 필터와 인터셉터는 스프링 플로우 중 실행 시점이 다릅니다.
위 그림에서 알 수 있듯, 필터는 DispatcherServlet보다 먼저 실행됩니다. 따라서 필터는 웹 애플리케이션의 Context 기능이라 Spring의 Context에 접근하기 힘듭니다.
반대로 인터셉터는 Spring Context 안에서 실행됩니다. Controller가 동작하기 전에 실행되죠. 따라서 다른 빈을 사용하는 등 다른 Spring Context에 접근하기 편리합니다.
uri 패턴
인터셉터는 Configuration에서 addInterceptors() 함수를 이용해 인터셉터에 특정 uri 패턴을 지정해 줄 수 있습니다.
@Configuration
public class MyInterceptorConfig implements WebMvcConfigurer {
private final MyInterceptor myInterceptor;
public MyInterceptorConfig(MyInterceptor myInterceptor) {
this.myInterceptor = myInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor)
.addPathPatterns("/user")
.addPathPatterns("/m/**");
}
}
이를 사용해 어떤 요청에 대해서 어떤 인터셉터를 사용할지 정할 수 있습니다.
그렇다면 필터는 어떻게 지정할까요? 필터는 스프링부트에서 제공하는 @WebFilter를 사용해 uri 패턴을 지정해 줄 수 있습니다.
@WebFilter(urlPatterns = "/m/*")
public class MyFilter implements Filter {
// ...
}
만약 @Component로 등록한다면 모든 uri에 대해서 작동하게 됩니다.
'spring' 카테고리의 다른 글
DI[Dependency Injection] - @Autowired와 생성자 주입의 차이점 (0) | 2022.06.29 |
---|---|
@Service를 record 클래스로 작성해도 괜찮을까? (0) | 2022.06.20 |
[Spring Boot] @Component와 @Bean의 차이는? (0) | 2022.06.13 |
Spring MVC 요청 흐름 (0) | 2022.06.02 |
Comments