Spring์ ๊ณตํต์ ์ผ๋ก ์ฌ๋ฌ ์์ ์ ์ฒ๋ฆฌํจ์ผ๋ก์จ ์ค๋ณต๋ ์ฝ๋๋ฅผ ์ ๊ฑฐ ํ ์ ์๋๋ก ๋ง์ ๊ธฐ๋ฅ๋ค์ ์ง์ํ๊ณ ์๋ค.
๊ทธ ์ค์ ํํฐ(Filter)์ ์ธํฐ์ ํฐ(Interceptor)์ ์ฐจ์ด์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค.
1. ํํฐ(Filter)
1) ํํฐ(Filter) ๋?
- ์๋ฐ ์๋ธ๋ฆฟ์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ
- ์คํ๋ง ํ๋ ์์ํฌ์์ ํํฐ๋ก ์ธ์ฆ ๋ฑ ๋ค์ํ ์์ ์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์คํ๋ง ํ๋ ์์ํฌ์์์ ํํฐ์ ๋ํด ๊ธฐ๋ก
- Spring Framework๋ ๋ค์ด์ค๋ ์์ฒญ์ด Dispatcher Servlet์ ์ํด Controller์ ๋งคํ
- Filter์ ์์ฒญ์ด Dispatcher Servlet์ ์ํด ๋ค๋ค์ง๊ธฐ ์ , ํ์ ๋์
2) ํํฐ(Filter)๋ ์ด๋์ ์ฌ์ฉํ๋?
2-1) ํํฐ ์ธํฐํ์ด์ค์ 3๊ฐ์ง ๋ฉ์๋
- init() : Filter๊ฐ ์์ฑ ๋ ๋ ์ํ๋๋ ๋ฉ์๋
- dofilter() : Request, Response๊ฐ ํํฐ๋ฅผ ๊ฑฐ์น ๋ ์ํ ๋๋ ๋ฉ์๋
- destory() : Filter๊ฐ ์๋ฉธ๋ ๋ ์ํ๋๋ ๋ฉ์๋
2-2) ํํฐ(Filter)์ ์ฉ๋ ๋ฐ ์์
- ๊ณตํต ๋ ๋ณด์ ๋ฐ ์ธ์ฆ/์ธ๊ฐ ๊ด๋ จ ์์
- ๋ชจ๋ ์์ฒญ์ ๋ํ ๋ก๊น (Logging) ๋๋ ๊ฐ์ฌ
- ์ด๋ฏธ์ง / ๋ฐ์ดํฐ ์์ถ ๋ฐ ๋ฌธ์์ด ์ธ์ฝ๋ฉ
- Spring ๊ณผ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ ๊ธฐ๋ฅ
3) ํํฐ(Filter) ๊ตฌํ ๋ก๊ทธ
3) ํํฐ ์ฒด์ธ (Filter Chain)
- ์ฌ๋ฌ ๊ฐ์ ํํฐ๊ฐ ๋ชจ์ฌ์ ํ๋์ ์ฒด์ธ์ ํ์ฑ ํ ๋ ์ฒซ๋ฒ์งธ ํํฐ๊ฐ ๋ณ๊ฒฝํ๋ ์์ฒญ ์ ๋ณด๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ ์ ๋ณด๊ฐ ๋์ง๋ง, ์ฒด์ธ์ ๋๋ฒ์งธ ํํฐ๊ฐ ๋ณ๊ฒฝํ๋ ์์ฒญ ์ ๋ณด๋ ์ฒซ๋ฒ์งธ ํํฐ๋ฅผ ํตํด์ ๋ณ๊ฒฝ๋ ์์ฒญ ์ ๋ณด
- User๊ฐ ๋ณด๋ธ Request(์์ฒญ) ์ ๋ณด๋ ๋ณ๊ฒฝ์ ๋ณ๊ฒฝ์ ๋ณ๊ฒฝ์ ๊ฑฐ๋ญํ๊ฒ ๋๋ค.
- Response ์, ํํฐ์ ์ ์ฉ ์์๊ฐ ์์ฒญ ๋์๋ ๋ฐ๋๋ก ๋์ ์จ๋ค.
FilterRegistrationBean
- Spring Framework ์์ ์ ๊ณตํ๋ ํด๋์ค ์ค ํ๋, ์๋ธ๋ฆฟ ํํฐ๋ฅผ ๋ฑ๋ก ํ ๋ ์ฌ์ฉ
- ํํฐ์ URL ํจํด, ํํฐ ์์, ์ด๊ธฐ ๋งค๊ฐ ๋ณ์ ๋ฑ์ ์ค์ ๊ฐ๋ฅ
@Bean
public FilterRegistrationBean firstFilterRegister() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(new FirstFilter());
//Bean์ ๋ฑ๋ก ์์๋ฅผ ์ค์ ํ๋๋ฐ ์ฌ์ฉ -> ์์ ์ซ์ ์ผ์๋ก ์ฐ์ ์์๊ฐ ๋์์ง๋ค.
registrationBean.setOrder(1);
return registrationBean;
}
2. ์ธํฐ์ ํธ(Interceptor)
1) ์ธํฐ์ ํธ(Interceptor) ๋?
- Spring์์ ์ ๊ณตํ๋ ๊ธฐ์ , Dispatcher Servlet ์ด ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๊ธฐ ์ ๊ณผ ํ์ Request์ Response์ ์ฐธ์กฐ ํ๊ฑฐ๋ ๊ฐ๊ณต ํ ์ ์๋๋ก ์ง์ํ๋ ๊ธฐ๋ฅ ์ ๊ณต
2) ์ธํฐ์ ํธ(Interceptor)๋ ์ ์ฌ์ฉ ํ๋๊ฐ?
(1) ์ธํฐ์ ํธ(Interceptor) ์ธํฐํ์ด์ค 3๊ฐ์ง ๋ฉ์๋
- preHandle() : ์ปจํธ๋กค๋ฌ ์ด์ ์ ์ฒ๋ฆฌํด์ผ ํ๋ ์ ์ฒ๋ฆฌ ์์ ์ด๋ ์์ฒญ ์ ๋ณด๋ฅผ ๊ฐ๊ณตํ๊ฑฐ๋ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
- postHandle() : ์ปจํธ๋กค๋ฌ ํธ์ถ ๋ ํ์ ์คํ, ์ปจํธ๋กค๋ฌ ์ดํ์ ์ฒ๋ฆฌํด์ผ ํ๋ ํ ์ฒ๋ฆฌ ์์ ์ด ์์ ๋ ์ฌ์ฉ
- afterCompletion() : ๋ชจ๋ View์ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ ์ผ์ ํฌํจํ ๋ชจ๋ ์์ ์ด ์๋ฃ๋ ํ์ ์คํ
(2) ์ธํฐ์ ํธ(Interceptor) ์ฉ๋์ & ์์
- ์ธ๋ถ์ ์ธ ๋ณด์ ๋ฐ ์ธ์ฆ / ์ธ๊ฐ ๊ณตํต ์์
- API ํธ์ถ์ ๋ํ ๋ก๊น (Logging) ๋๋ ๊ฐ์ฌ
- Controller๋ก ๋๊ฒจ์ฃผ๋ ์ ๋ณด(Data)์ ๊ฐ๊ณต
3) ์ธํฐ์ ํธ(Interceptor) ๊ตฌํ ๋ก๊ทธ
- Filter > Dispatcher Servlet > Intercepotor > Resource ์ผ๋ก ๋์ด๊ฐ๋ ๋ก๊ทธ๋ฅผ ํ์ธ ๊ฐ๋ฅ
3. ํํฐ(Filter) vs ์ธํฐ์ ํฐ(Interceptor) ์ฐจ์ด
'๐ฟSpring > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Framework] Spring Boot 2.* vs 3.* (0) | 2024.06.11 |
---|---|
[Spring Framework] Spring Boot์ ์์ ํ๋ก์ธ์ค (0) | 2024.05.13 |
[Spring Framework - Thymeleaf] Decoupled Logic (0) | 2024.01.21 |
[Spring Framework - Thymeleaf] Thymeleaf ๋? (0) | 2024.01.18 |
[Spring Framework] Transction (1) | 2024.01.11 |