Spring MVC [1] Spring MVC ๊ฐœ๋… ๋ฐ ํ™˜๊ฒฝ์„ค์ •

2021. 11. 23. 16:11ใ†Spring

728x90

1. MVC (Model-View-Controller) ํŒจํ„ด 

MVC ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์œผ๋กœ MVC ํŒจํ„ด์˜ ์ฃผ ๋ชฉ์ ์€ 

business logic๊ณผ presentation logic์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

-> MVC ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ์˜ํ–ฅ์ด ์—†์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ํšจ์œจ์ ์ด๋‹ค. 

 

Model : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด (๋ฐ์ดํ„ฐ, business logic ํฌํ•จ)

View : ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•  ํ™”๋ฉด (Presentation logic)

Controller : Model ๊ณผ View ์‚ฌ์ด์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ด€๋ฆฌํ•œ๋‹ค. 

 

1๏ธโƒฃ Model ์ปดํฌ๋„ŒํŠธ 

: ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค) ์™€ ์—ฐ๋™ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋‚˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ผ์„ ํ•œ๋‹ค. 

์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์„ ํ•˜๋‚˜์˜ ์ž‘์—…์œผ๋กœ ๋ฌถ๋Š” ํŠธ๋žœ์žญ์…˜์„ ๋‹ค๋ฃจ๋Š” ์ผ๋„ ํ•œ๋‹ค.

-> DAO ํด๋ž˜์Šค์™€ Service ํด๋ž˜์Šค ํ•ด๋‹น 

 

2๏ธโƒฃ View ์ปดํฌ๋„ŒํŠธ 

: ๋ชจ๋ธ์ด ์ฒ˜๋ฆฌํ•œ ๋ฐ์ดํ„ฐ๋‚˜ ๊ทธ ์ž‘์—… ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ถœ๋ ฅํ•  ํ™”๋ฉด์„ ๋งŒ๋“œ๋Š” ์ผ์„ ํ•œ๋‹ค. 

-> HTML, JSP๋กœ ์ž‘์„ฑ ๊ฐ€๋Šฅ 

 

3๏ธโƒฃ Controller ์ปดํฌ๋„ŒํŠธ 

: ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•˜์„ ๋•Œ ๊ทธ ์š”์ฒญ์— ๋Œ€ํ•ด ์‹ค์ œ ์—…๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋ธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ผ์„ ํ•œ๋‹ค. 

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋ชจ๋ธ์„ ํ˜ธ์ถœํ•  ๋•Œ ์ „๋‹ฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํžˆ ๊ฐ€๊ณตํ•˜๋Š” ์ผ์„ ํ•œ๋‹ค. 

๋ชจ๋ธ์ด ์—…๋ฌด ์ˆ˜ํ–‰์„ ์™„๋ฃŒํ•˜๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ํ™”๋ฉด์„ ์ƒ์„ฑํ•˜๋„๋ก ๋ทฐ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. 

-> Servlet๊ณผ jsp๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

2. MVC Model1์™€ MVC Model2์˜ ์ฐจ์ด 

MVC Model1 ์€ controller ์—ญํ• ์„ jsp๊ฐ€ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

MVC Model2๋Š” Controller ์—ญํ• ์„ Servlet์ด ์ˆ˜ํ–‰ํ•œ๋‹ค. 

 

 

 

3. MVC Model2

1๏ธโƒฃ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ์š”์ฒญํ•˜๋ฉด, ์›น ์„œ๋ฒ„๊ฐ€ ๊ทธ ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(ํ†ฐ์บฃ์„œ๋ฒ„)์— ๋„˜๊ฒจ์ฃผ๊ณ , ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” url์„ ํ™•์ธํ•˜์—ฌ ๊ทธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์„œ๋ธ”๋ฆฟ์„ ์ฐพ์•„์„œ ์‹คํ–‰ํ•œ๋‹ค. 

 

2๏ธโƒฃ ์„œ๋ธ”๋ฆฟ์€ ์‹ค์ œ ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋ธ ์ž๋ฐ” ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

๋งŒ์•ฝ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ vo ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋ชจ๋ธ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ž ๊ฐ’์œผ๋กœ ๋„˜๊ธด๋‹ค. 

 

3๏ธโƒฃ ๋ชจ๋ธ ๊ฐ์ฒด๋Š” JDBC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ ๊ฐ’ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์™€์„œ VO ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ๋ณ€ํ™˜ํ•œ๋‹ค. 

 

4๏ธโƒฃ ์„œ๋ธ”๋ฆฟ์€ ๋ชจ๋ธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜ ๋ฐ›์€ ๊ฐ’์„ JSP์— ์ „๋‹ฌํ•œ๋‹ค. 

 

