๊ฐ์
โข
MVC ํจํด
โข
MVC vs REST
โข
MVC๋ ์ธ์ ์ฐ์ด๋?
โข
REST๋ ์ธ์ ์ฐ์ด๋?
โข
MVC model1
โข
MVC model2
โข
Spring Boot์์์ MVC
MVC ํจํด
์ํํธ์จ์ด๋ฅผ โ๋ชจ๋ธ, ๋ทฐ, ์ปจํธ๋กค๋ฌโ ๊ตฌ์ฑ ์์๋ก ๋ชจ๋ํ ํ์ฌ ๊ฐ๋ฐํ๋ ์ํคํ
์ฒ ํจํด
M - Model : ๋ชจ๋ธ โ ๋ฐ์ดํฐ
V - View : ๋ทฐ โ ํ๋ฉด
C - Controller : ์ปจํธ๋กค๋ฌ โ ๋ชจ๋ธ, ๋ทฐ ์ ์ดํ๋ ์ญํ
MVC (Model-View-Controller) ์ํคํ
์ฒ ํจํด์ ์ํํธ์จ์ด ๋์์ธ์์ ์ฌ์ฉ๋๋ ๊ตฌ์กฐ์ ํจํด์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์
์ ์ธ ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ก ๋ถ๋ฆฌํฉ๋๋ค:
์ด ํจํด์ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ์ด์งํ์ฌ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์์ฑ, ํ์ฅ์ฑ์ ํฅ์์ํต๋๋ค.
๊ตฌ์ฑ ์์
โข
Model (๋ชจ๋ธ): ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํฉ๋๋ค.
โข
View (๋ทฐ): ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ด๋นํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ํ์ํฉ๋๋ค.
โข
Controller (์ปจํธ๋กค๋ฌ): ์ฌ์ฉ์ ์
๋ ฅ์ ์ฒ๋ฆฌํ๊ณ , ๋ชจ๋ธ๊ณผ ๋ทฐ ์ฌ์ด์ ์ํธ์์ฉ์ ์กฐ์ ํฉ๋๋ค.
๊ตฌ์ฑ ์์ | ์ค๋ช
| ์ญํ |
๋ชจ๋ธ (Model) | ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ก์ง์ ๋ด๋น | - ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐ ์
๋ฐ์ดํธ
- ๋น์ฆ๋์ค ๋ก์ง ์ํ
- ๋ฐ์ดํฐ์ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ ์ง
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ ์์ฉ |
๋ทฐ (View) | ์ฌ์ฉ์ ์ธํฐํ์ด์ค(ํ๋ฉด)์ ๋ด๋น | - ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์
- ์ฌ์ฉ์ ์
๋ ฅ ์์ง ๋ฐ ์ ๋ฌ
- ๋ชจ๋ธ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ์ฌ ํ๋ฉด ๊ฐฑ์
- ์ฌ์ฉ์์ ์ํธ ์์ฉํ๋ ์ธํฐํ์ด์ค ์ ๊ณต |
์ปจํธ๋กค๋ฌ (Controller) | ๋ชจ๋ธ๊ณผ ๋ทฐ ์ฌ์ด์ ์ค๊ฐํ๋ ์ญํ | - ์ฌ์ฉ์ ์
๋ ฅ ํด์ ๋ฐ ์ฒ๋ฆฌ
- ๋ชจ๋ธ ์
๋ฐ์ดํธ ๋ฐ ๊ด๋ฆฌ
- ๋ชจ๋ธ๊ณผ ๋ทฐ ๊ฐ์ ์ํธ ์์ฉ ๊ด๋ฆฌ
- ๋น์ฆ๋์ค ๋ก์ง ๋ฐ ํ๋ฆ ์ ์ด |
ํจํด? (Pattern)
๋ชจ๋ฒ ๋ต์
์ ํ์๋ ์ฐ๊ตฌ์๊ฐ ์ํ์ฐฉ์ค๋ ์ฐ๊ตฌ ๋์ ์ต์ ์ ๊ฐ๊น์ด ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ์์ผ๋ก ์๋ฆฌ ์ก์ ๊ตฌ์กฐ
์ํคํ ์ฒ ํจํด
์ํํธ์จ์ด ์ค๊ณ ๊ตฌ์กฐ์ ๋ํ ๋ชจ๋ฒ ๋ต์
๋์์ธ ํจํด
์ํํธ์จ์ด ์ค๊ณ์ ์ฝ๋์ ๋ํ ๋ชจ๋ฒ ๋ต์
MVC vs REST
MVC ๋ ํ์ด์ง ๊ธฐ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์ค๊ณ๋ฅผ ๋ชฉ์ ์ผ๋ก ํ๋ฉฐ,ย
REST ๋ ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ์์์ ๋ฆฌ์์ค ๊ธฐ๋ฐ ํต์ ์ ์ํ ์ค๊ณ ๋ฐฉ์์
๋๋ค.
์ฃผ์ ์ค๋ช
โข
MVC: ํ์ด์ง ๋จ์๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ฃผ๋ก HTML ๊ธฐ๋ฐ์ ์นํ์ด์ง ๋ ๋๋ง์ ์ต์ ํ๋์ด ์์ต๋๋ค.
โข
REST: HTTP ๋ฉ์๋๋ฅผ ํตํด ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์ผ๋ก, ๋ฐ์ดํฐ ์ ์ก์ ํนํ๋์ด ์์ด ํ๋ก ํธ์๋์ ๋ฐฑ์๋๋ฅผ ๋ถ๋ฆฌํ๊ธฐ์ ์ ํฉํฉ๋๋ค.
์์
โข
MVC
์ ํต์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ค๊ณ ๋ฐฉ์์ผ๋ก, ๊ฐ ํ์ด์ง๋ง๋ค ์๋ฒ์์ HTML์ ์์ฑํ์ฌ ๋ฐํ.
โข
REST
React์ ๊ฐ์ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฐ์ดํฐ๋ง ์์ฒญํ๋ API ์๋ฒ.ย
GET /usersย ์์ฒญ ์ JSON ๋ฐ์ดํฐ ๋ฐํ.
ํ๋ก ํธ์๋ (React) ๋ฐฑ์๋ (SpringBoot)
MVC๋ ์ธ์ ์ฐ์ด๋?
MVC๋ ์๋ฒ์์ ์ง์ HTML์ ๋ ๋๋งํด ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์ด์ฉํ ์ ์๋ ๋ฐฉ์์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ๋ฉ๋๋ค.
์ฃผ์ ์ค๋ช
MVC ํจํด์ ์ฃผ๋ก ์ฝํ
์ธ ๋ ๋๋ง์ด ์๋ฒ์์ ์ด๋ฃจ์ด์ง๊ณ , ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ํตํฉ๋ ํ๊ฒฝ์์ ์ ์ฉํฉ๋๋ค. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ํตํด ํ์ด์ง๊ฐ ์์ฑ๋๋ฏ๋ก, ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ๋ก๋ํ ๋ ์ด๊ธฐ ์๋ต ์๋๊ฐ ๋น ๋ฆ
๋๋ค.
์์
โข
์ผํ๋ชฐ ์น์ฌ์ดํธ: ์ ํ ๋ชฉ๋ก, ์์ธ ํ์ด์ง, ์ฅ๋ฐ๊ตฌ๋ ๋ฑ ์๋ฒ์์ ๋ ๋๋ง๋ ํ์ด์ง๋ฅผ ์ ๊ณต.
โข
ํ์ฌ ํํ์ด์ง: ์๋ฒ์์ ์ง์ HTML ํ์ด์ง๋ฅผ ๋ ๋๋งํ์ฌ SEO์ ์ ๋ฆฌํ๊ฒ ์ ๊ณต.
REST๋ ์ธ์ ์ฐ์ด๋?
REST๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ๋ฐ์ดํฐ๋ฅผ JSON, XML ๋ฑ์ ํ์์ผ๋ก ์ฃผ๊ณ ๋ฐ๋ API ์ค๊ณ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ฃผ์ ์ค๋ช
REST๋ ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํ ๋, ํนํ ๋ค์ํ ํด๋ผ์ด์ธํธ(๋ชจ๋ฐ์ผ, ์น ๋ฑ)์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋์ ์ธ ํ์ด์ง๋ฅผ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ ๋๋งํ ๋ REST API๋ ๋ฐ์ดํฐ๋ง์ ๋ฐํํ์ฌ ํจ์จ์ ์ผ๋ก ํต์ ํฉ๋๋ค.
์์
โข
๋ชจ๋ฐ์ผ ์ฑ: ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ API ์๋ฒ๋ฅผ ํตํด ๋ชจ๋ฐ์ผ ์ฑ๊ณผ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ .
โข
์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
(SPA): React, Vue ๊ฐ์ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ REST API ์๋ฒ์ ํต์ ํ์ฌ JSON ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋ง.
MVC Model1
MVC Model1์ Controller๊ฐ ์๋ ๊ตฌ์กฐ๋ก, JSP(๋๋ Servlet)์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ View๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์ ์๋ตํ๋ ๋ฐฉ์์
๋๋ค.
์ฃผ์ ์ค๋ช
MVC Model1์ JSP ํ์ด์ง์์ ์์ฒญ์ ๋ฐ์์ ์ง์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ HTML์ ์์ฑํ๋ ์ด๊ธฐ ํํ์ MVC ๊ตฌ์กฐ์
๋๋ค. Controller๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ๋ชจ๋ํ๊ฐ ์ด๋ ต๊ณ , ์ ์ง๋ณด์์ฑ์ด ๋ฎ์ต๋๋ค.
์์
โข
์ด๊ธฐ JSP ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ์์ฒญ์ด JSP๋ก ์ง์ ์ ๋ฌ๋๊ณ , JSP์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ทฐ๋ฅผ ๋์์ ๋ด๋น.
MVC Model2
MVC Model2๋ Controller๊ฐ ์ถ๊ฐ๋ MVC ๊ตฌ์กฐ๋ก, ์์ฒญ์ Controller์์ ์ฒ๋ฆฌํ ํ ์ ์ ํ View๋ฅผ ์ ํํ์ฌ ์๋ตํ๋ ๋ฐฉ์์
๋๋ค.
์ฃผ์ ์ค๋ช
MVC Model2๋ Model1์ ๋จ์ ์ ๋ณด์ํ ๊ตฌ์กฐ๋ก, JSP์์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํด Controller๊ฐ ์์ฒญ์ ๊ด๋ฆฌํ๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๊ฐ ๋ ๊น๋ํ๊ณ ๋ชจ๋ํ๋๋ฉฐ, ์ ์ง๋ณด์์ฑ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. ๋๋ถ๋ถ์ ํ๋ MVC ํจํด์ด Model2๋ฅผ ๋ฐ๋ฆ
๋๋ค.
์์
โข
Spring MVC ํ๋ ์์ํฌ:ย @Controller๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ๊ณ ํ์ํ ๋ฐ์ดํฐ๋ย Model์ ํตํด ์ฒ๋ฆฌํ ํย View๋ฅผ ์ ํํ์ฌ ์๋ต.
Spring Boot์์์ MVC
์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ฑํ๋ ์ธ ๊ฐ์ง ์ฃผ์ ์์(Model, View, Controller)๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฐ ์์๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ์ญํ ์ ์ํํ๊ฒ ํ๋ ์ํํธ์จ์ด ๋์์ธ ํจํด์
๋๋ค.
์ฃผ์ ์ค๋ช
Spring Boot๋ MVC ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌํํ๋ฉฐ,ย Controller์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ ,ย Model์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ,ย View์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ํ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋์์ง๊ณ , ๊ฐ ๊ตฌ์ฑ ์์์ ์ญํ ์ด ๋ช
ํํด์ง๋๋ค.
์์
โข
Controller: URL ์์ฒญ์ ๋ฐ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ Model์ View์ ์ ๋ฌ (@Controller,ย @GetMapping)
โข
Model: ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌ (@Service์์ ๋ก์ง,ย @Repository์์ ๋ฐ์ดํฐ ์ ๊ทผ)
โข
View: ์ฌ์ฉ์์๊ฒ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋ง (Thymeleafย ๋๋ย JSP)