์์ค์ฝ๋ : https://github.com/junghyeyoun/spring -> sprweb2,3
MVC ๋ชจ๋ธ์ด๋? ํ๋ก๊ทธ๋จ์ ์ฒ๋ฆฌ ์ญํ ์ ๋๋์ด์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์น ์์คํ
๊ฐ๋ฐ์ ์์ฃผ ์ฌ์ฉ๋๊ณ ์๋ค. ์ญํ ์ ๋ชจ๋ธ(Model:M), ๋ทฐ(View:V), ์ปจํธ๋กค๋ฌ(Controller:C) ์ธ์ข
๋ฅ๋ก ๋ถ๋ฅํ๋ค.
MVC ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค๋ฉด, ์ญํ ๋ถ๋ด์ ํตํด ํจ์จ์ ์ธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๊ณ , ๊ฐ๋ฐํ๋ ์์ง๋์ด์ ๋ถ์
ํ๊ฐ ์ฉ์ดํ๊ณ , ์ค๊ณ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ ๊ฐ๋ฅํ๋ค๋ ์ด์ ์ด ์๋ค.
๋ชจ๋ธ์ ์์คํ ์์ ๋น์ง๋์ค ๋ก์ง์ ๋ด์ฉ์ ์์ฑํ๋ ์ญํ ์ด๋ค.
๋ทฐ๋ ํ๋ง๋๋ก ์ธํ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ๊ฒฐ๊ณผ ์ถ๋ ฅ ๋ฑ ์์คํ ์์ ํํ ๋ถ๋ถ์ ๋ด๋นํ๋ฉฐ ์น์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฃผ๋ก ํ๋ฉด์ ๋ด๋นํ๋ค.
์ปจํธ๋กค๋ฌ๋ ์๋น์ค ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ๋ชจ๋ธ๊ณผ ํ๋ฉด ํ์๋ฅผ ๋ด๋นํ๋ ๋ทฐ๋ฅผ ์ ์ดํ๋ ์ญํ ์ ํ๋ค. ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ด์ฉ์ ๋ทฐ์์ ๋ฐ๊ณ , ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ธ์ ๋ด์ฉ์ ์ ๋ฌํ๋ค. ๋ ๋ชจ๋ธ์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ทฐ์ ์ ๋ฌํด์ ํ๋ฉด์ ํ์ํ๋ ์ญํ ์ ํ๋ค.
๊ฐ์ฒด | ๊ธฐ๋ฅ๊ฐ์ |
---|---|
DispatcherServlet | ๋ชจ๋ ์์ฒญ์ ์์ ํ๋ ํ๋ฐํธ ์ปจํธ๋กค๋ฌ์ด๋ค. |
Model | ์ปจํธ๋กค๋ฌ ๋ทฐ์ ๋๊ฒจ์ฃผ๋ ํ์์ฉ ๋ฐ์ดํฐ ๋ฑ์ ์ ์ฅํ๋ ๊ฐ์ฒด์ด๋ค. |
์ปจํธ๋กค๋ฌ | ์์ฒญ์ ๋์ํด์ ์ฒ๋ฆฌํ ๋ด์ฉ์ด ์๋ ๊ณณ |
์๋น์ค ์ฒ๋ฆฌ | ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํด์ ๋ฐ์ดํฐ๋ฅผ ์ทจ๋ํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ์์ ์ ์คํ(๊ฐ๋ฐ์๊ฐ ์ค๊ณํ๊ณ ๊ตฌํํ๋ ๋ถ๋ถ) |
๋ทฐ | ํ๋ฉดํ์ ์ฒ๋ฆฌ |
DispatcherServlet์์๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ํ ๊ณณ์ผ๋ก ๋ฐ์์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ์ํํ๋ค. ์ฆ, ์๋ฒ ๊ฐ์ฅ ์๋จ์์ ์ฌ์ฉ์์ ์์ฒญ์ ๊ฐ์ฅ ๋จผ์ ๋ฐ์ ์์ฒญ์ ์๋ง๋ Hendler, ์ฆ Controller์์ ์์ํด์ฃผ๋ ์ญํ ์ ์ํํ๋ค.
Handler์ ์คํ ๊ฒฐ๊ณผ๋ HTTP Response ํํ๋ก ๋ง๋ค์ด์ ๋ค์ ๋ฐํ์ ํ๋ค. ์ฌ์ฉ์์ ์์ฒญ์ Dispatcher Servlet์์ ์์ํด์ Dispatcher Servlet์์ ๋๋๋ค.
์์
1. ์ฌ์ฉ์์ ์์ฒญ์ด Dispatcher Servlet์ผ๋ก ์ ๋ฌ๋๋ค.
2. Handler Mapping ๋๋ Controller ์ ์ ๋ฌ์ ํ๋ค.
3. ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ ๊ฐ์ Model ํํ๋ก Dispatcher์ ๋ฐํํ๋ค.
4. ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๊ณ ์ ํ๋ View ํํ๋ก ViewResolver๊ฐ Page๋ฅผ ์์ฑ์ ํ๊ณ , ์ด๋ฌํ Page ๊ฐ์ Model์ ํฌํจ์์ผ์ ์ ๋ฌ์ ํ๊ฒ ๋๋ค.
Spring MVC Application์์๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค๋ฅผ ์คํ๋ง ์ค์ ํ์ผ์ ๋ฑ๋กํด์ ์ฌ์ฉํ์๋ค. Spring 4.x ๋ฒ์ ๋ถํฐ๋ xml ํ์ผ์ ์ค์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ์ง ์๊ณ , Annotation์ ์ด์ฉํ์ฌ ๋ฑ๋กํ ์ ์๋๋ก ์ง์์ ํ๊ณ ์๋ค.
RestController๋ Spring 4.x ๋ถํฐ ์ง์ํ๋ค. Spring Web์์๋ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ View๊ฐ ์๋ ์ปจํธ๋กค๋ฌ๋ฅผ RestController๋ผ๊ณ ํ๋ค. ์ฆ View, Page ํํ๊ฐ ์๋, JSon, XML ํํ๋ก ๋ฐํ์ ํ๊ฒ ๋๋ค.(View๊ฐ ์๋ Rest Data ํํ)
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด DispatcherServlet์ผ๋ก ์ ๋ฌ์ด ๋๊ณ , DispatcherServlet์ HandlerMapping๊ณผ REST controller์ ์์ฒญ์ ์ ๋ฌํ๊ณ , HandlerMapping์์ ์ฌ์ฉ์์๊ฒ ๋ฐ๋ก ์๋ต์ ์ ๋ฌํ๋ค. REST Controller๋ @Controller์ @ResponseBody์ ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐํ์๋ฉด ๋๋ค.
@Controller : ์ ํต์ ์ธ ์คํ๋ง์ ์ปจํธ๋กค๋ฌ๋ก, ์ฃผ๋ก ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌ(๋ชจ๋ธ์ ๊ฒฝ์ ) ํ ํ ์ง์ ๋ ๋ทฐ์ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค. ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ ์
์ถ๋ ฅ์ ์ ์ดํ๋ ํด๋์ค์ด๋ค.
@RestController : json๊ณผ xml ํํ๋ก ๊ฐ์ฒด ๋ฐ์ดํฐ ๋ฐํ์ ๋ชฉ์ ์ผ๋ก ํ๋ค.
@GetMapping : get ์์ฒญ ์ฒ๋ฆฌ์ฉ ์ ์ฉ annotation์ด๋ค.
@PostMapping : post ์์ฒญ ์ฒ๋ฆฌ์ฉ ์ ์ฉ annotation์ด๋ค.
@RequestMapping : DispatcherServlet์ผ๋ก ๋ถํฐ ์์๋ฐ์ HandlerMapping์ ์ํด ์ฒ๋ฆฌํ๋ค. get๊ณผ post๋ฐฉ์ ๋๋ค ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
@ResponseBody : String, MAP, JSON ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค. ajax์์ ๋ง์ด ์ฐ์ธ๋ค.
์ฐธ๊ณ
์คํ๋ง ํ๋ ์์ํฌ ์ฒซ๊ฑธ์ - ์ฃผ์ํ์ฌ ํ๋ฃจ๋ค์ค ํค๋
ธ์ํ ๋ง์ฌ์ํค ์ง์, ์ ๋ฏผ์ ์ฎ๊ฐ
https://shreysharma.com/mvc-architecture/ (mvc์ด๋ฏธ์ง)
https://sonseungha.tistory.com/577 (DispatcherServlet)