๐ก
1. MVC ํจํด์ด๋?
2. ๋ ์ด์ด๋ ์ํคํ ์ฒ๋?
1. MVC ํจํด (Model-View-Controller)
MVC ํจํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ์ธ ๊ฐ์ง ์ญํ ๋ก ๋ถ๋ฆฌํ๋ ๊ตฌ์กฐ์ ๋๋ค:
- Model (๋ชจ๋ธ): ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํฉ๋๋ค.
- View (๋ทฐ): ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ค๋๋ค.
- Controller (์ปจํธ๋กค๋ฌ): ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ๋ชจ๋ธ์ ํตํด ์ฒ๋ฆฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ทฐ์ ์ ๋ฌํฉ๋๋ค.
์ด ํจํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ UI ๋ก์ง๊ณผ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ก์ง์ ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ , ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํฉ๋๋ค.
2. ๋ ์ด์ด๋ ์ํคํ ์ฒ (๊ณ์ธต ๊ตฌ์กฐ)
๋ ์ด์ด๋ ์ํคํ ์ฒ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ ๊ฐ์ง ์ฃผ์ ๊ณ์ธต์ผ๋ก ๋๋์ด ๊ฐ๊ฐ์ ์ฑ ์์ ๋ช ํํ ํ๋ ๊ตฌ์กฐ๋ฅผ ๋งํฉ๋๋ค.
- ํ๋ ์ ํ
์ด์
๊ณ์ธต (Presentation Layer):
- ์ญํ : ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ ๊ณ์ธต์ผ๋ก, HTTP ์์ฒญ์ ๋ฐ์ ์ด๋ฅผ ๋น์ฆ๋์ค ๊ณ์ธต์ผ๋ก ์ ๋ฌํ๊ณ , ๋น์ฆ๋์ค ๊ณ์ธต์์ ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ ์ญํ ์ ํฉ๋๋ค.
- ๊ตฌ์ฑ ์์: ์ด ๊ณ์ธต์๋ View์ Controller๊ฐ ์ํ๋ฉฐ, ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌํ๊ณ , ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๊ฑฐ๋ API ์๋ต์ผ๋ก ๋ฐํํฉ๋๋ค.
- ๋น์ฆ๋์ค ๊ณ์ธต (Business Layer):
- ์ญํ : ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ณ์ธต์ผ๋ก, ์๋น์ค์ ํต์ฌ ๊ท์น๊ณผ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฃผ๋ฌธ ์๋น์ค์์ ์ฃผ๋ฌธ ๊ฐ์ ๊ณ์ฐ, ๊ฐ๊ฒฉ ์ฒ๋ฆฌ, ์์ธ ์ฒ๋ฆฌ, ์ฃผ๋ฌธ ์ทจ์ ๋ฑ์ ๋ก์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ตฌ์ฑ ์์: ์ด ๊ณ์ธต์์๋ ์ฃผ๋ก ์๋น์ค ํด๋์ค๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ฉฐ, ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ ์ดํฉ๋๋ค. ๋ํ, MVC ํจํด์ Model์ด ์ด ๊ณ์ธต์ ํฌํจ๋์ด, ๋น์ฆ๋์ค ๋ก์ง์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ํผ์์คํด์ค ๊ณ์ธต๊ณผ ์ํธ์์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํฉ๋๋ค.
- ํผ์์คํด์ค ๊ณ์ธต (Persistence Layer):
- ์ญํ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ๋ ๊ณ์ธต์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๋ก์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ตฌ์ฑ ์์: ์ด ๊ณ์ธต์์๋ DAO(Data Access Object) ๊ฐ์ฒด๋ Repository๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ํธ์์ฉํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ์ค๋ ์ญํ ์ ํฉ๋๋ค.
์คํ๋ง ๋ถํธ ๋ํ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
main
์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ณต๊ฐ์ ๋๋ค. ํ๋ก์ ํธ ์คํ์ ํ์ํ ๋ชจ๋ ์์ค ์ฝ๋์ ๋ฆฌ์์ค ํ์ผ์ด ์ด ํด๋ ์์ ์์นํฉ๋๋ค.
๊ตฌ์ฑ ์์
- java: ์๋ฐ ์์ค ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ ๋๋ ํ ๋ฆฌ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํจํค์ง ๊ตฌ์กฐ์ ๋ง๊ฒ ํด๋์ค ํ์ผ๋ค์ด ์ด๊ณณ์ ์์นํฉ๋๋ค.
- resources: ๋ฆฌ์์ค ํ์ผ(์: ์ค์ ํ์ผ, HTML, CSS, ์ด๋ฏธ์ง ๋ฑ)์ด ์์นํ๋ ๋๋ ํ ๋ฆฌ์ ๋๋ค. ์ฃผ๋ก application.properties ๋๋ application.yml ๊ฐ์ ์ค์ ํ์ผ, ํ ํ๋ฆฟ ์์ง ํ์ผ(์: Thymeleaf ํ ํ๋ฆฟ) ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
test
- ํ๋ก์ ํธ์ ์์ค ์ฝ๋๋ฅผ ํ ์คํธํ ๋ชฉ์ ์ ์ฝ๋๋ ๋ฆฌ์์ค ํ์ผ์ด ๋ค์ด ์์ต๋๋ค. ์ด ํด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ๊ฒ์ฆํ๊ณ , ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ์ํ ํ ์คํธ ์ฝ๋๋ฅผ ํฌํจํฉ๋๋ค.
- ๊ตฌ์ฑ ์์:
- java: ํ ์คํธ๋ฅผ ์ํ ์๋ฐ ์์ค ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ ๋๋ ํ ๋ฆฌ์ ๋๋ค. main/java ์ ๋น์ทํ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ฉฐ, ๊ฐ ๊ธฐ๋ฅ์ ๋ํ ๋จ์ ํ ์คํธ ๋ฐ ํตํฉ ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
- resources: ํ ์คํธ ์ ํ์ํ ๋ฆฌ์์ค ํ์ผ์ด ์์นํฉ๋๋ค. ํ ์คํธ ์ ์ฉ ์ค์ ํ์ผ์ด๋ ๋ชจ์ ๋ฐ์ดํฐ ํ์ผ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
build.gradle
- ๋น๋ ์ค์ ํ์ผ๋ก, Gradle์ ์ฌ์ฉํ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํ์ผ์์ ํ๋ก์ ํธ์ ์์กด์ฑ, ํ๋ฌ๊ทธ์ธ ์ค์ , ๋น๋ ์คํฌ๋ฆฝํธ ๋ฑ์ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์คํ๋ง ๋ถํธ ์คํํฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ผ์ด๋ฒ, ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์์กด์ฑ์ผ๋ก ์ถ๊ฐํ ์ ์์ต๋๋ค.plugins: ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ํ๋ฌ๊ทธ์ธ์ ์ ์ธํ๋ ๋ถ๋ถ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์คํ๋ง ๋ถํธ ํ๋ฌ๊ทธ์ธ ๋ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- dependencies: ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ์ ์ ์ธํ๋ ๋ถ๋ถ์ ๋๋ค.
settings.gradle
- Gradle ํ๋ก์ ํธ์ ์ค์ ํ์ผ์ ๋๋ค. ํ๋ก์ ํธ์ ์ด๋ฆ์ ์ค์ ํ๊ณ , ํ์ ๋ชจ๋(์๋ธํ๋ก์ ํธ)์ด ์๋ ๊ฒฝ์ฐ ์ด๋ค์ ํฌํจ์ํค๋ ์ญํ ์ ํฉ๋๋ค. ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑ๋ ๋ฉํฐ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๊ฐ ๋ชจ๋์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ถ๊ฐ ์ ๋ณด:
- rootProject.name: ํ๋ก์ ํธ์ ๋ฃจํธ ์ด๋ฆ์ ์ ์ํฉ๋๋ค. ์) rootProject.name = 'my-spring-boot-app'
- include: ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ์์ ํ์ ํ๋ก์ ํธ๋ฅผ ํฌํจ์ํค๋ ์ค์ ์ ๋๋ค.
์ฐ์ต ๋ฌธ์
๋ฌธ์ 1)
MVC ํจํด์์ Model์ด ๋ด๋นํ๋ ์ญํ ์ ๋ฌด์์ ๋๊น?
- ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ์ญํ
- ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌํ๋ ์ญํ
- ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํ๋ ์ญํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ญํ
๋ฌธ์ 2)
๋ ์ด์ด๋ ์ํคํ ์ฒ์์ ๋น์ฆ๋์ค ๊ณ์ธต์ ์ฃผ์ ์ญํ ์ ๋ฌด์์ ๋๊น?
- ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ ์ญํ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ญํ
- ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ํํํ๋ ์ญํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ญํ
๋ฌธ์ 3)
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ์ main ๋๋ ํ ๋ฆฌ์์ ์๋ฐ ์์ค ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ ๋๋ ํ ๋ฆฌ์ ์ด๋ฆ์ ๋ฌด์์ ๋๊น?
- bin
- src
- java
- resources
๋ฌธ์ 4)
Gradle ํ๋ก์ ํธ์ settings.gradle ํ์ผ์์ ์ค์ ํ ์ ์๋ ๋ด์ฉ์ ๋ฌด์์ ๋๊น?
- ํ๋ก์ ํธ์ ๋ฃจํธ ์ด๋ฆ๊ณผ ํ์ ๋ชจ๋ ํฌํจ
- ํ ์คํธ ํ์ผ๊ณผ ๋ฆฌ์์ค ํ์ผ ์ค์
- ์ ํ๋ฆฌ์ผ์ด์ ์ HTTP ์์ฒญ ์ฒ๋ฆฌ ๋ฐฉ์
- ํ๋ก์ ํธ์ ์์กด์ฑ ๊ด๋ฆฌ
๋ฌธ์ 5)
build.gradle ํ์ผ์์ ์ค์ ํ ์ ์๋ ํญ๋ชฉ์ ๋ฌด์์ ๋๊น?
- ํ๋ก์ ํธ ์์กด์ฑ
- ํ๋ฌ๊ทธ์ธ ์ค์
- ๋น๋ ์คํฌ๋ฆฝํธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ
๋ต: 1-3, 2-2, 3-3, 4-1, 5-4