[Etc] ๐ค Layered Architecture & MVC pattern
๋ ์ด์ด๋ ์ํคํ ์ณ์ MVC ํจํด์ ๋ํด ์์๋ณด์.
- ๋ ์ด์ด๋ ์ํคํ ์ณ(Layered Architecture)๋?
- MVC๋?
- ๋ ์ด์ด๋ ์ํคํ ์ณ์ MVC๋ฅผ ํจ๊ป ์ฌ์ฉ
๋ ์ด์ด๋ ์ํคํ ์ณ(Layered Architecture)๋?
- ์ฌ๋ฌ ์ํ ๋ ์ด์ด๊ฐ ์์ง์ ์ผ๋ก ์์ธ ๊ตฌ์กฐ (์์ ๋ ์ด์ด์์ ํ์ ๋ ์ด์ด๋ก ๋จ๋ฐฉํฅ ์์กด์ฑ)
๊ฐ ๊ณ์ธต์ด ๋ช ํํ ์ญํ ์ ๊ฐ์ง๋ฉฐ, ํ์ ๊ณ์ธต๋ง ์ ๊ทผํ ์ ์๋๋ก ์ค๊ณํ์ฌ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ด๋ ๊ฒ์ด ๋ชฉ์
Presentation Layer (ํ๋ ์ ํ ์ด์ ๊ณ์ธต) : 1์ธต๋ก๋น, ๋ฐฉ๋ฌธ๊ฐ ๋ง์ดํ๊ณ ์๋ด
์์: Spring Boot์
Controller
- ์ฌ์ฉ์์ ์ง์ ์ํธ์์ฉํ๋ ๊ณ์ธต (์: ์น UI, API ์ปจํธ๋กค๋ฌ)
- ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ํธ์ถํ๊ณ , ์๋ต์ ๋ฐํ
- Business Logic Layer (๋น์ฆ๋์ค ๋ก์ง ๊ณ์ธต) : ์ค์ ํ์ฌ ์
๋ฌด ์ค๊ณ ๋ฐ ๊ท์น ์๋ฆฝ
์์: Spring Boot์
Service
- ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ณ์ธต
- ๋๋ฉ์ธ ๊ท์น์ ์ ์ฉํ์ฌ ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ฐ ๊ฐ๊ณต ์ํ
- Data Access Layer (๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต) : ๋น์ฆ๋์ค ๋ ์ด์ด์ ๋ช
๋ น ์คํ
์์: Spring Boot์
Repository
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ํธ์์ฉํ๋ ๊ณ์ธต
- DAO(Repository)๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ๋ ์ญํ
- Database Layer (๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ธต) : ํ์ํ ์ ๋ณด ์ ์ฅ ๋ฐ ๊ฒ์
- ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฌผ๋ฆฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค (MySQL, PostgreSQL ๋ฑ)
- ๋ฐ์ดํฐ ํ๋ฆ
- ์์ฒญ โ ์ปจํธ๋กค๋ฌ โ ์๋น์ค โ ๋ ํฌ์งํ ๋ฆฌ
- ์ฌ์ฉ ์ด์
- ๋ชจ๋ํ: ๊ฐ ๋ ์ด์ด๊ฐ ๋ ๋ฆฝ์ ์ด๋ผ ๋ณ๊ฒฝ ์ฌํญ์ด ์ํฅ์ ์ต์ํ
- ์ ์ง๋ณด์์ฑ: ๋น์ฆ๋์ค ๋ก์ง(Service)๊ณผ DB ์ ๊ทผ(Repository)์ ๋ถ๋ฆฌ
- ํ ์คํธ ์ฉ์ด: ๋จ์ ํ ์คํธ ์์ฑ์ด ์ฌ์ (ex: Service ๋ ์ด์ด๋ง Mock ํ ์คํธ ๊ฐ๋ฅ)
๋ ์ด์ด ๊ฐ ๊ด๊ณ
[ํด๋ผ์ด์ธํธ]
โ
[Presentation Layer] โ Controller
โ
[Business Logic Layer] โ Service
โ
[Data Access Layer] โ Repository (DAO)
โ
[Database Layer] โ DB (MySQL, PostgreSQL)
- ์์ ๊ณ์ธต(Presentation)์ ํ์ ๊ณ์ธต(Business Logic)๋ง ํธ์ถํ ์ ์์.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๋ก์ง์ด ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌ๋์ด ์ ์ง๋ณด์๊ฐ ์ฌ์.
MVC๋?
- Model-View-Controller
- Model : ์๋ฆฌ์ฌ๊ฐ ์ค์ ์์์ ์ค๋นํ๊ณ ๋ง๋๋ ์์
- View : ์์์ ํ๋ ์ดํ
- Controller : ๊ณ ๊ฐ์ ์ฃผ๋ฌธ์ ๋ฐ๊ณ , ์๋ฆฌ์ฌ์๊ฒ ์ ๋ฌํ์ฌ ์์ฑ๋ ์๋ฆฌ๋ฅผ ํ ์ด๋ธ์ ์๋น (๋ฐฑ์๋)
- 3๊ฐ์ ์์๊ฐ ์ ๊ธฐ์ ์ผ๋ก ํ๋ ฅ
- ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋น์ฆ๋์ค ๋ก์ง ๋ถ๋ฆฌ
- ๋ฐ์ดํฐ ํ๋ฆ
- ์์ฒญ โ ์ปจํธ๋กค๋ฌ โ ๋ชจ๋ธ โ ๋ทฐ
- ์ฌ์ฉ ์ด์
- ์ญํ ๋ถ๋ฆฌ: View, Model, Controller๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ์ฌ ์ ์ง๋ณด์ ์ฉ์ด
- ์ ์ฐํ ํ์ฅ: UI ๋ณ๊ฒฝ(View)์ด๋ ๋น์ฆ๋์ค ๋ก์ง(Model)์ ๋ฐ๋ก ์์ ๊ฐ๋ฅ
- ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ: ๊ฐ์ Model์ ์ฌ๋ฌ View์์ ์ฌ์ฉ ๊ฐ๋ฅ
๋ ์ด์ด๋ ์ํคํ ์ณ์ MVC๋ฅผ ํจ๊ป ์ฌ์ฉ
- ๋์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ด ์ข์์ง๋ค.
- Controller๋ ์ต๋ํ ๊ฐ๋ณ๊ฒ (Thin Controller, Fat Service)
- ๋น์ฆ๋์ค ๋ก์ง์ Service Layer์์ ์ฒ๋ฆฌ (SRP ์์น ์ค์)
๋์ ํจ๊ป ์ฌ์ฉํ์ ๋ ๊ด๊ณ ํ๋ฆ (์์ฒญ โ ์๋ต)
- ์ฌ์ฉ์ (Client) ๊ฐ ์์ฒญ์ ๋ณด๋
- Controller (์ ๋ ฅ ์ฒ๋ฆฌ, ์์ฒญ ๋งคํ)
- Service (๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ)
- Repository (๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ)
- Service โ Controller ๋ก ์๋ต ๋ฐํ
- Controller โ View (๋๋ JSON)
- MVC๋ ์ญํ ์ ๋ถ๋ฆฌํ๊ณ , ๋ ์ด์ด๋ ์ํคํ ์ฒ๋ ๊ฐ ๊ณ์ธต์ ๋ ์ฒด๊ณ์ ์ผ๋ก ์กฐ์งํํ์ฌ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ธ๋ค