๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Basics/Concepts

Spring MVC : ๊ฐœ๋…, ์ฒ˜๋ฆฌ ๊ณผ์ •(ํ๋ฆ„), ํŠน์ง•

by IworldT 2020. 11. 9.
๋ฐ˜์‘ํ˜•

Spring MVC์˜ ๊ฐœ๋…๊ณผ Model, View, Controller, Dispatcher Servlet, Handler Mapping ๋“ฑ์˜ ํด๋ž˜์Šค์™€ ๊ทธ ์—ญํ• ๋“ค์— ๋Œ€ํ•˜์—ฌ ํฌ์ŠคํŒ…ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

 ํ˜„์žฌ ์›นํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ๋ฅผ ์ˆ˜๊ฐ•์ค‘์ธ๋ฐ, ๊ฐ•์˜ํ•˜์‹œ๋Š” ๊ต์ˆ˜๋‹˜๊ป˜์„œ ๋งค ์ฃผ ์ˆ˜์—…๋งˆ๋‹ค ํ•ญ์ƒ ๋‚˜๋ฅผ ์ผ๊นจ์›Œ์ฃผ๋Š” ๋ง์”€์„ ํ•˜๋‚˜์”ฉ ํ•ด์ฃผ์‹ ๋‹ค. ๊ต์ˆ˜๋‹˜๊ป˜์„œ, ์ Š์Œ์˜ ๊ฐ€์žฅ ์ข‹์€ ์ ์€ ๊ธฐํšŒ๊ฐ€ ๋งŽ์€ ๊ฒƒ์ด๋ผ๊ณ  ํ•˜์…จ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ์ Š์Œ์˜ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ๋‘๋ ค์›€์ด ๋งŽ์€ ๊ฒƒ์ด๋ผ๊ณ  ํ•˜์…จ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋”์šฑ๋” ์ž๊ธฐ ์ž์‹ ์˜ ํ•œ๊ณ„๋ฅผ ์ •ํ•ด๋†“์ง€ ๋ง๋ผ๊ณ  ํ•˜์…จ๋‹ค. ๋ฌด์ฒ™ ๊ฐ๋ช…๊นŠ์€ ๋ง์ด์—ˆ๋‹ค.

๋ณธ๋ก ์œผ๋กœ ๋“ค์–ด๊ฐ€์ž!

Spring MVC์˜ ๊ฐœ๋…

์›น ๊ฐœ๋ฐœ ์‹œ์— data ๋กœ์ง๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.

Model์€ data๋ถ€๋ถ„, View๋Š” ๋ง ๊ทธ๋Œ€๋กœ ํ™”๋ฉด์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ๊ฒƒ์„ ํŽ˜์ด์ง€์— ๋ณด์—ฌ์ฃผ๊ณ , Controller๋Š” ์š”์ฒญ์„ ๋ฐ›์•„ View์™€ Model์‚ฌ์ด์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด์„œ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

Spring MVC์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ(ํ๋ฆ„)

Spring MVC

Model, View, Controller๊ฐ€ ๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค๋กœ ํ‘œ์‹œ๋˜์–ด์žˆ๋Š”๋ฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•  ์ผ์€ ์ด๊ฒƒ ๋ฟ์ด๋ผ๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. ์šฐ์„  ํ•˜๋‚˜์”ฉ ํด๋ž˜์Šค๋ฅผ ์‚ดํŽด๋ณด์ž. ๋˜ํ•œ ์„ค๋ช… ์ˆœ์„œ๊ฐ€ MVC์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์ด๋‹ค.

Dispatcher Servlet(=Front Controller)

๋ชจ๋“  ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๋ฐ›๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ด๋‹ค. ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก web.xml์—์„œ url์„ /๋กœ ์„ค์ •ํ•œ๋‹ค. ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›๊ฒ ๋‹ค๋Š” ๋œป์ด๋‹ค. ์š”์ฒญ์„ ๋ฐ›์•„ HandlerMappingํด๋ž˜์Šค๋กœ ๋ณด๋‚ธ๋‹ค. 

HandlerMapping

์‚ฌ์šฉ์ž์˜ ์š”์ฒญ(URL)๋งˆ๋‹ค ์•Œ๋งž์€ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งคํ•‘ํ•ด์ค€๋‹ค. ์ด ๋งคํ•‘์€ ๊ฐœ๋ฐœ์ž๊ฐ€ @RequestMapping์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด์„œ ์„ค์ •ํ•ด๋‘๊ฑฐ๋‚˜, XML ํŒŒ์ผ๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค. HandlerMapping ๊ฐ์ฒด์— ๋งคํ•‘์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ๋‹ด์•„๋‘์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋งคํ•‘๋œ ์ปจํŠธ๋กค๋Ÿฌ ์ •๋ณด๋ฅผ Dispatcher Servlet์—๊ฒŒ ์ „๋‹ฌํ•ด์ค€๋‹ค.

Controller

์š”์ฒญ์ด ์•Œ๋งž์€ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌ์ด ๋˜์—ˆ์œผ๋ฉด, ์ด ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋กœ์ง, ์ฆ‰ ์„œ๋น„์Šค๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ DAO๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ DB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ Model๊ฐ์ฒด์— ๋‹ด๋Š”๋‹ค. ์ดํ›„, ์ด Model์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” View๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๊ทธ ์ด๋ฆ„๊ณผ Model์„ ํ•จ๊ป˜  DispatcherServlet์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

ViewResolver

View๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. DispatcherServlet์ด Controller์—๊ฒŒ ๋ฐ›์€ View๋ฅผ ํƒ์ƒ‰ํ•ด๋‹ฌ๋ผ๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ํ•ด๋‹น View์˜ ์ •๋ณด๋ฅผ ๊ฐ์ฒด๋กœ ๋„˜๊ฒจ์ค€๋‹ค.

View

Dispatcher์—๊ฒŒ ๋ฐ›์€ ์š”์ฒญ(์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ๋ฌผ)์„ ์‘๋‹ตํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ๋ Œ๋”๋งํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. UIUX๊ฐ€ ์ ์šฉ๋˜๋Š” ๋ถ€๋ถ„์œผ๋กœ, HTML, JSP๋“ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ DispatcherServlet์—๊ฒŒ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์„ ์ „์†กํ•˜๊ฒŒ ๋˜๊ณ , ์ „๋‹ฌ๋ฐ›์€ View๋ฅผ Dispatcher๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Spring MVC์˜ ํŠน์ง•

  • DispatcherServlet์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜์˜ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
  • Front Controller Pattern๊ณผ Command Pattern์ด ์ ์šฉ๋˜์–ด ์žˆ๋‹ค.
  • Spring์˜ ๋‹ค๋ฅธ ํŠน์ง•์ธ DI(์˜์กด์„ฑ์ฃผ์ž…), AOP(๊ด€์ ์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ)์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ชจ๋“  ์ฒ˜๋ฆฌ๊ณผ์ •์„ JSP๊ฐ€ ๋‹ด๋‹นํ•˜๋˜ Model1๋ฐฉ์‹์ด ์•„๋‹Œ Model2๋ฐฉ์‹์ด๋‹ค.

 

๋!

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€