๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring

[Spring] Filter์™€ Interceptor ์ฐจ์ด

by young-ji 2023. 4. 22.

 

Spring์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ๊ณตํ†ต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์—…๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡๊ฐ€์ง€์˜ ๊ธฐ๋Šฅ๋“ค์„ ์ง€์›ํ•œ๋‹ค.

 

  1. Filter (ํ•„ํ„ฐ)
  2. Interceptor(์ธํ„ฐ์…‰ํ„ฐ)
  3. AOP(๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

 

์œ„์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์€ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ณ  ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

AOP๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— ๊ฑธ์ณ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค๋ฉด, Filter์™€ Interceptor๋Š” ์ฃผ๋กœ Controller ๋ ˆ์ด์–ด์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ฐ€๋กœ์ฑ„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

Filter์™€ Interceptor์˜ ์ฐจ์ด์ ์„ ์ค‘์ ์ ์œผ๋กœ ์ •๋ฆฌํ•ด๋ณด์ž.


Filter

J2EE ํ‘œ์ค€ ์ŠคํŽ™ ๊ธฐ๋Šฅ์œผ๋กœ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ(Dispatcher Servlet)์— ์š”์ฒญ์ด ์ „๋‹ฌ๋˜๊ธฐ ์ „/ํ›„์— url ํŒจํ„ด์— ๋งž๋Š” ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ๋ถ€๊ฐ€์ ์ธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

(J2EE๋Š” ์ž๋ฐ” ๊ธฐ์ˆ ๋กœ ๊ธฐ์—…ํ™˜๊ฒฝ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ ์ŠคํŽ™๋“ค์„ ๋ชจ์•„๋‘” ์ŠคํŽ™ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค)

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ ํ†ฐ์บฃ๊ณผ ๊ฐ™์€ ์›น ์ปจํ…Œ์ด๋„ˆ(์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ)์— ์˜ํ•ด ๊ด€๋ฆฌ ๋œ๋‹ค. ๋•Œ๋ฌธ์— ํ•„ํ„ฐ๋Š” ์Šคํ”„๋ง์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋‚ด์šฉ์„ ์ ์šฉ๋ฐ›์„ ์ˆ˜ ์—†์œผ๋ฉฐ ์Šคํ”„๋ง์— ์˜ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ์™ธ๋ฅผ ํ•ธ๋“ค๋งํ•˜๊ธฐ ์œ„ํ•ด์„  ๋ณ„๋„์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

 

ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด javax.servlet์˜ Filter ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

public interface Filter {

    public default void init(FilterConfig filterConfig) throws ServletException {}

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
    					throws IOException, ServletException;

    public default void destroy() {}
}

doFilter ๋ฉ”์†Œ๋“œ

url ํŒจํ„ด์— ๋งž๋Š” ๋ชจ๋“  HTTP ์š”์ฒญ์„ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ์ „์— ์›น ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. doFilter์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ FilterChain์ด ์žˆ๋Š”๋ฐ, FilterChain์˜ doFilter๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ๋Œ€์ƒ์œผ๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๋„ฃ์–ด์คŒ์œผ๋กœ์จ ์›ํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ ํ•  ์ˆ˜์žˆ๋‹ค.

 

 

์ด๋•Œ ํ•„ํ„ฐ๊ฐ€ ๋‹ค์Œ ํ•„ํ„ฐ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ•„ํ„ฐ ์ฒด์ด๋‹์„ ํ•ด์ค„๋•Œ, Requst์™€ Response ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ์ฃผ๋ฏ€๋กœ ์šธ๋ฆฌ๋Š” ํ•ด๋‹น ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ฐ”๋€Œ์น˜๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

public TestFilter implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        // ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค๋ฅธ request์™€ response๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ์Œ
        chain.doFilter(new MockHttpServletRequest(), new MockHttpServletResponse());       
    }
}

์ฆ‰, ์š”์ฒญ์™€ ์‘๋‹ต ๊ฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Spring Security๋ฅผ ํ†ตํ•ด Filter๋ฅผ ์ต์ˆ™ํ•˜๊ฒŒ ์ ‘ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, Spring Security๊ฐ€ Spring MVC์— ์ข…์†์ ์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ–๋Š” ์ด์œ ๊ฐ€ ํ•„ํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ์ฆ/์ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

Interceptor

ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ๋กœ, ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „/ํ›„์— ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์ฆ‰, ์ธํ„ฐ์…‰ํ„ฐ๋Š” ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์—์„œ ๋™์ž‘ํ•œ๋‹ค.

 

๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ํ†ตํ•ด ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ๋„๋ก ์š”์ฒญํ•˜๋Š”๋ฐ, ๊ทธ ๊ฒฐ๊ณผ๋กœ HandlerExecutionChain(์‹คํ–‰ ์ฒด์ธ)์„ ๋Œ๋ ค์ค€๋‹ค. ์ด ์‹คํ–‰ ์ฒด์ธ์€ 1๊ฐœ ์ด์ƒ์˜ ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค๋ฉด ์ˆœ์ฐจ์ ์œผ๋กœ ์ธํ„ฐ์…‰ํ„ฐ๋“ค์„ ๊ฑฐ์ณ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•˜๊ณ , ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ๋ฐ”๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

(์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ์ปดํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์š”์ฒญ์„ ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ ์œ„ ๊ทธ๋ฆผ์€ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ๋„์‹ํ™”ํ•œ ๊ฒƒ์ด๋‹ค.)

 

 

 

์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” org.springframework.web.servlet์˜ HandlerInterceptor ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

public interface HandlerInterceptor {

    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {
        return true;
    }

    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        @Nullable ModelAndView modelAndView) throws Exception {
    }

    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
        @Nullable Exception ex) throws Exception {
    }
}

preHandler ๋ฉ”์†Œ๋“œ

์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋˜์–ด ์ปจํŠธ๋กค๋Ÿฌ ์ด์ „์ด ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ „์ฒ˜๋ฆฌ ์ž‘์—…์ด๋‚˜ ์š”์ฒญ ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

handler ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์ด ์ฐพ์•„์ค€ ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ์— ๋งคํ•‘๋˜๋Š” HandlerMethod๋ผ๋Š” ํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ, @RequestMapping์ด ๋ถ™์€ ๋ฉ”์†Œ๋“œ์˜ ์ •๋ณด๋ฅผ ์ถ”์ƒํ™”ํ•œ ๊ฐ์ฒด์ด๋‹ค. (๋ฌด์Šจ๋ง์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค)

boolean ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ๋ฐ˜ํ™˜๊ฐ’์ด true์ด๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋˜์ง€๋งŒ, false๋ผ๋ฉด ์ž‘์—…์ด ์ค‘๋‹จ๋˜๋ฉฐ ์ดํ›„ ์ž‘์—…์€ ์ง„ํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

์ด๋•Œ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ์—ฌ๋Ÿฌ ์ธํ„ฐ์…‰ํ„ฐ ๋ชฉ๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, for๋ฌธ์„ ํ†ตํ•ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚จ๋‹ค. boolean ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋‹ค์Œ ์ธํ„ฐ์…‰ํ„ฐ์˜ ์‹คํ–‰ ์œ ๋ฌด๋ฅผ ์•Œ๋ ค์ค„๋ฟ Request์™€ Response ๊ฐ์ฒด๋Š” ๋„˜๊ฒจ์ค„ ์ˆ˜ ์—†๊ธฐ๋•Œ๋ฌธ์— ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ ์š”์ฒญ, ์‘๋‹ต์„ ๊ฐ€๊ณตํ• ์ˆœ์—†๋‹ค. (๊ฐ์ฒด ์ž์ฒด๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜๋Š” ์—†์œผ๋‚˜ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ–๋Š” ๊ฐ’์€ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ€๊ณต ๊ฐ€๋Šฅ)

public class TestInterceptor implements HandlerInterceptor {

    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        // Request/Response๋ฅผ ๊ต์ฒดํ•  ์ˆ˜ ์—†๊ณ  boolean ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
        return true;
    }
}

 

 

postHandler ๋ฉ”์†Œ๋“œ

์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•œ ํ›„์— ์‹คํ–‰๋œ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ModelAndView ํƒ€์ž…์ด ์ •๋ณด๊ฐ€ ์ œ๊ณต๋œ๋Š๋ฐ, ์ตœ๊ทผ์—๋Š” Json ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” RestAPI ๊ธฐ๋ฐ˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

afterCompletion ๋ฉ”์†Œ๋“œ

๋ชจ๋‘” ๋ทฐ์—์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ์„ ๋ชจํ•จํ•ด ๋ชจ๋“  ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„์— ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. postHandler์™€ ๋‹ฌ๋ฆฌ ์ปจํŠธ๋กค๋Ÿฌ ํ•˜์œ„ ๊ณ„์ธต์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ํ˜ธ์ถœ๋œ๋‹ค.

 

 

