Spring MVC ๊ตฌ์กฐ
๋ณธ ํฌ์คํ ์ ์ฝ๋๋ก ๋ฐฐ์ฐ๋์คํ๋ง ์นํ๋ก์ ํธ๋ฅผ ์ฐธ์กฐํ์ฌ ์์ฑํ ๋ด์ฉ์ ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ํ์ตํ ๋ด์ฉ์ ๋ณต์ตํ๊ธฐ ์ํ ๋ด์ฉ์ด๊ธฐ ๋๋ฌธ์ ๋ด์ฉ์ ์ค๋ฅ๊ฐ ์์ ์ ์์ต๋๋ค. ๊ธฐ์กด์ Spring MVC ๊ด๋ จ ํฌ์คํ ๋ค์ด ์ ๋๋ก ์ ๋ฆฌ๋์ง ์์ ๊ฒ ๊ฐ์ ์ฒ์๋ถํฐ ์ฐจ๋ถํ ์ ๋ฆฌํ๋ฉด์ ํฌ์คํ ์ ์งํํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณธ ํฌ์คํ ์ ์์ ๋ STS ๋๋ Eclipse๋ฅผ ์ฌ์ฉํ์ง ์๊ณ IntelliJ๋ฅผ ํตํด ๊ตฌํํ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ๊ธฐ์กด์ STS์์ ์์ฑ๋ Spring ํ๋ก์ ํธ์ ์คํ๋ง๊ด๋ จ ์ค์ ํ์ผ๋ช ๊ณผ ํ๋ก์ ํธ ๊ตฌ์กฐ๊ฐ ์ฝ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. IntelliJ๋ฅผ ํตํ Spring MVC ํ๋ก์ ํธ ์์ฑ ํฌ์คํ ์ ์ฐธ๊ณ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
ํฌ์คํ ํ๊ณ ์๋ ํ์ฌ ํ๋ก์ ํธ์ ์์ ๊ฐ ํน์ ํ์ํ์ ๋ถ์ github(https://github.com/walbatrossw/spring-mvc-ex)๋ฅผ ํตํด ์ป์ผ์ค ์ ์์ต๋๋ค.
1. Model 2
Model 2 ๋ฐฉ์์ ํํ MVC๊ตฌ์กฐ๋ฅผ ์์ฉํ ๋ฐฉ์์ผ๋ก ํ๋ฉด๊ณผ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํด์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ตฌ์กฐ ๋ผ๊ณ ํ ์ ์๋ค.
- Model : ๋ฐ์ดํฐ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ญ์ ์๋ฏธ
- View : ๊ฒฐ๊ณผ ํ๋ฉด์ ๋ง๋ค์ด ๋ด๋ ๋ฐ ์ฌ์ฉํ๋ ์์์ ์๋ฏธ
- Controller : ์น์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์กด์ฌ๋ก View์ Model์ฌ์ด์ ์ค๊ฐ ํต์ ์ญํ ์ ์ํ
๊ฐ๋ฐ์์ ์นํผ๋ธ๋ฆฌ์ ์ ์์ญ์ ๋ถ๋ฆฌํ ์ ์๊ณ , Controller์ URI๋ฅผ ํตํด View๋ฅผ ์ ์ดํ๊ธฐ ๋๋ฌธ์ View์ ๊ต์ฒด๋ ๋ณ๊ฒฝ๊ณผ ๊ฐ์ ์ ์ง๋ณด์ ์ฌ์ฉ๋๋ค.
2. Front Controller ํจํด
์ ์ฒด ๋ก์ง์ ์ผ๋ถ๋ง์ Controller๊ฐ ์ฒ๋ฆฌํ๋๋ก ๋ณ๊ฒฝ ๋์๋ค. ์ด๊ฒ์ ์์(Delegation)์ด๋ผ๊ณ ํ๋๋ฐ ์ ์ฒด ๋ก์ง์ ์ผ๋ถ๋ฅผ Controller์๊ฒ ์์ํ๊ณ , ๋ชจ๋ ํ๋ฆ์ ์ ์ด๋ ์ ์ชฝ์ Front Controller๊ฐ ๋ด๋น ํ๊ฒ ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ ๊ฐ๋ฐ์๊ฐ ์์ฑํ๋ Controller๋ ์ ์ฒด ๋ก์ง์ ์ผ๋ถ๋ถ๋ง์ ์ฒ๋ฆฌํ๋ ํํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์์ฑํด์ผํ๋ ์ ์ฒด ์ฝ๋๋ ์ค์ด๋ค๊ฒ ๋๋ค.
3. Spirng MVC ๊ตฌ์กฐ
# Spring MVC์ ์์ฒญ์ ๋ํ ํ๋ฆ

- ์ฌ์ฉ์์ ์์ฒญ์ Front Controller์ ์ ๋ฌ
- ์ ๋ฌ๋ ์์ฒญ์ ์ ์ ํ Controller๋ฅผ ์ฐพ์ ํธ์ถ
- Controller๋ ํด๋น Service ๊ฐ์ฒด๋ฅผ ์ฐพ์ ํธ์ถ
- Service๊ฐ์ฒด๋ DAO๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์ํ๋ Data๋ฅผ ์์ฒญ
- DAO๊ฐ์ฒด๋ MyBatis๋ฅผ ์ด์ฉํ๋ Mapper๋ฅผ ํตํด ์์ ์ ์ํ(CRUD)
- Service๋ฅผ ํตํด ์ฒ๋ฆฌํ ๋ฐ์ดํฐ๋ฅผ Controller์๊ฒ ์ ๋ฌ
- Controller๋ ๋ค์ ์คํ๋ง MVC์ชฝ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ
# SpringMVC VS, ๊ฐ๋ฐ์
SpringMVC๊ฐ ์ฒ๋ฆฌํ๋ ์์ ๊ฐ๋ฐ์๊ฐ ์ง์ ํด์ผํ๋ ์์
URI๋ฅผ ๋ถ์ํด์ ์ ์ ํ Controller๋ฅผ ์ฐพ๋ ์์ | ํน์ URI์ ๋์ํ๋ Controller๋ฅผ ์ค๊ณํ๋ ์์ |
Controller์ ํ์ํ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์์ | Service / DAO ๊ฐ์ฒด ์์ฑ |
Controller์ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ View๋ก ์ ๋ฌํ๋ ์์ | Controller ๋ด์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์๋๋ก ์ค๊ณ |
์ ์ ํ View๋ฅผ ์ฐพ๋ ์์ | View์์ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ์ ์ถ๋ ฅ |
4. Spring MVC ์ฃผ์ ์ ๋ํ ์ด์
์ ๋ํ ์ด์ ๊ธฐ๋ฅ
@Controller | Controller ๊ฐ์ฒด์์ ๋ช ์ |
@Repository | DAO ๊ฐ์ฑ์์ ๋ช ์ |
@Service | Service ๊ฐ์ฒด์์ ๋ช ์ |
@RequestMapping | ํน์ URI์ ๋งค์นญ๋๋ ํด๋์ค๋, ๋ฉ์๋์์ ๋ช ์ |
@RequestParam | ์์ฒญ์์ ํน์ ํ ํ๋ผ๋ฏธํฐ ๊ฐ์ ์ฐพ์๋ผ ๋ ์ฌ์ฉ |
@RequestHeader | ์์ฒญ์์ ํน์ HTTP ํค๋ ์ ๋ณด๋ฅผ ์ถ์ถํ ๋ ์ฌ์ฉ |
@PathVariable | ํ์ฌ์ URI์์ ์ํ๋ ์ ๋ณด๋ฅผ ์ถ์ถํ ๋ ์ฌ์ฉ |
@CookieValue | ํ์ฌ ์ฌ์ฉ์์ ์ฟ ํค๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ฟ ํค์ ์ด๋ฆ์ ์ด์ฉํด์ ์ฟ ํค ๊ฐ์ ์ถ์ถ |
@ModelAttribute | ์๋์ผ๋ก ํด๋น ๊ฐ์ฒด๋ฅผ ๋ทฐ๊น์ง ์ ๋ฌํ๋๋ก ๋ง๋๋ ์ ๋ํ ์ด์ |
@SessionAttribute | ์ธ์ ์์์ ๋ชจ๋ธ์ ์ ๋ณด๋ฅผ ์ ์งํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉ |
@InitBinder | ํ๋ผ๋ฏธํฐ๋ฅผ ์์งํด์ ๊ฐ์ฒด๋ก ๋ง๋ค ๊ฒฝ์ฐ |
@ResponseBody | ๋ฆฌํดํ์ ์ด HTTP์ ์๋ต๋ฉ์์ง๋ก ์ ์ก |
@RequestBody | ์์ฒญ ๋ฌธ์์ด์ด ๊ทธ๋๋ก ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ |
'์คํ๋ง Spring > ๐งถ ์คํ๋ง ํ๋ ์์ํฌ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ํ๋ ์์ํฌ - ๋ก๊ทธ (Log4j) ๋ฐ ์ธํฐ์ ํฐ (Interceptor) ์ค์ ๋ฒ (0) | 2021.04.27 |
---|---|
์คํ๋ง ํ๋ ์์ํฌ - ๊ฐ ๋๊ธฐ๊ธฐ ๊ธฐ๋ณธ (0) | 2021.04.19 |
์คํ๋ง ํ๋ ์์ํฌ - Model ๊ฐ์ฒด (0) | 2021.04.19 |
์คํ๋ง ํ๋ ์์ํฌ - ์ด๊ธฐ ์ธํ , ๊ฐ๋ฐ ํ๊ฒฝ์ค์ (0) | 2021.04.19 |
Spring Framework์ ๊ฐ๋ ๊ณผ ๊ตฌ์กฐ (0) | 2021.04.19 |
๋๊ธ