Filter, Interceptor, AOP
๐ Filter, Interceptor, AOP
- ์๋ฐ ์น ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด, ๊ณตํต์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ ์ ๋ฌด๋ค์ด ๋ง๋ค.
- ๋ก๊ทธ์ธ ๊ด๋ จ(์ธ์ ์ฒดํฌ)์ฒ๋ฆฌ, ๊ถํ์ฒดํฌ, XSS(Cross site script)๋ฐฉ์ด, pc์ ๋ชจ๋ฐ์ผ์น์ ๋ถ๊ธฐ์ฒ๋ฆฌ, ๋ก๊ทธ, ํ์ด์ง ์ธ์ฝ๋ฉ ๋ณํ ๋ฑ์ด ์๋ค.
- ์์ ๊ฐ์ ๊ณตํต์ฒ๋ฆฌ๋ฅผ ์ํด ํ์ฉํ ์ ์๋ ๊ฒ์ด 3๊ฐ์ง๊ฐ ์๋ค.
- Filter
- Interceptor
- AOP
Interceptor์ Filter๋ Servlet ๋จ์์์ ์คํ๋๋ค. <> ๋ฐ๋ฉด AOP๋ ๋ฉ์๋ ์์ Proxyํจํด์ ํํ๋ก ์คํ๋๋ค. ใ์คํ์์๋ฅผ ๋ณด๋ฉด Filter๊ฐ ๊ฐ์ฅ ๋ฐ์ ์๊ณ ๊ทธ์์ Interceptor, ๊ทธ์์ AOP๊ฐ ์๋ ํํ์ด๋ค. ๋ฐ๋ผ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด Filter โ Interceptor โ AOP โ Interceptor โ Filter ์์ผ๋ก ๊ฑฐ์น๊ฒ ๋๋ค.
Filter
์๋ธ๋ฆฟ ํํฐ๋ DispatcherServlet ์ด์ ์ ์คํ์ด ๋๋๋ฐ ํํฐ๊ฐ ๋์ํ๋๋ก ์ง์ ๋ ์์์ ์๋จ์์ ์์ฒญ๋ด์ฉ์ ๋ณ๊ฒฝํ๊ฑฐ๋, ์ฌ๋ฌ๊ฐ์ง ์ฒดํฌ๋ฅผ ์ํํ ์ ์๋ค. EX)
<!-- ํ๊ธ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ธ์ฝ๋ฉ ํํฐ -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
ํด๋น ํํฐ์ ์ด๋ฆ์ encoding, ๊ฐ์ UTF-8์ธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ํ๊ณ ์๋ค.
ํํฐ์ URL-PATTERN์ /*๋ก ์ ์ํ๋ฉด servlet, jsp๋ฟ๋ง ์๋๋ผ ์ด๋ฏธ์ง์ ๊ฐ์ ๋ชจ๋ ์์์ ์์ฒญ์๋ ํธ์ถ ๋๋ค.
Interceptor(์ธํฐ์ ํฐ)
ํํฐ๋ ์คํ๋ง ์ปจํ ์คํธ ์ธ๋ถ์ ์กด์ฌํ์ฌ ์คํ๋ง๊ณผ ๋ฌด๊ดํ ์์์ ๋ํด ๋์ํ๋ค.
ํ์ง๋ง ์ธํฐ์ ํฐ๋ ์คํ๋ง์ DistpatcherServlet์ด ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๊ธฐ ์ , ํ๋ก ๋ผ์ด๋ค๊ธฐ ๋๋ฌธ์ ์คํ๋ง ์ปจํ ์คํธ(Context, ์์ญ) ๋ด๋ถ์์ Controller(Handler)์ ๊ดํ ์์ฒญ๊ณผ ์๋ต์ ๋ํด ์ฒ๋ฆฌํ๋ค.
์คํ๋ง์ ๋ชจ๋ ๋น ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ค.
์ธํฐ์ ํฐ๋ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ๋ก๊ทธ์ธ ์ฒดํฌ, ๊ถํ์ฒดํฌ, ํ๋ก๊ทธ๋จ ์คํ์๊ฐ ๊ณ์ฐ์์ ๋ก๊ทธํ์ธ ๋ฑ์ ์ ๋ฌด์ฒ๋ฆฌ
AOP
๊ฐ์ฒด ์งํฅ์ ํ๋ก๊ทธ๋๋ฐ์ ํ์ ๋ ์ค๋ณต์ ์ค์ผ ์ ์๋ ๋ถ๋ถ์ ์ค์ด๊ธฐ ์ํด ์ข ๋จ๋ฉด(๊ด์ )์์ ๋ฐ๋ผ๋ณด๊ณ ์ฒ๋ฆฌํ๋ค.
์ฃผ๋ก โ๋ก๊น โ, โํธ๋์ญ์ โ, โ์๋ฌ ์ฒ๋ฆฌโ๋ฑ ๋น์ฆ๋์ค๋จ์ ๋ฉ์๋์์ ์กฐ๊ธ ๋ ์ธ๋ฐํ๊ฒ ์กฐ์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค.
Interceptor๋ Filter์๋ ๋ฌ๋ฆฌ ๋ฉ์๋ ์ ํ์ ์ง์ ์ ์์ ๋กญ๊ฒ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
Interceptor์ Filter๋ ์ฃผ์๋ก ๋์์ ๊ตฌ๋ถํด์ ๊ฑธ๋ฌ๋ด์ผํ๋ ๋ฐ๋ฉด, AOP๋ ์ฃผ์, ํ๋ผ๋ฏธํฐ, ์ ๋ ธํ ์ด์ ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์์ ์ง์ ํ ์ ์๋ค.
AOP์ Advice์ HandlerInterceptor์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ ํ๋ผ๋ฏธํฐ์ ์ฐจ์ด๋ค.
Advice์ ๊ฒฝ์ฐ JoinPoint๋ ProceedingJoinPoint ๋ฑ์ ํ์ฉํด์ ํธ์ถํ๋ค.
๋ฐ๋ฉด HandlerInterceptor๋ Filter์ ์ ์ฌํ๊ฒ HttpServletRequest, HttpServletResponse๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ๋ค.
AOP์ ํฌ์ธํธ์ปท
@Before: ๋์ ๋ฉ์๋์ ์ํ ์
@After: ๋์ ๋ฉ์๋์ ์ํ ํ
@After-returning: ๋์ ๋ฉ์๋์ ์ ์์ ์ธ ์ํ ํ
@After-throwing: ์์ธ๋ฐ์ ํ
@Around: ๋์ ๋ฉ์๋์ ์ํ ์ /ํ