๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์Šคํ”„๋ง Spring/๐Ÿงถ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ Spring

Spring MVC ๊ตฌ์กฐ์™€ ์ฒ˜๋ฆฌ๊ณผ์ •

by Meteora_ 2021. 4. 19.
728x90

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์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ Front Controller์— ์ „๋‹ฌ
  2. ์ „๋‹ฌ๋œ ์š”์ฒญ์€ ์ ์ ˆํ•œ Controller๋ฅผ ์ฐพ์•„ ํ˜ธ์ถœ
  3. Controller๋Š” ํ•ด๋‹น Service ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ํ˜ธ์ถœ
  4. Service๊ฐ์ฒด๋Š” DAO๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” Data๋ฅผ ์š”์ฒญ
  5. DAO๊ฐ์ฒด๋Š” MyBatis๋ฅผ ์ด์šฉํ•˜๋Š” Mapper๋ฅผ ํ†ตํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰(CRUD)
  6. Service๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ Controller์—๊ฒŒ ์ „๋‹ฌ
  7. 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 ์š”์ฒญ ๋ฌธ์ž์—ด์ด ๊ทธ๋Œ€๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ

๋Œ“๊ธ€