์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค.
์คํ๋ง MVC ์ ์ฒด ๊ตฌ์กฐ
๊ตฌ์กฐ

์ด์ ์ ์ง์ ๋ง๋ค์๋ MVC ํ๋ ์์ํฌ ๊ตฌ์กฐ์ ๊ฑฐ์ ๊ฐ์ ํํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์คํ๋ง MVC๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด์ผ๋ก ๊ตฌํ๋์ด ์๋๋ฐ, ์ฌ๊ธฐ์์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ(Dispatcher Servlet
)์ด๋ค.
๋์คํจ์ฒ ์๋ธ๋ฆฟ์ HttpServlet
์ ์์๋ฐ์ผ๋ฉฐ, ์๋ธ๋ฆฟ์ผ๋ก ๋์ํ๋ค. ๋ํ ์คํ๋ง ๋ถํธ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์๋ธ๋ฆฟ์ผ๋ก ์๋ ๋ฑ๋กํจ๊ณผ ๋์์ ๋ชจ๋ ๊ฒฝ๋ก์ ๋ํด ๋งคํ๋๋๋ก ํ๋ค. ์ด๋์ urlPatterns ์์ฑ ๊ฐ์ "/"์ด๊ธฐ ๋๋ฌธ์, ๋ถ๊ฐ์ ์ผ๋ก ๋ฑ๋กํ ์๋ธ๋ฆฟ์ด ๋ ์์ธํ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ฐ์ ์์์ ๋ฐ๋ผ์ ํด๋น ์๋ธ๋ฆฟ๋ ํจ๊ป ๋์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋์ ์์
์๋ธ๋ฆฟ์ด ํธ์ถ๋๋ฉด ๋ถ๋ชจ ํด๋์ค์ธ HttpServlet
์ด ์ ๊ณตํ๋ service()
๊ฐ ํธ์ถ๋จ์ ๋ฐ๋ผ DispatcherServlet.doDispatch()
๊ฐ ํธ์ถ๋๋๋ฐ, ํด๋น ๋ฉ์๋์ ํ๋ฆ์ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1. ํธ๋ค๋ฌ ์กฐํ - ํธ๋ค๋ฌ ๋งคํ์ ํตํด ์์ฒญ URL์ ๋งคํ๋ ํธ๋ค๋ฌ๋ฅผ ์กฐํํ๋ค.
2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ
3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ
4. ํธ๋ค๋ฌ ์คํ - ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ์ค์ ํธ๋ค๋ฌ๋ฅผ ์คํํ๋ค.
5. ModelAndView
๋ฐํ - ํธ๋ค๋ฌ ์ด๋ํฐ๋ ํธ๋ค๋ฌ๊ฐ ๋ฐํํ๋ ์ ๋ณด๋ฅผ ModelAndView
๋ก ๋ณํํด์ ๋ฐํํ๋ค.
6. ๋ทฐ ๋ฆฌ์กธ๋ฒ ํธ์ถ
7. ๋ทฐ ๋ฐํ - ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ ๋ทฐ์ ๋ ผ๋ฆฌ ์ด๋ฆ์ ๋ฌผ๋ฆฌ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๊ณ , ๋ ๋๋ง ์ญํ ์ ๋ด๋นํ๋ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
8. ๋ทฐ ๋ ๋๋ง
์คํ๋ง MVC์ ์ธํฐํ์ด์ค
์คํ๋ง MVC์ ํฐ ๊ฐ์ ์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์ฝ๋ ๋ณ๊ฒฝ ์์ด ๊ธฐ๋ฅ์ ์ํ๋ ๋๋ก ๋ณ๊ฒฝํ๊ฑฐ๋ ํ์ฅํ ์ ์๋ค๋ ์ ์ด๋ค.
์์ ํ๋ฆ์ ํด๋นํ๋ ๊ธฐ๋ฅ๋ค์ ๋๋ถ๋ถ ํ์ฅ ๊ฐ๋ฅํ ์ธํฐํ์ด์ค๋ก ๊ตฌํ๋์ด ์๊ธฐ ๋๋ฌธ์ ํด๋น ์ธํฐํ์ด์ค๋ค๋ง ๊ตฌํํด์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๋ฑ๋กํ๋ฉด ์ง์ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค ์๋ ์๋ ๊ฒ์ด๋ค.
ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ
์ปจํธ๋กค๋ฌ ํธ์ถ
์ปจํธ๋กค๋ฌ๊ฐ ํธ์ถ๋๊ธฐ ์ํด์๋ ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ํ์ํ๋ฐ, ์คํ๋ง์์๋ ๋ ๊ธฐ๋ฅ์ ๋๋ถ๋ถ ๊ตฌํํด ๋์๋ค.
1. ํธ๋ค๋ฌ ๋งคํ(HandlerMapping)
์์ฒญ๊ณผ ํธ๋ค๋ฌ ๊ฐ์ฒด ๊ฐ์ ๋งคํ์ ์ ์ํ๋ ์ธํฐํ์ด์ค๋ก, ํธ๋ค๋ฌ ๋งคํ์ ํตํด ํน์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ์ ์๋ค.
์คํ๋ง ๋ถํธ๊ฐ ์๋ ๋ฑ๋กํ๋ ํธ๋ค๋ฌ ๋งคํ ์ค ๋ํ์ ์ธ ๊ตฌํ์ฒด๋ RequestMappingHandlerMapping
๊ณผ BeanNameUrlHandlerMapping
์ธ๋ฐ ์ ์๋ @RequestMapping์ผ๋ก๋ถํฐ ์์ฒญ ๋งคํ ์ ๋ณด๋ฅผ ์์ฑํ๊ณ , ํ์๋ ์คํ๋ง ๋น์ ์ด๋ฆ์ ๊ฐ์ง ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋๋ค.
RequestMappingHandlerMapping
์ด ์ฐ์ ์์์์ ๊ฐ์ฅ ์์๊ธฐ ๋๋ฌธ์, ํด๋น ๋จ๊ณ์์ ๋งคํ ์ ๋ณด๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ฉด ๋ค์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํธ๋ค๋ฌ ๋งคํ ๊ตฌํ์ฒด๋ฅผ ์คํํ๋ค.
2. ํธ๋ค๋ฌ ์ด๋ํฐ(HandlerAdapter)
ํน์ ํธ๋ค๋ฌ ๊ฐ์ฒด์ ์ํด ์ข ์๋์ง ์๋๋ก ํ์ฅ ๊ฐ๋ฅํ๊ฒ ์ค๊ณ๋ ์ธํฐํ์ด์ค๋ก, ํธ๋ค๋ฌ ๋งคํ์ ํตํด ์ฐพ์ ํธ๋ค๋ฌ๋ฅผ ์คํํ ์ ์๋๋ก ํ๋ค.
์คํ๋ง ๋ถํธ๊ฐ ์๋ ๋ฑ๋กํ๋ ํธ๋ค๋ฌ ์ด๋ํฐ ์ค ๋ํ์ ์ธ ๊ตฌํ์ฒด๋ RequestMappingHandlerAdapter
, HttpRequestHandlerAdapter
, SimpleControllerHandlerAdapter
๊ฐ ์๋ค.
RequestMappingHandlerAdapter
๋ ํธ๋ค๋ฌ ์ด๋ํฐ ๊ตฌํ์ ์ํ ํด๋์ค์ธ AbstractHandlerMethodAdapter
๋ฅผ ์์๋ฐ์์ผ๋ฉฐ @RequestMapping ์ฌ์ฉ ์ ์ด์ฉ๋๋ ํด๋์ค์ด๋ค.
HttpRequestHandlerAdapter
๋ HttpRequestHandler
๋ฅผ ์ฒ๋ฆฌํ๋ ํด๋์ค์ด๋ฉฐ, SimpleControllerHandlerAdapter
๋ ๊ณผ๊ฑฐ์ ์ฌ์ฉ๋๋ Controller
์ธํฐํ์ด์ค(!= @Controller)๋ฅผ ์ฒ๋ฆฌํ๋ ํด๋์ค์ด๋ค.
๋์ ๋ฐฉ์
์์ ์ดํด๋ณด์๋ MVC ๊ณผ์ ์ค ํธ๋ค๋ฌ ์กฐํ - ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ - ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
๋ทฐ ๋ฆฌ์กธ๋ฒ
๋ทฐ ๋ฆฌ์กธ๋ฒ ํธ์ถ
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ธ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ํธ๋ค๋ฌ ์ด๋ํฐ๋ก๋ถํฐ ModelAndView
๋ฅผ ๋ฐํ๋ฐ์ผ๋ฉด, ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์ด๋ฆ์ ๊ฐ์ง๊ณ ๋ทฐ๋ฅผ ์ฐพ์๋ผ ์ ์๋ ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ํธ์ถํ์ฌ ๋ทฐ๋ฅผ ๋ฐํ๋ฐ๋๋ค. ๋ทฐ ๋ฆฌ์กธ๋ฒ ์ญ์ ์คํ๋ง ๋ถํธ๊ฐ ์๋ ๋ฑ๋กํด ๋์ ๊ตฌํ์ฒด๋ค์ด ์กด์ฌํ๋๋ฐ, ๋ํ์ ์ธ ๊ตฌํ์ฒด๋ BeanNameViewResolver
, InternalResourceViewResolver
๊ฐ ์๋ค.
์ ์๋ ๋น ์ด๋ฆ์ผ๋ก ๋ทฐ๋ฅผ ์ฐพ์ ๋ฐํํ๋ฉฐ, ํ์๋ ์๋ธ๋ฆฟ์ด๋ JSP์ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ทฐ๋ฅผ ์์ฑํด ๋ฐํํ๋ค.
๋ง์ฝ ์ ์๋ฅผ ํธ์ถํ๋๋ฐ ๋ทฐ๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ฉด ํ์๋ฅผ ํธ์ถํ๋ค.
๋์ ๋ฐฉ์
ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ํตํด ์ป์ ๋
ผ๋ฆฌ ๋ทฐ ์ด๋ฆ์ ๊ฐ์ง๊ณ ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ํธ์ถํ๋๋ฐ, ์ด๋ ๋ทฐ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ํด๋น ๋ทฐ๋ฅผ ๋ฐํํ์ง๋ง ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ InternalResourceViewResolver
๊ฐ ํธ์ถ๋์ด ํฌ์๋ InternalResourceView
๋ฅผ ๋ฐํํ๋ค.
๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๋ฐํ๋ ๋ทฐ๋ฅผ render()
๋ผ๋ ๋ฉ์๋๋ฅผ ํตํด ์คํํ๋๋ฐ, ๋ง์ฝ ๋ทฐ์ ์ข
๋ฅ๊ฐ InternalResourceView
์ด๋ฉด์ forward()
๋ฉ์๋๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค๋ฉด ํด๋น ๋ฉ์๋๋ฅผ ํตํด JSP๋ฅผ ์คํํ๊ณ , ์ ํฉํ ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ๋ผ๋ฉด InternalResourceViewResolver
๋ฅผ ๋ํดํธ ๊ฐ์ผ๋ก ์ค์ ํ๊ฒ ๋๋ค.
์คํ๋ง MVC์ ํธ์ ๊ธฐ๋ฅ
Model ํ๋ผ๋ฏธํฐ
์ปจํธ๋กค๋ฌ ์์ฑ ์ ํ๋ผ๋ฏธํฐ๋ก ์ธํฐํ์ด์ค์ธ Model
์ ๋ฐ์ ์ ์์ด addAttribute()
์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ด์ฉํ ์ ์๋ค.
๋ทฐ ์ด๋ฆ ์ง์ ๋ฐํ
๋ทฐ์ ๋ ผ๋ฆฌ ์ด๋ฆ์ ๋ฐํํ ์ ์๋ค.
@RequestParam ์ฌ์ฉ
HTTP ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ @RequestParam์ ํตํด ๋ฐ์ ์ ์๋๋ฐ, @RequestParam("userName")
์ request.getParameter("userName")
๊ณผ ๊ฑฐ์ ์ ์ฌํ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋ค.
GET ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ์ POST ํผ ๋ฐฉ์์์๋ ์ง์๋๋ ๊ธฐ๋ฅ์ด๋ค.
@RequestMapping - HTTP ๋ฉ์๋ ์ง์
@RequestMapping์ ํตํด URL์ ๋งคํํจ๊ณผ ๋์์ HTTP ๋ฉ์๋๋ ํจ๊ป ๊ตฌ๋ถํ ์ ์๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ด ์ด์ฉํ ์ ์๋ค.
@RequestMapping(value = "new-form", method = RequestMethod.GET)
ํด๋น ๊ธฐ๋ฅ์ @GetMapping, @PostMapping ๋ฑ ๊ฐ HTTP ๋ฉ์๋์ ํด๋นํ๋ ์ ๋ ธํ ์ด์ ์ ์ด์ฉํจ์ผ๋ก์จ ๋ณด๋ค ๊ฐํธํ๊ฒ ์ด์ฉํ ์ ์๋ค.
@GetMapping("/new-form")
@GetMapping ์ ๋ ธํ ์ด์ ์ ๋ด๋ถ ์ฝ๋๋ฅผ ๋ณด๋ฉด @RequestMapping ์ ๋ ธํ ์ด์ ์ด ์ ์ธ๋์ด ์์์ ํ์ธํ ์ ์๋ค.

'Language & Framework > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง MVC] ๋ฉ์์ง, ๊ตญ์ ํ (0) | 2023.02.11 |
---|---|
[์คํ๋ง MVC] ๊ธฐ๋ณธ ๊ธฐ๋ฅ (0) | 2023.02.05 |
[์คํ๋ง MVC] MVC ํ๋ ์์ํฌ ๋ง๋ค๊ธฐ (0) | 2023.01.28 |
[์คํ๋ง MVC] ์๋ธ๋ฆฟ/JSP/MVC ํจํด (0) | 2023.01.23 |
[์คํ๋ง MVC] ์๋ธ๋ฆฟ (0) | 2023.01.21 |