์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

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

Spring

by mr_woong 2022. 6. 9. 01:02

๋ณธ๋ฌธ

Filter
ํŠน์ง• - J2EE ํ‘œ์ค€ ์ŠคํŽ™ ๊ธฐ๋Šฅ์œผ๋กœ Dispatcher Servlet ์— ์š”์ฒญ์ด ์ „๋‹ฌ๋˜๊ธฐ ์ „/ํ›„ url ํŒจํ„ด์— ๋งž๋Š” ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ๋ถ€๊ฐ€์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต
- filter ๋Š” ์Šคํ”„๋ง ๋ฒ”์œ„ ๋ฐ–์—์„œ ์ฒ˜๋ฆฌ
- ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ ํ†ฐ์บฃ๊ณผ ๊ฐ™์€ ์›น ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๊ณ , ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ ์ „/ํ›„์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ
- ๋‹จ, ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก์ด ๊ฐ€๋Šฅ
- ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” javax.servlet ์˜ Filter ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„(implements) ํ•ด์•ผ ํ•จ
Filter ๋ฉ”์†Œ๋“œ init - ํ•„ํ„ฐ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์„œ๋น„์Šค์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ
- ์›น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 1ํšŒ init ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•„ํ„ฐ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๋ฉด, ์ดํ›„์˜ ์š”์ฒญ๋“ค์€ doFilter๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋œ๋‹ค.
doFilter - url-pattern ์— ๋งž๋Š” ๋ชจ๋“  HTTP ์š”์ฒญ์ด ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ์ „ ์›น ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์‹คํ–‰๋˜๋Š” ๋ฉ”์†Œ๋“œ
- doFilter ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” FilterChain์ด ์žˆ๋Š”๋ฐ, FilterChain ์˜ doFilter ํ†ตํ•ด ๋‹ค์Œ ๋Œ€์ƒ์œผ๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. chain.doFilter() ์ „/ํ›„์— ํ•„์š”ํ•œ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๋„ฃ์–ด์คŒ์œผ๋กœ์จ ์›ํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.
destroy - ํ•„ํ„ฐ ๊ฐ์ฒด๋ฅผ ์„œ๋น„์Šค์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์ž์›์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
- ์›น ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด 1๋ฒˆ ํ˜ธ์ถœ๋˜๋ฉฐ ์ดํ›„ doFilter์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

Interceptor
ํŠน์ง• - Spring ์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ 
- Dispatcher Servlet ์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „๊ณผ ํ›„์— ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต
- ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์—์„œ ๋™์ž‘
- DispatcherServlet ์€ ํ•ธ๋“ค๋Ÿฌ๋งคํ•‘์„ ํ†ตํ•ด ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ๋„๋ก ์š”์ฒญํ•˜๋Š”๋ฐ, ๊ทธ ๊ฒฐ๊ณผ๋กœ ์‹คํ–‰ ์ฒด์ธ(HandlerExecutionChain)์„ return
- ์ด ์‹คํ–‰ ์ฒด์ธ์€ 1๊ฐœ ์ด์ƒ์˜ ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค๋ฉด ์ˆœ์ฐจ์ ์œผ๋กœ ์ธํ„ฐ์…‰ํ„ฐ๋“ค์„ ๊ฑฐ์ณ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•˜๊ณ , ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ๋ฐ”๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
๋ฉ”์†Œ๋“œ preHandle - ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ ์ „ ์‹คํ–‰
- ์ปจํŠธ๋กค๋Ÿฌ ์ด์ „์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ „์ฒ˜๋ฆฌ ์ž‘์—…์ด๋‚˜ ์š”์ฒญ ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
postHandle - ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ ํ›„ ์‹คํ–‰
- ์ปจํŠธ๋กค๋Ÿฌ ์ดํ›„์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํ›„์ฒ˜๋ฆฌ ์ž‘์—…์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
- ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ModelAndView ํƒ€์ž…์˜ ์ •๋ณด๊ฐ€ ์ œ๊ณต๋˜๋Š”๋ฐ, ์ตœ๊ทผ Json ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” RestAPI ๊ธฐ๋ฐ˜์˜ ์ปจํŠธ๋กค๋Ÿฌ(@RestController)๋ฅผ ๋งŒ๋“ค๋ฉด ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ
afterCompletion  - ๋ชจ๋“  ๋ทฐ์—์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ์„ ํฌํ•จํ•ด ๋ชจ๋“  ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰
- ์š”์ฒญ ์ฒ˜๋ฆฌ ์ค‘ ์‚ฌ์šฉํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉ

์‹ค์ œ๋กœ๋Š” Interceptor ๊ฐ€ Controller ๋กœ ์š”์ฒญ์„ ์œ„์ž„ํ•˜์ง€ ์•Š์Œ. ์œ„ ๊ทธ๋ฆผ์€ ๋™์ž‘์ˆœ์„œ๋ฅผ ๋„์‹ํ™” ํ•œ ๊ฒƒ์ž„

 

 

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

<์ฐธ์กฐ>

https://mangkyu.tistory.com/173

 

[Spring] ํ•„ํ„ฐ(Filter) vs ์ธํ„ฐ์…‰ํ„ฐ(Interceptor) ์ฐจ์ด ๋ฐ ์šฉ๋„ - (1)

Spring์€ ๊ณตํ†ต์ ์œผ๋กœ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ์ค‘๋ณต๋œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ๊ทธ ์ค‘์—์„œ ํ•„ํ„ฐ(Filter) vs ์ธํ„ฐ์…‰ํ„ฐ(Interceptor)์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž

mangkyu.tistory.com

 

'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring] ์•„ํŒŒ์น˜ ํ†ฐ์บฃ  (0) 2022.06.09
[Spring] Dependency Injection  (0) 2022.06.09
[Spring] Spring Bean Life Cycle  (0) 2022.06.09
[Spring] Spring Web MVC  (0) 2022.06.08
[Spring] Spring Framework ์™€ Spring Boot์˜ ์ฐจ์ด  (0) 2022.06.07

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ

๋Œ“๊ธ€ ์˜์—ญ