[10๋ถ ํ
์ฝํก] ๐๋ฒ๋ธ๋น์ MVC Pattern
์ด๋ค ๊ธฐ์ ์ ์ฌ์ฉํจ์ ์์ ๊ทธ ๊ธฐ์ ์ ์ ์ฐ๋ฆฌ๊ฐ ์ฐ๊ณ ์๋์ง ์์์ผ ๋๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋์ ์ฐ์ MVC ํจํด์ ์ญ์ฌ๋ฅผ ๋จผ์ ์์๋ณด๋๋ก ํ์.
์ญ์ฌ
MVC์ ํ์(1979)

MVC ํจํด์ ์ญ์ฌ๋ 1979๋
๋ฐ์คํฌํฑ ์น ์ดํ๋ฆฌ์ผ์ด์
์ด๋ผ๋ ๋ฐ์คํฌํฑ ์ดํ๋ฆฌ์ผ์ด์
์ ์ํด์ ๋์จ ์ค๊ณ.
- ๋น์์๋ ์ฌ๋์ ๋ฉํ ๋ชจ๋ธ๊ณผ ์ปดํจํฐ์ ๋ชจ๋ธ์ด ์ผ์นํ์ง ์๋ ์ฌ๋๊ณผ ์ปดํจํฐ ์ฌ์ด์ ์ด๋ค ๊ฐ๊ทน๋ค์ด ์์๋๋ฐ ๊ทธ๊ฑธ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋์จ ํจํด!
Small-Talk80 (1988)

Small-Talk80 ์ด๋ผ๋ ๋
ผ๋ฌธ์์ Model, View, Controller๊ฐ ์๋ ์ง๊ธ๊ณผ ์ ์ฌํ ํจํด์ด ๋ฐํ๋๋ค.
์ง๊ธ๊ณผ ๋ค๋ฅธ ์ ์ ๋ชจ๋ธ๊ณผ ๋ทฐ๊ฐ ๊ฒฐํฉ์ด ๋์ด ์๋ค๋ ์ ์ด ๋ค๋ฅด๋ค.
Cocoa MVC (Apple MVC)

์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๋ชจ์ต์ MVC ํจํด์ ์ ํ์์ ๋ฐํํ Cocoa MVC๋ผ๋ ํจํด์ด๋ค.
์ฝ์ฝ์๋ ios ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋
์ธ๋ฐ, ๊ทธ ios์ค๊ณ๋ฅผ ์ํด์ ์ ํ์ด ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ๋ถ๋ฆฌํ, ํ๋ ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ฅ ์น์ํ ์ง๊ธ์ MVC ํจํด์ ๋ฐํ
MVC ํจํด์ ํ๋ฆ

- ํด๋ผ์ด์ธํธ๊ฐ ํ์ํ ๊ธฐ๋ฅ์ ์ปจํธ๋กค๋ฌ์ ์์ฒญ
- ์ปจํธ๋กค๋ฌ๊ฐ ๋ชจ๋ธ์๊ฒ ๋น์ฆ๋์ค ๋ก์ง ์ํ์ ์์ฒญ
- ๋ชจ๋ธ์ด ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ
- ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ทฐ๋ฅผ ์ ํํ์ฌ ์ถ๋ ฅ
Model

- ๋ฐ์ดํฐ์ ํ๋์ ๊ฐ๋ ๊ฐ์ฒด.
- ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ณ ๋ฐ์ดํฐ์ ์ํ๋ฅผ ๋ณ๊ฒฝ.
- ์ปจํธ๋กค๋ฌ๋ ๋ค๋ฅธ ๋ชจ๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด ์๋ต์ ๋ฐํ.
- ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ.
์์
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
}
View

- ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ํ๋ ์ญํ ์ ๋ด๋น.
- ๋ชจ๋ธ์ด ์ฒ๋ฆฌํ ๋ฐ์ดํฐ๋ฅผ ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด ๋ฐ์์ ์ฌ์ฉ.
- ๋ทฐ์๋ ์ง์ ์ ์ธ ๋น์ฆ๋์ค ๋ก์ง์ด ํฌํจ๋์ง ์์์ผ ํจ.
- HTML, CSS, JavaScript, JSP, Thymeleaf ๋ฑ์ UI ํ๋ ์์ํฌ๋ฅผ ํ์ฉ.
์์
<h1>์ฌ์ฉ์ ์ ๋ณด</h1>
<p>์ด๋ฆ: ${user.name}</p>
<p>๋์ด: ${user.age}</p>
Controller