5๏ธโƒฃ JSP๋Š” ์„œ๋ธ”๋ฆฟ์œผ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ถœ๋ ฅํ•œ ๊ฒฐ๊ณผ ํ™”๋ฉด์„ ๋งŒ๋“ค๊ณ , ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ถœ๋ ฅํ•จ์œผ๋กœ์จ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒํ•œ๋‹ค. 

 

6๏ธโƒฃ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‘๋‹ต ๋‚ด์šฉ์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค. 

 

 

4. FrontController 

FrontController๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์„ ๋ฐ›์•„์„œ ๊ณตํ†ต์ ์ธ ์ž‘์—…์„ ๋จผ์ € ์ˆ˜ํ–‰ํ•œ๋‹ค. 

FrontController ํŒจํ„ด์€ ์ธ์ฆ์ด๋‚˜ ๊ถŒํ•œ ์ฒดํฌ์ฒ˜๋Ÿผ ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ๊ณตํ†ต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋กœ์ง์ด ์žˆ์„ ๊ฒฝ์šฐ ์ „์ฒด์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ค‘์•™ ์ง‘์ค‘์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค. 

 

5. Spring MVC

Spring MVC๋Š” Model2 ์•„ํ‚คํ…์ฒ˜์™€ FrontController ํŒจํ„ด์„ ํ”„๋ ˆ์ž„์›Œํฌ ์ฐจ์›์—์„œ ์ œ๊ณตํ•œ๋‹ค, 

Spring MVC์—์„œ๋Š” Frontcontroller ์—ญํ• ์„ ํ•˜๋Š” DispatcherServlet์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ณ„์ธต์˜ ๋งจ ์•ž๋‹จ์— ๋†“๊ณ , 

์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ๋‹ค. 

์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ์— ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋„ FrontController๊ฐ€ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

6. Spring MVC ๊ตฌ์„ฑ์š”์†Œ 

 

1๏ธโƒฃ DispatcherServlet โญโญ

: FrontController ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ web.xml์— ์„ค์ •ํ•œ๋‹ค. 

ํด๋ผ์ด์–ธํŠธ๋ถ€ํ„ฐ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์•„์„œ Controller์—๊ฒŒ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ณ , ๋ฆฌํ„ดํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ View์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ์•Œ๋งž์€ ์‘๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค. 

 

2๏ธโƒฃ HandlerMapping 

URL ๊ณผ ์š”์ฒญ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ค ํ•ธ๋“ค๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ์ฒด์ด๋ฉฐ, 

DispatcherSerlvet์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. 

 

3๏ธโƒฃ Controller

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ๋’ค, Model์„ ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ DispatcherServlet์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค. 

 

4๏ธโƒฃ ModelAndView

Controller ๊ฐ€ ์ฒ˜๋ฆฌํ•œ ๋ฐ์ดํ„ฐ ๋ฐ ํ™”๋ฉด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด์œ ํ•œ ๊ฐ์ฒด 

 

5๏ธโƒฃ View 

Controller์˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ํ™”๋ฉด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด์œ ํ•œ ๊ฐ์ฒด 

 

6๏ธโƒฃ ViewResolver 

Controller ๊ฐ€ ๋ฆฌํ„ดํ•œ ๋ทฐ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ Controller ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  ๋ทฐ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. 

 

 

7. Spring MVC์˜ ์ฒ˜๋ฆฌ ๊ณผ์ • 

1๏ธโƒฃ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ DispatcherServlet์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. 

 

2๏ธโƒฃ DispatcherServlet์€ HandlerMapping์„ ์‚ฌ์šฉํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  Controller๋ฅผ ํš๋“ํ•œ๋‹ค. 

 

3๏ธโƒฃ DispatcherServlet์€ Controller ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. 

 

4๏ธโƒฃ Controller๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ์™€ View ํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ๋‹ด์€ ModelAndView ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

5๏ธโƒฃ DispatcherServlet์€ ViewResolver๋กœ๋ถ€ํ„ฐ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  View ๊ฐ์ฒด๋ฅผ ๊ตฌํ•œ๋‹ค. 

 

6๏ธโƒฃ View๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•  ์‘๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค. 

 

7๏ธโƒฃ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‘๋‹ต ๋‚ด์šฉ์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค. 

 

 

 

8. Spring MVC ํ™˜๊ฒฝ์„ค์ • 

https://mvnrepository.com/artifact/org.springframework/spring-webmvc

pom.xml์— ์ถ”๊ฐ€ 

 

 

 

 

728x90