πŸ€ Spring

Filter VS Interceptor

기술 제곡자

  • Filter: J2EE ν‘œμ€€ μŠ€νŽ™μ„ κ΅¬ν˜„ν•œ κΈ°μˆ μ΄λ‹€. ν†°μΊ£κ³Ό 같은 μ›Ή μ»¨ν…Œμ΄λ„ˆμ— μ˜ν•΄ κ΄€λ¦¬λœλ‹€.
  • Interceptor: μŠ€ν”„λ§μ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°μˆ μ΄λ‹€. λ””μŠ€νŒ¨μ²˜ μ„œλΈ”λ¦Ώμ΄ 컨트둀러λ₯Ό ν˜ΈμΆœν•˜κΈ° μ „κ³Ό 후에 응닡을 μ°Έμ‘°ν•˜κ±°λ‚˜ κ°€κ³΅ν•œλ‹€.
κ΄€λ¦¬λ˜λŠ” μ»¨ν…Œμ΄λ„ˆκ°€ 각각 웹 μ»¨ν…Œμ΄λ„ˆμ™€Β μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ΄λ‹€.

μ‹€ν–‰ μ‹œμ 

  • Filter
    • doFilter(): μš”μ²­μ΄ λ””μŠ€νŒ¨μ²˜ μ„œλΈ”λ¦Ώμ— μ „λ‹¬λ˜κΈ° 전에 μˆ˜ν–‰λœλ‹€.
    • doFilter(): 응닡이 λ””μŠ€νŒ¨μ²˜ μ„œλΈ”λ¦Ώμ„ 거치고 λ‚œ 이후에 μˆ˜ν–‰λœλ‹€.
  • Interceptor
    • preHandle(): μš”μ²­μ΄ λ””μŠ€νŒ¨μ²˜ μ„œλΈ”λ¦Ώμ— μ „λ‹¬λœ 이후에 μˆ˜ν–‰λœλ‹€.
    • postHandle(): 응닡이 λ””μŠ€νŒ¨μ²˜ μ„œλΈ”λ¦Ώμ„ 거치기 전에 μˆ˜ν–‰λœλ‹€.

Request/Response μ‘°μž‘ κ°€λŠ₯ μ—¬λΆ€

ν•„ν„°λŠ”Β Request,Β Response 객체 자체λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€. λ°˜λ©΄μ— μΈν„°μ…‰ν„°λŠ” λΆˆκ°€λŠ₯ν•˜λ‹€. 이λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€λŠ” 것은 λ‹€λ₯Έ 객체둜 λ³€κ²½ν•˜μ—¬ 전달할 수 μžˆλ‹€λŠ” λœ»μ΄λ‹€.
public class CustomFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { // μ‘°μž‘λœ request, response 둜 doFilter() 의 호좜이 κ°€λŠ₯ν•˜λ‹€. chain.doFilter(request, response); } }
public class MyInterceptor implements HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { // true, false 만 λ°˜ν™˜ κ°€λŠ₯ν•˜λ‹€. return true; } }

μš©λ„

  • 사싀상 λΉ„μŠ·ν•œ μš©λ„λ‘œλ„ 많이 μ“°λŠ” 것 κ°™λ‹€.
    • ex. λ³΄μ•ˆ, 인가 μž‘μ—…, λ‘œκΉ…, Audit
  • FilterΒ λŠ” μŠ€ν”„λ§κ³Ό λΆ„λ¦¬λ˜μ–΄μ•Ό ν•˜λŠ” κΈ°λŠ₯을 적용 κ°€λŠ₯ν•˜λ‹€.
    • ex. 이미지/데이터 μ••μΆ• 및 λ¬Έμžμ—΄ 인코딩
  • InterceptorΒ λŠ” μŠ€ν”„λ§κ³Ό 연관이 λ§Žμ€ μž‘μ—…μ„ ν•˜κΈ° 쉽닀.
    • ex. 빈 ν˜ΈμΆœμ— λŒ€ν•œ λ‘œκΉ…, Audit

빈 등둝 μ—¬λΆ€

사싀상 λ‘˜ λ‹€ 빈으둜 등둝이 κ°€λŠ₯ν•˜λ‹€κ³  λ³΄λŠ” 것이 λ§žλ‹€.
InterceptorΒ λŠ” λ‹Ήμ—°νžˆ μŠ€ν”„λ§μ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°μˆ μ΄κΈ°μ— 빈 등둝이 κ°€λŠ₯ν•˜λ‹€.
FilterΒ λŠ” μ„œλΈ”λ¦Ώμ—μ„œ μ œκ³΅ν•˜μ§€λ§Œ, μŠ€ν”„λ§μ—μ„œ μ œκ³΅ν•˜λŠ”Β DelegatingFilterProxy 둜 ν”„λ‘μ‹œ ν•„ν„° ν˜•νƒœλ‘œ 빈 등둝이 κ°€λŠ₯ν•˜λ‹€.
μŠ€ν”„λ§ λΆ€νŠΈμ—μ„œλŠ” λ‚΄μž₯ 톰캣을 μ΄μš©ν•΄ μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆκΉŒμ§€ μŠ€ν”„λ§ λΆ€νŠΈκ°€ μ œμ–΄ν•˜κ²Œ λ˜λ―€λ‘œΒ DelegatingFilterProxy 둜 κ°μ‹Έμ„œ 등둝할 ν•„μš”λ„ μ—†λ‹€.

좜처