Spring MVC Request Lifecycle

- Request
- ํด๋น ์์ฒญ์ ๋ด์ฅ ํฐ์บฃ์ด ๋ฐ๋๋ค.
- ๋์ ์ฒ๋ฆฌ๊ฐ ํ์ํ ์์ฒญ์ธ ๊ฒฝ์ฐ, ํฐ์บฃ์ ์๋ธ๋ฆฟ์ผ๋ก ๋ฑ๋ก๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์๊ฒ ํด๋น ์์ฒญ์ ๋ณด๋ธ๋ค.
- ์ด๋, ์์ฒญ ๋ฐ ์๋ต ๊ฐ์ฒด๋ฅผ ๊ฐ์ด ๋ณด๋ธ๋ค.
- Filter
- Dispatcher Servlet์๊ฒ ์์ฒญ์ด ๋ค์ด๊ฐ๊ธฐ ์ ๊ณผ ํ์ ํํฐ๋ฅผ ๊ฑฐ์น๋ค.
- Filter๋ ์์ฒญ์ ๋ํ ์ธ์ฆ, ๊ถํ ์ฒดํฌ๋ฅผ ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- ์คํ๋ง์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ์๋, J2EE ํ์ค ์คํ ๊ธฐ๋ฅ์ด๋ค.
J2EE : ์๋ฐ ๊ธฐ์ ๋ก ๊ธฐ์ ํ๊ฒฝ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋๋ฐ ํ์ํ ์คํ๋ค์ ๋ชจ์๋ ์คํ ์งํฉ
- Dispatcher Servlet
- ํฐ์บฃ์ผ๋ก ๋ฐ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ ํฉํ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ์ ์์ํ๊ณ , ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ๋ฐํํ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ด๋ค.
- HandlerMapping
- ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ์ ํ ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ๊ณผ์ ์์ @Controller, @RestController ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ํด๋์ค์ @RequestMapping ํน์ ์ ์ฌํ ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ๋ฉ์๋๋ค์ด ํธ๋ค๋ฌ๋ก ๋ฑ๋ก์ด ๋๋ค.
- HandlerMapping์ ๊ทธ๋ ๊ฒ ๋ฑ๋ก๋ ํธ๋ค๋ฌ, ์ฆ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๋ฅผ ์ฐพ๋๋ค.
- HandlerAdapter
- HanderMapping์์ ์ ์ ํ ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ ๋ฐํ์ ํ๋ฉด, Dispatcher Servlet์์๋ HandlerAdapter์๊ฒ ํด๋น ํธ๋ค๋ฌ๋ฅผ ์ด์ฉํด์ ์ฒ๋ฆฌํ๋๋ก ์์ํ๋ค.
- ์์ํ๊ธฐ ์ , HandlerInterceptor์ ๋ฑ๋ก๋ ์ธํฐ์ ํฐ ์ฒด์ธ์ preHandle ๋ฉ์๋๊ฐ ์คํ๋๋ค.
- ์ ์์ ์ผ๋ก ์ธํฐ์
ํฐ๋ฅผ ํต๊ณผํ๋ค๋ฉด argument resolver๋ฅผ ํธ์ถํ์ฌ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๋ฅผ ์คํํ๋ค.
- Argument resolver์ ์ปจํธ๋กค๋ฌ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ ์๋ ์ด๋ ธํ ์ด์ ์ ๋ณด๊ณ ์ฒ๋ฆฌํ๋ค.
- ๋ํ์ ์ผ๋ก @RequestBody, @PathVariable, @RequestParam ๋ฑ์ด ์๋ค.
- ์ด๋, HttpMessageConverter๋ฅผ ์ฌ์ฉํ๋ค.
- ์ปจํธ๋กค๋ฌ ๋ฉ์๋์ ๋ฐํ๊ฐ์ ๋ฐ์ Dispatcher Servlet๋ก ๋ฐํํ๋ค.
- ๋ฐํ๊ฐ์ด String์ธ ๊ฒฝ์ฐ ๋ทฐ์ ์ด๋ฆ์ผ๋ก ํด์ํ๋ค.
- ๋ฐํ๊ฐ์ด ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ ์ ์ ํ HttpMessageConverter๋ฅผ ์ฌ์ฉํด์ JSON ํน์ XML๋ก ๋ณํํ๋ค.
- ViewResolver
- Dispatcher Servlet๋ HandlerAdapter๋ก ๋ฐ์ ๋ทฐ ์ด๋ฆ์ ViewResolver๋ก ์ ๋ฌํ๋ค.
- ViewResolver์ ๋ฐ์ ๋ทฐ ์ด๋ฆ์ ํตํด ๋ทฐ๋ฅผ ๋๋๋งํ๋ค.
- ์ด๋, ์ฌ์ฉ๋ Model ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ทฐ์ ์ ๋ฌํด์ ์ต์ข HTML์ ๋ ๋๋งํ๋ค.
- Response
- Dispatcher Servlet์ ํฐ์บฃ์ผ๋ก ๋ฐ์ ์๋ต ๊ฐ์ฒด์ ๋ทฐ ํน์ ํน์ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ํฐ์บฃ์ ์ ๋ฌํ๋ค.
- ํฐ์บฃ์ ์ด๋ฅผ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํ๋ค.