๐ ๋ค์ด๊ฐ๊ธฐ ์
- Filter
- Interceptor
- AOP
์ธ๊ฐ์ง ๊ธฐ๋ฅ์ด ๋ชจ๋ ๋น์ทํ ๊ธฐ๋ฅ์ ํ๋๋ฐ, ์ด๋ค์ด ํ์ํ ์ด์ ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ฑฐ๋ ์์ ์ ํ ๋ ๊ณตํต๋๋ ๋ถ๋ถ์ด ๊ต์ฅํ ๋ง๋ค.
์๋ฅผ ๋ค์ด, ์ธ์ฆ ์ฒ๋ฆฌ๋ผ๋์ง, XSS๋ก๋ถํฐ ๋ณด์ ์ฒ๋ฆฌ, ๋ก๊น ์ฒ๋ฆฌ, ํ์ด์ง ์ธ์ฝ๋ฉ๋ ํฌํจ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ํ๋ก๊ทธ๋จ ๋ด์์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ์์ค ์ฌ๋ฌ ๊ตฐ๋ฐ์ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉด ์์ค ์๋ ๋์ด๋ ๊ฒ์ด๊ณ , ํ๋ก์ ํธ ๋จ์๊ฐ ์ปค์ง์๋ก ์๋ฒ์ ๋ํ ๋ถํ, ์ ์ง๋ณด์์ ์ด๋ ค์์ ๊ฒช์ ์ ์๋ค!
์ฝ๊ฒ ๋งํด์ ๊ณตํต๋๋ ๋ถ๋ถ์ ๋นผ์ ๊ด๋ฆฌํ๋๊ฒ ์ข๋ค.
์์ ๊ฐ์ด ๊ณตํต๋๋ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํด์ฃผ๋ ๊ธฐ๋ฅ์ Spring์ด ์ ๊ณตํ๋ค.
์ ์ธ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ํด ์์๋ณด๊ณ , ์ฐจ์ด์ ๋ค์ ์์๋ณด์!
Filter, Interceptor, AOP์ ํ๋ฆ
- ์๋ฒ๋ฅผ ์คํ์ํค๋ฉด Servlet์ด ์ฌ๋ผ์ค๋ ๋์์ init์ด ์คํ๋๊ณ , ๊ทธ ํ doFilter๊ฐ ์คํ๋๋ค.
- ์ปจํธ๋กค๋ฌ์ ๋ค์ด๊ฐ๊ธฐ ์ preHandler๊ฐ ์คํ๋๋ค.
- ์ปจํธ๋กค๋ฌ์์ ๋์ @Around, postHandler, doFilter ์์ผ๋ก ์งํ๋๋ค.
- ์๋ธ๋ฆฟ ์ข ๋ฃ์ destroy๊ฐ ์คํ๋๋ค.
์์๋ Filter -> Interceptor -> AOP -> Interceptor -> Filter ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.Filter์ Interceptor์ Servlet ๋จ์์์ ์ด๋ฃจ์ด์ง๋ค.
Spring Filter
Dispatcher Servlet
์์ญ์ ๋ค์ด๊ฐ๊ธฐ ์ Front Controller ์ ๋ฒ์์์ ์ํ๋๋ค.
๋ํ, Controller ์ดํ ์์ ์ฒ๋ฆฌ๊ฐ ๋๋ ํ ์๋ต ์ฒ๋ฆฌ์ ๋ํด์๋ ๋ณ๊ฒฝ, ์กฐ์์ ์ํํ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ธ์ฝ๋ฉ ๋ณํ ์ฒ๋ฆฌ, XSS ๋ฐฉ์ด๋ฅผ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ค.
๐ Filter ์คํ๋ฉ์๋init() - ํํฐ ์ธ์คํด์ค ์ด๊ธฐํdoFilter() - ์ค์ ์ฒ๋ฆฌ ๋ก์งdestroy() - ํํฐ ์ธ์คํด์ค ์ข ๋ฃ
Spring Interceptor
Filter๋ ์คํ๋ง ์ปจํ ์คํธ ์ด์ ์ ์คํ๋์ด ์คํ๋ง๊ณผ ๋ฌด๊ดํ๋ค.
ํ์ง๋ง ์ธํฐ์
ํฐ์ ๊ฒฝ์ฐ์๋ ์คํ๋ง์ DispatcherServlet
์ด Controller๋ฅผ ํธ์ถํ๊ธฐ ์ ,ํ์ ๋ผ์ด๋ค๊ธฐ ๋๋ฌธ์ ์คํ๋ง ์ปจํ
์คํธ(Context,์์ญ) ๋ด๋ถ์์ Controller์ ๊ดํ ์์ฒญ
๊ณผ ์๋ต
์ ๊ด์ฌํ๋ค.
๊ทธ๋ฆฌ๊ณ ์คํ๋ง์ ๋ชจ๋ @Bean์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
preHandler
์์ ์ ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๊ณ , postHandler
์์ ํ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
๐ Interceptor ์คํ๋ฉ์๋preHandler() - Controller ์คํ ์ postHandler() - Controller ์คํ ํ view Rendering ์คํ ์ afterCompletion() - view Rendering ์ดํ
Spring AOP
Controller ์ฒ๋ฆฌ ์ดํ ์ฃผ๋ก ๋น์ง๋์ค ๋ก์ง์์ ์คํ๋๋ค.
์ฃผ๋ก '๋ก๊น ', 'ํธ๋์ญ์ ', '์๋ฌ ์ฒ๋ฆฌ' ๋ฑ ๋น์ง๋์ค ๋จ์ ๋ฉ์๋์์ ๊ตฌ์ฒด์ ์ธ ์กฐ์ ์ด ํ์ํ ๋ ์ฌ์ฉํฉ๋๋ค.
Filter์ Interceptor์ ๋ฌ๋ฆฌ ๋ฉ์๋ ์ ํ ์ง์ ์์ ์์ ๋กญ๊ฒ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.AOP๋ ์ฃผ์, ํ๋ผ๋ฉํฐ, ์ด๋ ธํ ์ด์ ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์์ ์ง์ ํ ์ ์๋ค.
@Advice์ HandlerInterceptor์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ ํ๋ผ๋ฉํฐ์ ์ฐจ์ด๋ค.
@Advice
์ ๊ฒฝ์ฐ์๋ JoinPoint์ ProceedingJoinPoint ๋ฑ์ ํ์ฉํ์ฌ ํธ์ถ ๊ฐ๋ฅํ๋ค.๋ฐ๋ฉด HandelrInterceptor
์ ๊ฒฝ์ฐ๋ HttpServletRequest, HttpServletResponse๋ฅผ ํ๋ผ๋ฉํฐ๋ก ์ฌ์ฉํ๋ค.