โป Spring MVC ๋ฐํ ์๋ฃ์ ๋๋ค!
Spring MVC ๋?
Spring ํ๋ ์์ํฌ ์ค์ ์น ๊ณ์ธต์ ๋ด๋นํ๋ ๋ชจ๋ ์ค ํ๋๋ก ์ ์ ๋ช ์นญ์ Spring Web MVC ์ ๋๋ค.
๐ก Spring MVC๋ Servlet API์์์ ๋์ํ๋ฉฐ Model, View, Controller ์ธ๊ฐ์ง ๊ตฌ์ฑ์์๋ฅผ ์ฌ์ฉํด ํด๋ผ์ด์ธํธ์ ๋ค์ํ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๋จ์ ํ ์คํธ ํ์๋ถํฐ REST ํ์, View ํ์์ ์๋ต์ ํ ์ ์๋๋ก ํธ๋ฆฌํ๊ฒ ๊ตฌ์ฑ๋ ํ๋ ์์ํฌ์ ๋๋ค.
Spring MVC๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ์๋ฅผ ํธํ๊ฒ ํด์คฌ๋์ง ์์ธํ ์์๋ณด๊ธฐ ์ํด ๋ฑ์ฅ ๋ฐฐ๊ฒฝ๊ณผ ๋์ ๋ฐฉ์์ ์ค์ฌ์ผ๋ก ๋ฐํ๋ฅผ ์งํํ๊ฒ ์ต๋๋ค.
๋ฑ์ฅ ๋ฐฐ๊ฒฝ


ํด๋น ์ฝ๋๊ฐ ๋ฐ๋ก JSP ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ์ฌ ๋์ ์ธ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ ๋๋ค. HTML์ฝ๋์ Java ์ฝ๋๊ฐ ๋ณต์กํ๊ฒ ์ฝํ์์ด ์ผํ๋ด๋ ์ ์ง๋ณด์๊ฐ ๊ต์ฅํ ํ๋ค์ด ๋ณด์ด๋ ์ฝ๋์ ๋๋ค.
→ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์ฝ๋์ ๊ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ด JSP์ ๋ ธ์ถ๋๋ฉฐ ๋ทฐ๊ฐ ๋๋ฌด ๋ง์ ์ญํ ์ ๊ฐ์ง๊ฒ๋๋ค.
→ ๋ณ๊ฒฝ ์ฃผ๊ธฐ๊ฐ ๋ค๋ฅธ ์์ (๋ทฐ + ๋น์ฆ๋์ค ๋ก์ง)๊ฐ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์์ด ํ๋ฉด์ด ๋ณ๊ฒฝ๋๋ฉด ๋น์ฆ๋์ค ๋ก์ง๋ ์์ ํด์ผํ๋ ๋ณ๊ฒฝ์ ์ทจ์ฝํ ํํ๊ฐ ๋๋ค.
1. MVC ํจํด ์ ์ฉ
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํด ์ถ๊ฐ๋ ๊ฐ๋ ์ด MVC ํจํด์ ๋๋ค.
MVC๋ Model-View-Controller์ ์ฝ์๋ก, ํฉ์ณ์ ธ ์๋ ๋ทฐ ๋ก์ง๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ์ธ๊ฐ์ง ๋ ์ด์ด๋ก ๋๋์ด ๊ด๋ฆฌํ๋ ํจํด์ ๋๋ค.
ํด๋ผ์ด์ธํธ์ ํธ์ถ์ด Controller๋ฅผ ํตํด ๋ค์ด์ค๋ฉด ๊ทธ์ ๋ํ ๋น์ง๋์ค ๋ก์ง์ ์ํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Model์ ๋ด์์ View๋ก์ง์ผ๋ก ์ ๋ฌํด์ค๋๋ค.
์๋ ์ฝ๋๊ฐ Servlet์ ์์๋ฐ์ ๊ตฌํํ Controller ๋ ์ด์ด๋ก model ์ญํ ์ ํด์ค servletRequest์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ view๋ก ์ ๋ฌํด์ฃผ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
RequestDispatcher์ forward๋ผ๋ ๋ฉ์๋๋ฅผ ํตํด ์ธ์๋ก ๋ฐ์ viewPath ๊ฒฝ๋ก์ jspํ์ผ๋ก request์ response๋ฅผ ์ฎ๊ธฐ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
์ดํ View์์๋ ์ ๋ฌ๋ฐ์ Model์ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ๋ ๋๋งํํ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํด์ฃผ๋ ํํ๊ฐ ๋์์ต๋๋ค.
โ ์ด๋ ๊ฒ MVC ํจํด์ผ๋ก ๋ ์ด์ด๋ฅผ ๋๋ ๋๋ถ์ ๋น์ฆ๋์ค ์ฒ๋ฆฌ ๋ก์ง๊ณผ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ช ํํ๊ฒ ๊ตฌ๋ถํ๊ฒ๋๋ฉด ๊ฐ์๊ฐ ๋งก์ ์ผ์๋ง ์ง์คํ ์ ์์ผ๋ฉฐ ๋์จํ ๊ฒฐํฉ์ผ๋ก ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ, ๊ทธ๋ฆฌ๊ณ ์ ์ง๋ณด์์ ํธ๋ฆฌ์ฑ์ ์ป์ ์ ์์ต๋๋ค.
2. Front Controller ํจํด ๋ฑ์ฅ
ํ์ง๋ง ์์ ์ฝ๋์๋ ์์ฌ์ด ์ ์ด ์์ต๋๋ค.
Controller์ฝ๋๋ฅผ ๋ค์ ์ดํด๋ณด๋ฉด ๋ฐ์ค ์น ๋น์ฆ๋์ค ๋ก์ง ๋ถ๋ถ์ ์ ์ธํ๊ณ ์๋ธ๋ฆฟ์ ์ด์ฉํ๊ธฐ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ช ์ํด์ผํ๋ ์ฝ๋๋ค์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ๋๋ค.
Boilderplate ์ฝ๋๋ค (์๋ธ๋ฆฟ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํธ์ถ๋๋ ์ฝ๋๋ค)
- ํฌ์๋ ๊ด๋ จ ์ฝ๋
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
- ViewPath( prefix, seffix ) ์ฝ๋
String viewPath = "/WEB-INF/views/new-form.jsp";
// prefix : /WEB-INF/views/
// seffix : .jsp
- ์ฌ์ฉํ์ง ์๋ ๋งค๊ฐ๋ณ์ ํธ์ถ
HttpServletRequest request, HttpServletResponse response
๋ชจ๋ ์ปจํธ๋กค๋ฌ ๋ง๋ค ํด๋น ์ฝ๋๋ค์ด ์กด์ฌํ๋ค๋ฉด ๋ถํ์ํ ์ค๋ณต ์ฝ๋๋ค์ด ๋์ด๋ ๊ฒ์ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ๋ณด์ํ๊ณ ์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller) ํจํด์ด ๋์ ๋์์ต๋๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ์ ์ ๋จผ์ ํธ์ถ๋์ด ๊ณตํต ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๊ธฐ์ํ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ฅผ ๋๋ ๊ฒ์ ๋๋ค.
URL๋ง๋ค ์๋ธ๋ฆฟ์ ์์ฑ๋์๋ ๊ธฐ์กด์ ๊ตฌ์ฑ์์ ํ๋์ ์๋ธ๋ฆฟ์ด ๋ชจ๋ ์์ฒญ์ ๋ฐ๊ณ ํ์ํ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํด ์ฃผ๋ ๊ตฌ์ฑ์ผ๋ก ๋ณ๊ฒฝ๋๋ฉฐ ๋๋จธ์ง ์ปจํธ๋กค๋ฌ๋ ์๋ธ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ ์ผ๋ฐ์ ์ธ ์๋ฐ ์ฝ๋๋ก๋ง ๊ตฌ์ฑ๋ ๊ฐ์ฒด(POJO)๊ฐ ๋์์ต๋๋ค.
→ ๋๋ถ์ WAS์ ์๋ธ๋ฆฟ๊ณผ์ ๊ฒฐํฉ๋ ฅ์ ๋ฎ์ถ ์ ์์ด์ก์ง๋ง Spring ํ๋ ์์ํฌ์์ ๊ฒฐํฉ๋ ฅ์ด ๋์์ง๊ฒ ์ฃ
โ Spring MVC์์ ์ด ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก ํ๋ ์์ํฌ์ ํต์ฌ์ธ Dispatcher Servlet์ ๋๋ค.
Dispatcher Servlet์ด ๋จ์ํ ์ค๊ฐ ๋งค๊ฐ ์ญํ ๋ง ํด์ฃผ๋ ๊ฒ์ด ์๋๋ผ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ๊ณตํ๊ณ ๊ณตํต์ ๋ก์ง๋ค์ ์ฒ๋ฆฌํด์ฃผ์ด ๊ฐ๋ฐ์๊ฐ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๊ฒ ๋์์ต๋๋ค.
์์ธ๊ฐ ๋ฐ์ํ์์ ๋ ์์ฒญ์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ๋ ํ๋ฐํธ ์ปจํธ๋กค๋ฌ์ธ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ๋ด๋นํ๊ณ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด Dispatcher Servlet์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค์ด๋ ์ปจํธ๋กค๋ฌ ์ค ์ด๋ป๊ฒ ์ ํฉํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ์์ํด ์ฃผ๋ ๊ฒ์ผ๊น์? Dispatcher Servlet์ ๋์์ ๋ํด ์ข ๋ ์์๋ณด๊ฒ ์ต๋๋ค.
Dispatcher Servlet
์๋ธ๋ฆฟ์ ์์๋ฐ์ ๊ตฌํ์ฒด์ด๋ฉฐ ๋ชจ๋ URL ํจํด์ ๋งคํ๋์ด (urlPatterns=”/”), HTTP ํ๋กํ ์ฝ๋ก ๋ค์ด์ค๋ ์์ฒญ์ ์ ์ผ ๋จผ์ ๋ฐ์ ์์ ์ ์ํํ๊ฒ ๋ฉ๋๋ค.
์์ฒญ(Request)์ ๋ฐ์ผ๋ฉด ํ์ํ ๊ณตํต ์ฒ๋ฆฌ๋ฅผ ํ ํ, ์๋ง๋ Handler๋ก ์์ฒญ์ ๋ณด๋ธ ํ(Dispatch) ์คํ ๊ฒฐ๊ณผ๋ฅผ Http Responseํํ๋ก ๋ง๋๋ ์ญํ ์ ํฉ๋๋ค.
์ฌ๊ธฐ์ Handler๋ ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ฐ๋ฐ์๊ฐ ๊ตฌํํ ๊ฐ๊ฐ์ controller ๋ฉ์๋๋ฅผ ๋งํฉ๋๋ค.
์์ฒญ์ ์ ํฉํ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด Handler Mapping, Handler Adapter, View Resolver ์ธํฐํ์ด์ค ์ ๋ต์ ์ฌ์ฉํฉ๋๋ค. ๊ฐ๊ฐ์ ๊ตฌํ์ฒด๋ Spring Configuration๋ฅผ ํตํด ๋น์ผ๋ก ๊ฒ์ ๋ฐ์ ๋์ํ๊ฒ ๋ฉ๋๋ค.
- Handler Mapping : ํธ๋ค๋ฌ๋ค์ ๋งคํ ์ ๋ณด ์ ์ฅ
- Handler Adapter : ํธ๋ค๋ฌ๋ฅผ ํธ์ถํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
- View Resolver : ์์ฒญ์ ์ ํฉํ View๋ก ๋ ๋๋ง
๊ฐ๊ฐ์ ์ธํฐํ์ด์ค๋ค์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์ฝ๋์ ํจ๊ป ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋ ์ฝ๋๋ DispatcherServlet์ ์ฃผ์๋ฉ์๋์ธ doDispatch์ ์ผ๋ถ ์ ๋๋ค.
ํด๋ผ์ด์ธํธ๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด DispatcherServlet์ด ์ ์ํ๋ค ์์ฒญ์ ์์ํ๊ธฐ ์ํด doDispatch ๋ฉ์๋๋ฅผ ์คํํฉ๋๋ค.
1. getHandler๋ฅผ ํธ์ถํ์ฌ handleMapping๋ค ์ค ์์ฒญ์ ์ฒ๋ฆฌํ (request์ URL๊ณผ ๋งค์นญ๋๋) handler๊ฐ ์๋์ง ํ์ธํ๊ณ ๊บผ๋ด์ต๋๋ค.
: ์ด๋ handleMapping์ ์ปจํธ๋กค๋ฌ ๋น์ ํ์ฑํ์ฌ hash map์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
2. ์ ์ ํ handler๋ฅผ ์ฐพ์ผ๋ฉด ๊ทธ์ ๋ง๋ HandlerAdapter๋ฅผ ํ์ํ์ฌ ์์ฒญ์ ์์ํ ์ด๋ํฐ๋ฅผ ๊บผ๋ด์ต๋๋ค.
3. HandlerAdapter๊ฐ handler์๊ฒ ์์ฒญ์ ์์ํ๊ณ ์์ฒญ์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
: ์ด๋ ์์ฒญ์ ๊ฒฐ๊ณผ๋ก ModelAndView(model ๊ณผ view๊ฐ wrapping๋ ๊ฐ์ฒด)๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐํ๋ ๊ฐ์ฒด๋ ์ ์ ํ viewResolver์ ์ํด model์ด ๋ ๋๋ง ๋ view๋ฅผ ๊ตฌ์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ตํ๊ฒ ๋ฉ๋๋ค.
@Controller๋ฉด ModelAndView๋ฅผ ๋ฐํํ๊ณ @RestController๋ฉด null์ ๋ฐํํ๊ฒ ๋จ์ผ๋ก View๊ฐ ๋ ๋๋ง๋๋ ๊ณผ์ ์ ์๋ตํ๊ณ ๋ฐํ๋ ResponseEntity๋ฅผ HttpEntityMethodProcessor๊ฐ MessageConverter๋ฅผ ์ฌ์ฉํด ์๋ต ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ ํ ์๋ตํ๊ฒ ๋ฉ๋๋ค.
โ๏ธ ์ธํฐํ์ด์ค ์ ๋ต์ ์ฌ์ฉํ๋ ์ด์ ๋ ์ปจํธ๋กค๋ฌ ๊ตฌํ๋ฐฉ์์ด ๋ค์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์คํ๋ง์ด ์ธํฐํ์ด์ค๋ฅผ ๋ค์ํ๊ฒ ๊ตฌํํ์๊ณ ์ด๋ํฐ ํจํด์ ์ ์ฉํด ๋์๊ธฐ๋๋ฌธ ๊ตฌํ๋ฐฉ์์ ์๊ด์์ด ์์ฒญ์ ์์ ํ ์ ์๊ฒ ๋๊ฒ์ ๋๋ค.
์ฆ, DispatcherServlet ์ฝ๋ ๋ณ๊ฒฝ ์์ด ์ํ๋ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๋ณ๊ฒฝํ๊ฑฐ๋ ํ์ฅ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋๋ค.
handleMapping ๊ตฌํ์ฒด
BeanNameUrlHandlerMapping // ๋น ์ด๋ฆ์ด URL๊ณผ ๋์ผํ ํธ๋ค๋ฌ ์ฐพ๊ธฐ @Component(”/v1/post”)
ControllerBeanNameHandlerMapping // ๋น ์ด๋ฆ์ด URL ์ด๋ฆ๊ณผ ๋์ผํ ํธ๋ค๋ฌ ์ฐพ๊ธฐ
SimpleUrlHandlerMapping // ํ๋กํผํฐ์ ๋ฑ๋ก๋ ๋งคํ์ ๋ณด์์ ํธ๋ค๋ฌ ์ฐพ๊ธฐ
RequestMappingHandlerMapping // @RequestMapping ์ด๋
ธํ
์ด์
๊ธฐ๋ฐ ํธ๋ค๋ฌ ์ฐพ๊ธฐ @Controller
HandlerAdapter ๊ตฌํ์ฒด
RequestMappingHandlerAdapter // @RequestMapping ์ด๋
ธํ
์ด์
์ ์ฌ์ฉ
HttpRequestHandlerAdapter // HttpRequestHandler ์ธํฐํ์ด์ค ์ฒ๋ฆฌ
SimpleControllerHandlerAdapter // controller ์ด๋
ธํ
์ด์
์ฒ๋ฆฌ
handle๋ ์ฌ๋ฌ ๊ตฌํ์ฒด๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ๋์ ๊ตฌํ์ฒด๊ฐ ์ด์์ ์ด์ง๋ง 2๊ฐ ์ด์์ ํธ๋ค๋ฌ ๋งคํ์ด ๋ฑ๋ก ๋์ URL์ด ์ค๋ณต ๋งค์น๋ ๊ฒฝ์ฐ order ํ๋กํผํฐ๋ฅผ ํตํด ์ฐ์ ์์๊ฐ ๋์ ์์๋๋ก ๊ตฌํ์ฒด ์ ๋ต์ ๋ฐ๋ผ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
order์ด ๊ฐ์ฅ ์์ RequestMapping ๊ตฌํ์ฒด๊ฐ ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ๊ฒ๋๋ฉฐ ํด๋น ๋ฐฉ์์ด ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๊ฒ๋๋ ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ์ฌ ๋น์ ๋ฑ๋กํ๋ ๋ฐฉ์์ ๋๋ค.
์ ๊ณต๋๋ ๊ฒ ์ธ์๋ ์ธํฐํ์ด์ค๋ง ๊ตฌํํด์ DispatcherServlet์ ๋ฑ๋กํ๋ฉด ๋๋ง์ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค ์๋ ์์ง๋ง ๊ฑฐ์ ์๋ ์ํฉ์ด๋ฉฐ ๋๋ถ๋ถ ํธ๋ฆฌํ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
๋์ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ ํด๋ณผ ์ ์๊ฒ ๋ค์. ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๊ธธ์ก์ด๋ฅผ ํด์ฃผ๋ฉฐ ๋ชจ๋ ์ญํ ์ ์์ํ๊ฒ ๋ฉ๋๋ค.
โ DispatcherServlet ์์ฝ
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ด๋ ํ ์์ฒญ์ด ์ค๋ฉด Tomcat๊ณผ ๊ฐ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์์ฒญ์ ๋ฐ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ชจ๋ ์์ฒญ์ ๋จผ์ ํ๋ฐํธ ์ปจํธ๋กค๋ฌ์ธ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ๋ฐ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๊ณตํต์ ์ธ ์์ ์ ๋จผ์ ์ฒ๋ฆฌํ ํ์ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํด์ผ ํ๋ ์ธ๋ถ ์ปจํธ๋กค๋ฌ๋ฅผ getBean()์ผ๋ก ๊ฐ์ ธ์ค๊ณ , ์ ํด์ง ๋ฉ์๋๋ฅผ ์คํ์์ผ ์์ ์ ์์ํ๋ค.
์์ ์ค๋ช ๋ค์ธ ๋์์ด ๋งค์ฐ ๋ณต์กํด๋ณด์ด์ง๋ง Spring MVC๊ฐ ์ญํ ์ ์ ๋ถ๋ฆฌํ๊ณ ๋ค์ํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด ๊ท๊ฒฉํํด ๋์๊ธฐ ๋๋ฌธ์ ์ ์ฐํ๊ณ ํ์ ์ฑ ์๊ฒ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์๋ ์น์๋น์ค๋ฅผ ์ํด ํธ๋ค๋ฌ(์์ฒญ ์ฒ๋ฆฌ ๋ก์ง)๋ง ์ ๊ฒฝ์ฐ๋ฉด ๋๊ฒ ๋๊ฒ์ ๋๋ค! ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ๋์ ๋ผ์ ์ ๋ง ๋คํ์ด๋ผ๋ ์๊ฐ์ด ๋ค์ ํ๋ฒ ํ๊ฒ๋์์ต๋๋ค.๐
Ref.
https://www.youtube.com/watch?v=9Tmzt6Q9WI8&ab_channel=๋ด๋ ์ฒ
https://bellog.tistory.com/m/219
[๊น์ํ] Spring MVC Part1
๊ทธ ์ธ
- ์๋ธ๋ฆฟ : WAS์์ ์์ฒญ์ ์๋ฏธ์๋ ๋ก์ง์ ์ถ์ถํด์ฃผ๋ ์ปดํฌ๋ํธ
- WAS์์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์๊ณ ์๋ธ๋ฆฟ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ๋์ ์์ฒญ์ ๋ํ ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ง์ํ๋ค.
- ์๋ธ๋ฆฟ์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํ๋ค. → ๊ณ ๊ฐ์ ์์ฒญ์ ๋ฐ๋ผ ๊ณ์ ์์ฑ, ์ญ์ ํ๋ ๊ฒ์ ๋นํจ์จ์ . (Request์ Response๋ ๊ฐ์ฒด๋ ๊ณ์ ์์ฑ๋๋ ๊ฒ์ด ๋ง์)
- MVC ๊ตฌ์ฑ
- Model : ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ตฌ๊ฐ
- View : ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ํํ๋๋ ๊ตฌ๊ฐ. ๋ชจ๋ธ๋ก ๋ถํฐ ์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ ๋ฟ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ๋์ด์๋์ง๋ ๊ด์ฌ์ ๊ฐ์ง์ง ์๋๋ค.
- Controller : Model๊ณผ View๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๊ตฌ๊ฐ. View๋ฅผ ํตํด ์ฌ์ฉ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด Controller๊ฐ ํด๋น ์์ฒญ์ Modelํํ ์๋ ค ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค.
- MVC ํจํด์ ๋จ์
- → ์์คํ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก model๊ณผ view์ ์์กด๋๊ฐ ๋์์ ธ์ ๊ด๊ฐ ํ๋ค์ด์ง๋ ์ํฉ์ด ์๊ธธ ์ ์๋ค. ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํ MVP, MVVM ๊ฐ์ ๋์์ธ ํจํด๋ ์กด์ฌ
- spring ์ปจํ ์ด๋
- DispatcherServlet ์์ฑ ์์ : ํ๋์ ์๋ธ๋ฆฟ์ผ๋ก ํฐ์บฃ์ด ์คํ๋ ์๋ธ๋ฆฟ ์ปจํ ์คํธ๊ฐ ์ด๊ธฐํํ๋ ์์ ์ ์ต์ ์ ๋ฐ๋ผ lazy load ํน์ pre loading ๋ฐฉ์์ผ๋ก ์์ฑ๋๋ค.
- DispatcherServlet ์ฑ๊ธํค
์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋๊ธ์ ํตํด ์๋ ค์ฃผ์ธ์. ๊ฐ์ฌํฉ๋๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Filter์ Interceptor ์ฐจ์ด (2) | 2023.04.22 |
---|---|
[JPA] ์ปค์ ๊ธฐ๋ฐ pagenation ๊ตฌํํ๊ธฐ (8) | 2023.03.01 |
[JPA] ์คํ์ ๊ธฐ๋ฐ Pagenation ๊ตฌํํ๊ธฐ (0) | 2023.03.01 |
[Spring] Request ์ด๋ ธํ ์ด์ (parameter mapping) (2) | 2022.12.01 |
[Java] List ์ ํจ์ฑ ๊ฒ์ฌ (1) | 2022.12.01 |
๋๊ธ