โ—๏ธ ์ปจํŠธ๋กค๋Ÿฌ์— ์ ์šฉํ•  ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ AOP๊ฐ€ ์•„๋‹Œ ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

     → ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํƒ€์ž…์ด ์ผ์ •ํ•˜์ง€ ์•Š๊ณ  ํ˜ธ์ถœ ํŒจํ„ด๋„ ์ œ๊ฐ๊ฐ์ด๋ผ ์ปจํŠธ๋กค๋Ÿฌ์— AOP๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด ๋ฒˆ๊ฑฐ๋กœ์šด ๋ถ€๊ฐ€์ž‘์—…๋“ค์ด ์ƒ๊ธด๋‹ค.

     → AOP์—์„œ๋Š” HttpServletRequest/Response ๊ฐ์ฒด๋ฅผ ์–ป๊ธฐ ์–ด๋ ต๋‹ค.

 

 


์‚ฌ์šฉ๋ชฉ์ 

Filter

ํ•„ํ„ฐ๋Š” Spring๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ „์—ญ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ž‘์—…๋“ค์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ „๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ• ๋•Œ ์ ํ•ฉ.

์ธํ„ฐ์…‰ํ„ฐ๋ณด๋‹ค ์•ž๋‹จ์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ์š”์ฒญ์ด ์•„๋‹ ๊ฒฝ์šฐ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€ ์š”์ฒญ์ด ์ „๋‹ฌ๋˜์ง€ ๋ชปํ•˜๊ณ  ์ฐจ๋‹จ๋˜๋ฏ€๋กœ ์•ˆ์ •์„ฑ์„ ๋”์šฑ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

  • ๋ณด์•ˆ ๋ฐ ์ธ์ฆ/์ธ๊ฐ€ ์ž‘์—…
  • ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•œ ๋กœ๊น…, ๊ฒ€์‚ฌ
  • ์ด๋ฏธ์ง€, ๋ฐ์ดํ„ฐ ์••์ถ•
  • ํ—ค๋” ์ถ”๊ฐ€ ๋ฐ ์ธ์ฝ”๋”ฉ ๋ณ€๊ฒฝ
  • Spring๊ณผ ๋ถ„๋ฆฌ๋˜์–ด์•ผํ•˜๋Š” ๊ธฐ๋Šฅ

Interceptor

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๊ณผ ๊ด€๋ จ๋˜์–ด ์ „์—ญ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ๋˜๋Š” ์ž‘์—…๋“ค. Controller๋กœ ๋„˜์–ด๊ฐ€๊ธฐ์ „์— ์„ธ๋ถ€์ ์ธ ๊ฒ€์‚ฌ์™€ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š”๋ฐ ์ ํ•ฉํ•˜๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋Œ€์‹  ๊ฐ์ฒด๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ–๋Š” ๊ฐ’์€ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋„˜๊ฒจ์ฃผ๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค.

  • ์„ธ๋ถ€์ ์ธ ๋ณด์•ˆ ๋ฐ ์ธ์ฆ/์ธ๊ฐ€ ๊ณตํ†ต ์ž‘์—…
  • API ํ˜ธ์ถœ์— ๋Œ€ํ•œ ๋กœ๊น…, ํ†ต๊ณ„
  • Controller๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ์ •๋ณด๋ฅผ ๊ฐ€๊ณต

 

 

 

์ •๋ฆฌ

  Filter Interceptor
๋™์ž‘ ์œ„์น˜ ์›น ์ปจํ…์ŠคํŠธ ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ
์Šคํ”„๋ง์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ X O
์‘๋‹ต, ์š”์ฒญ ๊ฐ์ œ ์กฐ์ž‘ O X

 

โœ… ํ•œ์ค„ ์ •๋ฆฌ?!

Filter์™€ Interceptor๋Š” ๋ชจ๋‘ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. Filter๋Š” ์›น ์ปจํ…Œ์ด๋„ˆ์— ์œ„์น˜ํ•˜๋ฉฐ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „ํ›„์— ๋™์ž‘ํ•˜๋ฉฐ Interceptor๋Š” ์Šคํ”„๋ง์ปจํ…์ŠคํŠธ์—์„œ ๋™์ž‘ํ•˜๋ฉฐ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์„์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „ํ›„์— ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— Filter์˜ ๊ฒฝ์šฐ Spring๊ณผ ๋ฌด๊ด€ํ•œ ์ž‘์—…(์ธ์ฆ/์ธ๊ฐ€, ๋ฐ์ดํ„ฐ ์••์ถ•, ์ธ์ฝ”๋”ฉ)์„ ์ฒ˜๋ฆฌํ•˜๊ณ  Interceptor์˜ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ด€๋ จ๋œ ์„ธ๋ถ€์ ์ธ ๊ฒ€์‚ฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

reference.

https://mangkyu.tistory.com/173

 

 

 

 

์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€์„ ํ†ตํ•ด ์•Œ๋ ค์ฃผ์„ธ์š”. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€