๐ฅ MVC(Model-View-Controller)
MVC(Model-View-Controller)์ MVC2๋ ์ํํธ์จ์ด ๋์์ธ ํจํด ์ค ํ๋์ด๋ค. ์ฐ์ MVC๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ๋จผ์ ์์๋ณด์.
-
Model : Model์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ์ผ, ์ธ๋ถ ์๋น์ค์์ ์ฐ๋ ๋ฑ ๋ฐ์ดํฐ ๊ด๋ จ ์์ ์ ์ํํ๋ค. ์ฒ๋ฆฌํ ์์ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ผ๋ก ๋๋ ค์ฃผ๋ ์์ ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ Model์ด๋ผ๊ณ ํ๋ค.
-
View : ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ด๋นํ๋ ๋ถ๋ถ์ด๋ค. ์ฌ์ฉ์๊ฐ ๋ณด๋ ํ๋ฉด์ ๊ตฌ์ฑํ๋ฉฐ, Model์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฅผ ์์์ ์ผ๋ก ํํํ๋ค. (HTML, PDF, JSON)
-
Controller : ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๊ณ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ด๋ค. ์ฌ์ฉ์์ ์์ฒญ์ ๋ถ์ํ๊ณ , ํด๋นํ๋ Model์ ํธ์ถํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ View์ ์ ๋ฌํ๋ค.
์ด์ ์คํ๋ง์์ ์ฌ์ฉํ๋ MVC ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด์.
Spring MVC๊ตฌ์กฐ
์ด๋ฏธ์ง ์ถ์ฒ: Spring MVC Architecture
- Dispatcher Servlet : ๋ชจ๋ ์์ฒญ์ ๋ฐ์์ Controller์๊ฒ ๋๊ฒจ์ฃผ๋ ์ญํ ์ ์ฃผ๋ก ํจ
- HandlerMapping : ๋ค์ด์ค๋ ์์ฒญ URL์ ๋งคํ๋๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ํํ๊ณ ,์ ํ๋ ํธ๋ค๋ฌ(Handler)์ ์ปจํธ๋กค๋ฌ๋ฅผ DispatcherServlet์ ๋ฐํํ๊ณ , DispatcherServlet์ด ์ปจํธ๋กค๋ฌ์ ๋น์ฆ๋์ค ๋ก์ง ์คํ ์์ ์ HandlerAdapter์๊ฒ ์์ํจ
- HandlerAdapter : ์ปจํธ๋กค๋ฌ์ ๋น์ฆ๋์ค ๋ก์ง ํ๋ก์ธ์ค๋ฅผ ํธ์ถํจ
- ์ปจํธ๋กค๋ฌ๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๊ณ , ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ธ์ ์ค์ ํ ํ ๋
ผ๋ฆฌ์ ์ด๋ฆ์ HandlerAdapter์ ๋ฐํํจ
** ๋ ผ๋ฆฌ์ ์ด๋ฆ : ์ปจํธ๋กค๋ฌ๊ฐ View์ ๋ํด ์ฐธ์กฐํ๋ ๋ฐฉ์์ ๋งํจ. ๋ ผ๋ฆฌ์ ์ด๋ฆ์ ์ค์ View ํ์ผ(ex. test.html) ๊ฒฝ๋ก๋ ํ์ผ๋ช ๊ณผ ์ง์ ์ ์ผ๋ก ์ผ์นํ์ง ์๊ณ ๋ ๋์ View Resolver์ ์ํด ํด์๋์ด ์ค์ ๋ทฐ ๋ฆฌ์์ค๋ก ๋งคํ๋จ. - ViewResolver๋ ๋ทฐ ์ด๋ฆ์ ๋งคํ๋ ๋ทฐ๋ฅผ ๋ฐํํจ
- ๋ทฐ๋ ๋ชจ๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ๊ณ ์๋ต์ ๋ฐํํจ.
์ ์ด๋ฏธ์ง๋ DispatcherServlet์ ๋์ ๊ณผ์ ์ธ๋ฐ, ์ค์ ์คํ๋ง MVCํจํด์ ํต์ฌ ์์์ด๋ค. DispatcherServlet์ ๋์ ๋ฐฉ์์ MVCํจํด์ ์์น์ผ๋ก ๋ฐ๋ฅด๋ฉฐ ์คํ๋ง MVC์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ๊ณผ ํ๋ฆ์ ๊ด๋ฆฌํ๋๋ฐ ์ค์ฌ์ ์ธ ์ญํ ์ ํ๋ค.
DispatcherServlet์ ์ญํ ๊ณผ MVC
-
์ปจํธ๋กค๋ฌ(Controller) ์ญํ : DispatcherServlet์ ์คํ๋ง MVC์์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller) ํจํด์ ๊ตฌํํ๊ณ , ๋ชจ๋ ์น ์์ฒญ์ ๋จผ์ DispatcherServlet์ ํต๊ณผํ๋๋ฐ, ์ด๊ฑด MVC ํจํด์ ์ปจํธ๋กค๋ฌ ๋ถ๋ถ์ ํด๋นํจ
-
์์ฒญ ๋ผ์ฐํ (Request Routing): DispatcherServlet์ ๋ค์ด์ค๋ ์์ฒญ์ ๋ถ์ํ๊ณ ์ ์ ํ ํธ๋ค๋ฌ(Controller)์๊ฒ ์์ฒญ์ ์ ๋ฌํ๊ณ , ์ด ๊ณผ์ ์์ HandlerMapping์ ์ฌ์ฉํ์ฌ ์์ฒญ URL์ ์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ ๋ฉ์๋์ ๋งคํํจ
-
๋ชจ๋ธ๊ณผ ๋ทฐ์ ์ ํ: ์ปจํธ๋กค๋ฌ๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ ํ, DispatcherServlet์ ๋ฐํ๋ ์ ๋ณด(๋ชจ๋ธ)์ ๋ทฐ ์ด๋ฆ์ ๋ฐํ์ผ๋ก ์๋ต์ ์์ฑํ๋๋ฐ, ViewResolver๋ ๋ทฐ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ค์ ๋ทฐ๋ฅผ ๊ฒฐ์ ํ๊ณ , ๋ทฐ๋ ๋ชจ๋ธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ข ์ ์ธ ์ฌ์ฉ์ ์๋ต์ ๋ ๋๋งํจ.
๐ MVC ํจํด์ ์ ์จ์ผ ๋ ๊น ?
MVCํจํด์ ์ฌ์ฉํ๋ ์ด์ ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค.
- Model, View, Controller๋ก ๋ถ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๋๊ณ ์์ ๋ ์ ์์ด, ์ ์ง๋ณด์์ ํ์ฅ์ ์ฉ์ดํ๋ค.
- ๋ชจ๋ธ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ฑ ๋ฐ ์ ์ฐ์ฑ์ ๋ฐ์ด๋๋ค. ๋์ผํ ๋ก์ง์ ์ฌ๋ฌ ์ธํฐํ์ด์ค์ ์ฝ๊ฒ ์ ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ ์คํธํ๊ธฐ๊ฐ ์ฉ์ดํ๋ค.
MVCํจํด์ ์ด๋ฌํ ์ด์ ๋ค๋ก ์ธํ์ฌ ์ค๋ซ๋์ ์ธ์ ๋ฐ๊ณ ์ฌ์ฉ๋์ด ์๋ค.
๐ค MVC2๋ ๋ฌด์์ธ๊ฐ ?
์ง๊ธ์ ๋ง์ ๊ณณ์์ ํ์ค์ผ๋ก ์ฐ๊ณ ์๋ ๊ฒ์ด MVC2ํจํด์ด๋ค. MVC2๊ฐ ๋ฑ์ฅํ ์ด์ ๋ ๋ณต์ก์ฑ๊ณผ ํน์ฑ ๋๋ฌธ์ด๋ค. ์๋์ MVCํจํด์ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ํฉํ์ง๋ง, ์ด์ ๋ ๊ฐ๋ฐ์ ๋ํ ์ฌ๋ฌ ์๊ตฌ ์ฌํญ๋ค์ ์ถฉ์กฑํด์ผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง๊ณ ์์ด์ MVCํจํด์ ์ ํฉํ๊ฒ ๋ฐ์ ์์ผ์ผ ํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ํคํ ์ฒ๋ฅผ ์กฐ๊ธ ๋ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉด์, ์ ์ง๋ณด์/ํ์ฅ์ฑ/์ฑ๋ฅ๊ณผ ์ต์ ํ๋ฅผ ํ๊ธฐ ์ํด ๊ธฐ์กด์ ์๋ MVCํจํด์ ๋ฐ์ ์์ผฐ๋ค.
MVC์ MVC2๋ ์๋์ ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค.
MVC
- User -> JSP(View/Controller): ์ฌ์ฉ์์ ์์ฒญ์ ๋ทฐ๋ฅผ ํตํด ๋ค์ด์ค๋ฉฐ, ๋ทฐ๋ ์ปจํธ๋กค๋ฌ์ ๊ธฐ๋ฅ์ ์ผ๋ถ ์ํํจ
- Controller -> Model: ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์ ์์ฒญ์ ์ ๋ฌํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํจ
- Model -> DB: ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ ์์ฉ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ปจํธ๋กค๋ฌ์ ๋ฐํํจ.
MVC2
- User -> Controller: ์ฌ์ฉ์์ ๋ชจ๋ ์์ฒญ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด ์ฒ๋ฆฌํจ
- Controller -> Model: ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์์ฒญํจ
- Model -> DB: ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ์ฌ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ปจํธ๋กค๋ฌ์ ๋ฐํํจ
- Controller -> View: ์ปจํธ๋กค๋ฌ๋ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ทฐ์ ์ ๋ฌํ์ฌ ์ฌ์ฉ์์๊ฒ ํ์ํจ
MVC์ MVC2์ ๋จ์
MVC์ ์ฅ์ ์ ๋ทฐ๋ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ด ์๊ท๋ชจ ํ๋ก์ ํธ์์ ์ ์ฐํ๊ฒ ๊ฐ๋ฐํ ์ ์๊ณ , ๋ณต์กํ ์ค์ ์ด๋ ๊ตฌ์ฑ์์ด๋ ๊ตฌํํ ์ ์๋ค๋ ๊ฒ์ด ์ฅ์ ์ด์ง๋ง, ์ ์ง๋ณด์๊ฐ ์ด๋ ต๊ณ (๋ทฐ์ ์ปจํธ๋กค๋ฌ ์ฌ์ด์ ๋ช ํํ ๊ตฌ๋ถ์ด ์์) ์๋ฌด๋๋ ํ์ฅ์ฑ์ ์ ํ์ด ์์ด ํฐ ๊ท๋ชจ์ ํ๋ก์ ํธ๋ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์๋ ์ฌ์ฉํ๊ธฐ ํ๋ค๋ค.
MVC2์ ๊ฒฝ์ฐ ์ญํ ์ด ๋ช ํํ๊ฒ ๋ถ๋ฆฌ๋์ด ์๋ค๋ณด๋, ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ด ๋งค์ฐ ๋ฐ์ด๋๋ฉฐ, ์ฌ์ฌ์ฉ์ฑ/ํ ์คํธ/ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฑ ๋ง์ ์ฅ์ ์ด ์๋ค. ๋จ์ ์ ์ด๊ธฐ ํ์ต ๊ณก์ ์ด ์กฐ๊ธ ๊ฐํ๋ฅด๋ฉฐ, ๊ตฌํ ๋ณต์ก์ฑ์ด ์๋ค.