- ์ฌ์ฉ์์ ์์ฒญ์ ํด์ํ์ฌ ์ ์ ํ ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์ฐ๊ฒฐ.
- ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ๋์จํ๊ฒ ๊ฒฐํฉํ์ฌ ์ ์ง๋ณด์์ฑ์ ๋์.
- ์ ์ผํ๊ฒ ๋ค๋ฅธ ๋ชจ๋ ์ปดํฌ๋ํธ์ ์กด์ฌ๋ฅผ ์๊ณ ์์ผ๋ฉฐ ๋ฐ์ดํฐ ํ๋ฆ์ ์ ์ดํ๋ค.
์ ์ฌ์ฉํ ๊น?
1. ๋๋ฉ์ธ์ ์ฌ์ฌ์ฉ์ฑ
- ๋น์ฆ๋์ค ๋ก์ง์ ๋ชจ๋ธ์ ์ง์ค์ํค๊ณ , UI(View)๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ์ค๊ณํ ์ ์์.
- ์๋ฅผ ๋ค์ด, ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์น ์ ํ๋ฆฌ์ผ์ด์
๋ฟ๋ง ์๋๋ผ ๋ชจ๋ฐ์ผ, ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ฌ์ฌ์ฉํ ์ ์๋ค.
2. ํ์ฅ์ฑ ์ฆ๊ฐ
- ๋ชจ๋ธ, ๋ทฐ, ์ปจํธ๋กค๋ฌ๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ๋ฏ๋ก ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋ค.
- ํ๋์ ๋ ์ด์ด(Model, View, Controller)๋ง ์์ ํด๋ ์ ์ฒด ์์คํ
์ ์ํฅ์ ์ต์ํํ ์ ์์.
3. ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ
- ๋ฐ์ดํฐ์ ํ๋ฆ์ด ์ ๋ฆฌ๋๋ฉด์ ์ค๋ณต๋๋ ์ฝ๋๊ฐ ์ค์ด๋ค๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง.
- View์ Model์ ๋ถ๋ฆฌํจ์ผ๋ก์จ UI์ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ค์์ด๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ค.
MVC ํจํด์ ํ๊ณ
1. ์ปจํธ๋กค๋ฌ๊ฐ ๋น๋ํด์ง
- ์ปจํธ๋กค๋ฌ๊ฐ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ์ ์ ๋ฌด๊ฑฐ์์ง ์ ์๋ค.
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Service Layer(์๋น์ค ๋ ์ด์ด)๋ฅผ ์ถ๊ฐํ์ฌ ์ปจํธ๋กค๋ฌ์ ์ญํ ์ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ๋ง์ด ์ฌ์ฉ๋จ.
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ์ ์ ๋งคํจ
- MVC์์ ๋ชจ๋ธ์ด ์ง์ DB์ ์ ๊ทผํ๋ ๊ฒ์ด ๋ง๋์ง, ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด ์ ๊ทผํด์ผ ํ๋์ง ์ ๋งคํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ํ๋์ ์ธ ๊ฐ๋ฐ์์๋ Service Layer์ Repository ํจํด์ ์ถ๊ฐํ์ฌ ์ญํ ์ ๋ช
ํํ ๋๋.
ํ๋์ ์ธ MVC ํจํด์ ๊ฐ์ (Service Layer ์ถ๊ฐ)
๊ธฐ๋ณธ MVC ํจํด๋ง ์ฌ์ฉํ๋ฉด ์ปจํธ๋กค๋ฌ๊ฐ ์ ์ ๋ฌด๊ฑฐ์์ง๊ณ , ์ฝ๋์ ์ค๋ณต์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๋์ ์ธ MVC ํจํด์์๋ 5๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๊ฐ์ ๋ mvc ๊ตฌ์กฐ๋ Client โ Controller โ Service โ Repository โ Database
- Controller: ์ฌ์ฉ์ ์์ฒญ์ ํด์ํ์ฌ Service ํธ์ถ.
- Service: ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌ.
- Repository: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ.