Filter, Interceptor, (Spring) AOP

Filter

  • Dispatcher Servlet์— request๊ฐ€ ์ „๋‹ฌ๋˜๊ธฐ ์ „/ํ›„์— ์‹คํ–‰๋  ๋กœ์ง์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด

  • chaining ํ˜•ํƒœ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉ๋œ๋‹ค.

  • ๋ฐ˜ํ™˜ ํƒ€์ž…์€ void๋กœ, ๋‹ค์Œ Filter Chain์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ „๋‹ฌ์ด ์ข…๋ฃŒ๋œ๋‹ค. chain์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  response์˜ status code๋ฅผ ์„ค์ •ํ•จ์œผ๋กœ์จ ์œ ํšจํ•˜์ง€ ์•Š์€ ์š”์ฒญ์„ ์‚ฌ์ „์— ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

  • chaining์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” request, response๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค.

    • ๋”ฐ๋ผ์„œ, Filter์—์„œ๋Š” request, response ๊ฐ์ฒด ์ž์ฒด๋ฅผ ์กฐ์ž‘(๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ฐ”๊ฟ”์น˜๊ธฐ ๋“ฑ)ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • โญ ํ•„ํ„ฐ๋Š” ์›น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, DelegatingFilterProxy์˜ ๋“ฑ์žฅ ์ดํ›„, ๋˜ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ๋‚ด์žฅ ํ†ฐ์บฃ์„ ํฌํ•จํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ์ดํ›„๋กœ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

    • DelegatingFilterProxy๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ ์‹ค์ œ ํ•„ํ„ฐ์˜ ๋กœ์ง์„ ํ˜ธ์ถœํ•˜๋Š” ํ”„๋ก์‹œ ํ•„ํ„ฐ์ด๋‹ค.

    • ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ๋‚ด์žฅ ํ†ฐ์บฃ์„ ํฌํ•จํ•œ ์ดํ›„๋กœ ์›น ์ปจํ…Œ์ด๋„ˆ ์—ญ์‹œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ๊ด€๋ฆฌ ์˜์—ญ์ด ๋˜์—ˆ๊ณ , ์ดํ›„๋กœ๋Š” DelegatingFilterProxy ์—†์ด๋„ ํ•„ํ„ฐ๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

Interceptor

  • Dispatcher Servlet์ด Controller์— ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ธฐ ์ „/ํ›„, ๋ทฐ๊ฐ€ ๋ชจ๋‘ ๋กœ๋“œ๋œ ํ›„ ์‹คํ–‰๋  ๋กœ์ง์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด

  • Dispatcher Servlet์— ์˜ํ•ด ์ˆœ์ฐจ์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.

  • ๋ฐ˜ํ™˜ ํƒ€์ž…์€ boolean์œผ๋กœ, true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์š”์ฒญ์ด ์ด์–ด์ง€๊ณ , false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์ค‘๋‹จ๋œ๋‹ค.

    • ๋•Œ๋ฌธ์— Filter์™€ ๋‹ฌ๋ฆฌ request, response ๊ฐ์ฒด ์ž์ฒด๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜๋Š” ์—†๋‹ค.

    • ๋Œ€์‹  ๊ทธ ๋‚ด๋ถ€์˜ ๊ฐ’์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • Filter๊ฐ€ Bean์œผ๋กœ ๋“ฑ๋ก๋  ์ˆ˜ ์žˆ๊ธฐ ์ด์ „์—๋Š”, ๋‹ค๋ฅธ Bean์˜ ๋กœ์ง์„ ํ˜ธ์ถœํ•ด์•ผ ํ•  ๋•Œ Interceptor๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋‚˜, ๊ทธ ์ดํ›„๋กœ๋Š” ๋‘˜ ์ค‘ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๋“  ์ƒ๊ด€์ด ์—†์–ด์กŒ๋‹ค. ๋•Œ๋ฌธ์— ์œ ํšจํ•˜์ง€ ์•Š์€ ์š”์ฒญ์„ ์ณ ๋‚ด๋Š” ์šฉ๋„๋กœ๋Š” ๊ฑฐ์˜ Filter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด๋‹ค.

    • Filter๊ฐ€ ๋” ์•ž๋‹จ์—์„œ ๊ฑธ๋Ÿฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Spring AOP

  • AOP๋Š” ํšก๋‹จ ๊ด€์‹ฌ(Aspect) ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์•ฝ์ž๋กœ, ๊ด€์‹ฌ์‚ฌ ๋‹จ์œ„๋กœ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ด๋‹ค.

    • ์‚ฌ์‹ค์ƒ Filter์™€ Interceptor์˜ ์˜๋„๋ฅผ ๋‚ดํฌํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.

    • Filter, Interceptor๋Š” request, response์˜ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • AOP ์ž์ฒด๋Š” ๋ฉ”์†Œ๋“œ, ํ•„๋“œ, ์ƒ์„ฑ์ž ๋“ฑ ์—ฌ๋Ÿฌ ๋ ˆ๋ฒจ์— ์ ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋‚˜, Spring AOP๋Š” ๋ฉ”์†Œ๋“œ ๋ ˆ๋ฒจ์˜ ์ ์šฉ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œํ•œํ•œ๋‹ค.

    • ์ด๋Š” Spring์ด IoC Container์— ์˜ํ•ด Dependency Injection ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด(Bean)๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ๋˜ํ•œ, AOP์˜ ๋กœ์ง์„ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋ก์‹œ ๋ฐฉ์‹์„ ์ด์šฉํ•œ๋‹ค.

    • ํ”„๋ก์‹œ ๋ฐฉ์‹์ด๋ž€, CGLIB ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ํ”„๋ก์‹œ ๊ฐ์ฒด์—์„œ AOP์˜ Advice ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „ ๋˜๋Š” ์ดํ›„์— ๋ณธ ๊ฐ์ฒด(ํƒ€๊ฒŸ ๊ฐ์ฒด๋ผ๊ณ  ๋ถ€๋ฆ„)์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค.

Last updated