νν°μ μΈν°μ ν°λ λ λ€ μΉ μ ν리μΌμ΄μ μμ μμ²κ³Ό μλ΅μ μ²λ¦¬νλ κ³Όμ μμ νΉμ μμ μ μννκΈ° μν΄ μ¬μ©λλ€. μλ° νν°μ μ€νλ§ μΈν°μ ν°λ λͺ¨λ ν΄λΌμ΄μΈνΈμ μμ²μ΄ 컨νΈλ‘€λ¬μ λλ¬νκΈ° μ μ΄λ μλ΅μ΄ ν΄λΌμ΄μΈνΈμ λλ¬νκΈ° μ μ κ°λ‘μ±μ μ²λ¦¬ν μ μλ€.
λν λ λͺ¨λ μμ²μ λν΄ μ¬μ μ²λ¦¬(pre-processing)μ μ¬ν μ²λ¦¬(post-processing)λ₯Ό ν μ μλ€. μλ₯Ό λ€μ΄, μμ² λ‘κ·Έλ₯Ό κΈ°λ‘νκ±°λ μλ΅ ν€λλ₯Ό μμ ν μ μλ€.
νν°μ μΈν°μ ν°λ λͺ¨λ 체μΈ(chain)μ ννλ‘ μ¬λ¬ κ°κ° μ°μμ μΌλ‘ μ€νλ μ μλ€. νλμ νν°λ μΈν°μ ν°κ° λ€μ νν°λ μΈν°μ ν°λ₯Ό νΈμΆνλλ‘ μ€κ³ν μ μλ€.
μ΄λ κ² νν°μ μΈν°μ ν°λ λͺ¨λ μμ²κ³Ό μλ΅μ κ°λ‘μ±μ μ²λ¦¬νλ κΈ°λ₯μ μ 곡νμ§λ§, κ·Έ λμ λ°©μκ³Ό μ μ©λλ κ³μΈ΅μ΄ λ€λ₯΄λ€.
νν° (Filter)
νν°(Filter)λ μλ° μλΈλ¦Ώ μ€νμ μΌλΆλ‘, μλΈλ¦Ώ 컨ν μ΄λμμ μμ²κ³Ό μλ΅μ κ°λ‘μ±μ΄ μ²λ¦¬νλ κΈ°λ₯μ μ 곡νλ€. νν°λ μ£Όλ‘ μλΈλ¦Ώ μμ² μ μ²λ¦¬ λ° μλ΅ νμ²λ¦¬ μμ μ μ¬μ©λλ€.
μ£Όμ νΉμ§
- μλΈλ¦Ώ 컨ν
μ΄λ λ 벨:
- νν°λ μλΈλ¦Ώ 컨ν μ΄λ λ 벨μμ λμνλ€. λͺ¨λ μλΈλ¦Ώ μμ²μ λν΄ μ μ©λ μ μλ€.
- μΉ μ ν리μΌμ΄μ
μ λ°μ μ μ©:
- νΉμ URL ν¨ν΄μ λ§€νλμ΄, μ ν리μΌμ΄μ μ λ°μμ μμ²κ³Ό μλ΅μ κ°λ‘μ± μ μλ€.
- μ£Όμ μ¬μ© μ¬λ‘:
- μΈμ¦ λ° μΈκ°, λ‘κΉ , μμΆ, μΈμ½λ© μ€μ λ±.
- μ€μ λ°©λ²:
- web.xml νμΌμ μ¬μ©νκ±°λ, @WebFilter μ λ Έν μ΄μ μ μ¬μ©νμ¬ μ€μ ν μ μλ€.
- μ€νλ§ λΆνΈμμλ FilterRegistrationBeanμ ν΅ν΄ μ€μ ν μ μλ€.
μμ
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// νν° μ΄κΈ°ν λ‘μ§
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// μμ² μ μ²λ¦¬
System.out.println("Filter: Before processing request");
chain.doFilter(request, response);
// μλ΅ ν μ²λ¦¬
System.out.println("Filter: After processing response");
}
@Override
public void destroy() {
// νν° μ’
λ£ λ‘μ§
}
}
μ€νλ§ μΈν°μ ν° (Interceptor)
μΈν°μ ν°(Interceptor)λ μ€νλ§ MVCμ μΌλΆλ‘, λμ€ν¨μ² μλΈλ¦Ώκ³Ό 컨νΈλ‘€λ¬ μ¬μ΄μμ μμ²κ³Ό μλ΅μ κ°λ‘μ±μ΄ μ²λ¦¬νλ κΈ°λ₯μ μ 곡νλ€. μΈν°μ ν°λ μ£Όλ‘ μ»¨νΈλ‘€λ¬ μ νλ‘ μΆκ° μμ μ μννλ λ° μ¬μ©λλ€.
μ£Όμ νΉμ§
- μ€νλ§ MVC λ 벨:
- μΈν°μ ν°λ μ€νλ§ MVC κ³μΈ΅μμ λμνλ©°, λμ€ν¨μ² μλΈλ¦Ώκ³Ό 컨νΈλ‘€λ¬ μ¬μ΄μμ μμ²μ κ°λ‘μ±λ€.
- μΈλ°ν μμ² μ²λ¦¬:
- νΉμ 컨νΈλ‘€λ¬ λλ νΉμ λ©μλμ λν μμ²μ κ°λ‘μ±μ΄ μ²λ¦¬ν μ μλ€.
- μ£Όμ μ¬μ© μ¬λ‘:
- μΈμ¦ λ° μΈκ°, λ‘κΉ , μΈμ 체ν¬, κ³΅ν΅ μ²λ¦¬ λ‘μ§ λ±.
- μ€μ λ°©λ²:
- HandlerInterceptor μΈν°νμ΄μ€λ₯Ό ꡬννκ³ , WebMvcConfigurerλ₯Ό ν΅ν΄ μ€μ νλ€.
μμ
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 컨νΈλ‘€λ¬ νΈμΆ μ μ²λ¦¬
System.out.println("Interceptor: Before processing request");
return true; // true λ°ν μ λ€μ μΈν°μ
ν° λλ 컨νΈλ‘€λ¬λ‘ μ§ν
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 컨νΈλ‘€λ¬ νΈμΆ ν μ²λ¦¬
System.out.println("Interceptor: After processing request");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// μμ² μλ£ ν μ²λ¦¬ (μμΈ λ°μ μμλ νΈμΆλ¨)
System.out.println("Interceptor: After request completion");
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/**");
}
}
μ£Όμ μ°¨μ΄μ μμ½
νΉμ§ | νν° (Filter) | μΈν°μ ν° (Interceptor) |
μ μ© λ 벨 | μλΈλ¦Ώ 컨ν μ΄λ λ 벨 | μ€νλ§ MVC λ 벨 |
μ£Όμ λͺ©μ | μμ² μ μ²λ¦¬ λ° μλ΅ νμ²λ¦¬ (μΈμ¦, λ‘κΉ , μΈμ½λ© μ€μ λ±) | 컨νΈλ‘€λ¬ μ νμ μΆκ° μμ (μΈμ¦, λ‘κΉ , μΈμ μ²΄ν¬ λ±) |
μ€μ λ°©λ² | web.xml λλ @WebFilter, FilterRegistrationBean | HandlerInterceptor ꡬν λ° WebMvcConfigurer μ€μ |
μ£Όμ μ¬μ© μ¬λ‘ | μ ν리μΌμ΄μ μ λ°μμ μμ²κ³Ό μλ΅μ κ°λ‘μ± | νΉμ 컨νΈλ‘€λ¬ λλ λ©μλμ λν μμ²κ³Ό μλ΅μ κ°λ‘μ± |
ꡬν μΈν°νμ΄μ€ | javax.servlet.Filter | org.springframework.web.servlet.HandlerInterceptor |
νν°(Filter)
- μ μ© λ 벨: μλΈλ¦Ώ 컨ν μ΄λ λ 벨.
- μ£Όμ λͺ©μ : μμ² μ μ²λ¦¬ λ° μλ΅ νμ²λ¦¬ (μ: μΈμ¦, μΈκ°, λ‘κΉ , μΈμ½λ© μ€μ λ±).
- μ€μ λ°©λ²: web.xml νμΌ, @WebFilter μ λ Έν μ΄μ , λλ μ€νλ§ λΆνΈμμ FilterRegistrationBean μ¬μ©.
- μ£Όμ μ¬μ© μ¬λ‘: λͺ¨λ μλΈλ¦Ώ μμ²μ λν κ³΅ν΅ μ²λ¦¬.
μΈν°μ ν°(Interceptor)
- μ μ© λ 벨: μ€νλ§ MVC λ 벨.
- μ£Όμ λͺ©μ : 컨νΈλ‘€λ¬ νΈμΆ μ νμ μΆκ° μμ (μ: μΈμ¦, μΈκ°, λ‘κΉ , μΈμ μ²΄ν¬ λ±).
- μ€μ λ°©λ²: HandlerInterceptor μΈν°νμ΄μ€λ₯Ό ꡬννκ³ , WebMvcConfigurerλ₯Ό ν΅ν΄ μ€μ .
- μ£Όμ μ¬μ© μ¬λ‘: νΉμ 컨νΈλ‘€λ¬ λλ λ©μλμ λν κ³΅ν΅ μ²λ¦¬.
λκΈ