μ‘°μμ μΏ€μ ν μ½ν‘: μλΈλ¦Ώ νν° & μ€νλ§ μΈν°μ ν° λ°νλ₯Ό λ³΄κ³ μ 리ν λ΄μ©μ λλ€.
μ€λ¬΄μ νμ΅μμ νν°μ μΈν°μ ν°μ μ°¨μ΄, μ μ ν μ¬μ© μμ μ λν κ°μ μ‘λ λ° λμμ΄ λ©λλ€.
μ₯λ°κ΅¬λμ λ¬Όνμ μΆκ°νλ addCart(), μ₯λ°κ΅¬λμ λ¬Όνμ μ‘°ννλ getCarts() κ°μ κΈ°λ₯μ λ‘κ·ΈμΈμ΄ νμμ
λλ€.
β λͺ¨λ λ©μλμ μΈμ¦λ‘μ§μ λ°λ³΅ν΄μΌ νλμ?
μλμ!
μ΄λ° λ°λ³΅λλ λΆλΆμ **κ³΅ν΅ κ΄μ¬μ¬(Cross-cutting concern)**λΌκ³ νλ©°, μ΄λ₯Ό ν κ³³μ λͺ¨μ μ²λ¦¬νλ©΄ μ½λκ° ν¨μ¬ κΉλν΄μ§λλ€.
@Component@WebFilter + @ServletComponentScan@WebFilter(urlPatterns = "/api/*")
public class MyFilter implements Filter { ... }
@SpringBootApplication
@ServletComponentScan
public class App {}
@ServletComponentScan: μΉ νν°, μΉ μλΈλ¦Ώ, μΉ λ¦¬μ€λ κ°μ΄ μλΈλ¦Ώ κ°μ²΄λ₯Ό μλΈλ¦Ώ 컨ν μ΄λ μμ μ¬λ¦¬λ λμμ μμΌμ£Όλ μ΄λ Έν μ΄μ
@Order μ¬μ© λΆκ° βFilterRegistrationBean μ¬μ© (κΆμ₯)@Bean
public FilterRegistrationBean<MyFilter> loggingFilter() {
FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new MyFilter());
registration.setOrder(1);
registration.addUrlPatterns("/api/*");
return registration;
}
ApplicationFilterChainμΌλ‘ μ€νλ¨doFilter() β internalDoFilter() νΈμΆ


컨νΈλ‘€λ¬ μ€ν μ /νμ λμνλ μ€νλ§ μ μ© μ»΄ν¬λνΈ
μΈμ¦, μΈκ°, λ‘κΉ , μμΈ νΈλ€λ§ λ± νμ© κ°λ₯
| λ©μλ | μ€λͺ |
|---|---|
preHandle | 컨νΈλ‘€λ¬ μ€ν μ νΈμΆ |
postHandle | 컨νΈλ‘€λ¬ μ€ν ν, λ·° λ λλ§ μ |
afterCompletion | λ·°κΉμ§ λ λλ§ ν λ§μ§λ§ μ²λ¦¬ |
λͺ¨λ λν΄νΈ λ©μλμ΄λ―λ‘ νμν κ²λ§ μ€λ²λΌμ΄λνλ©΄ λ¨
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/api/**")
.excludePathPatterns("/auth/**");
}
}
[Filter] β DispatcherServlet
β getHandler (νΈλ€λ¬ & μΈν°μ
ν° λͺ©λ‘ ν보)
β preHandle μμ°¨ μ€ν
β Controller μ€ν
β postHandle μμ μ€ν
β ViewResolver νΈμΆ
β afterCompletion μμ μ€ν
μΈν°μ ν°λ μ€νλ§ μ»¨ν μ€νΈ μμμ 컨νΈλ‘€λ¬λ₯Ό κΈ°μ€μΌλ‘ μ νλ₯Ό κ°μ
κΈ°λ³Έμ μΌλ‘ μ€νλ§μ΄ μ 곡νλ νΈλ€λ¬ μ²΄μΈ μμμ μ€νλ¨
| νλͺ© | νν° | μΈν°μ ν° |
|---|---|---|
| κΈ°μ κΈ°λ° | μλ° EE μλΈλ¦Ώ μ€ν | μ€νλ§ νλ μμν¬ |
| λ±λ‘ λμ | μλΈλ¦Ώ 컨ν μ΄λ | μ€νλ§ λΉ |
| μ€ν μμΉ | DispatcherServlet μ΄μ | DispatcherServlet μ΄ν |
| μμΈ μ²λ¦¬ | μ€νλ§ MVC μμΈ μ²λ¦¬ μ²΄μΈ μΈλΆ (μμΈ νΈλ€λ¬ λμ λΆκ°) | μ€νλ§ MVC μμΈ μ²λ¦¬ μ²΄μΈ λ΄λΆ (μ‘μμ μ²λ¦¬ κ°λ₯) |
| request/response κ΅μ²΄ | κ°λ₯ | λΆκ° |
| μμ μ§μ | FilterRegistrationBeanμΌλ‘ κ°λ₯ | registry.order() λ±μΌλ‘ κ°λ₯ |
μΉ μ λ° β νν°
μ€νλ§ μ»¨ν μ€νΈ λ΄λΆμ λ‘μ§ β μΈν°μ ν°
μ€νλ§μ λ°μ μΌλ‘ νν°λ μ€νλ§ λΉμΌλ‘ λ±λ‘ν μ μκ² λμμ§λ§,
λμ μ±
μκ³Ό κ΄μ¬μ¬λ μ¬μ ν ꡬλΆλμ΄μΌ νλ€.
κΈ°μ€μ λͺ ννκ² μ νκ³ μ¬μ©νμ!
πΊ μ‘°μ, μΏ€μ ν μ½ν‘: μλΈλ¦Ώ νν° & μ€νλ§ μΈν°μ ν°