Search

Spring MVC

MVC ํŒจํ„ด

์†Œํ”„ํŠธ์›จ์–ด๋ฅผ Model-View-Controller ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก 
โ€ข
Model : ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹น
โ€ข
View : ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ‘œํ˜„
โ€ข
Controller : ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์ œ์–ดํ•˜๋Š” ์—ญํ• 

์›น๊ฐœ๋ฐœ์—์„œ์˜ MVC ํŒจํ„ด

โ€ข
Model: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ €์žฅํ•˜๋Š” ๋ถ€๋ถ„
โ—ฆ
Service
โ—ฆ
DTO
โ—ฆ
DAO
โ€ข
View: ์›น ํŽ˜์ด์ง€๋ฅผ ํ‘œํ˜„ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„
โ—ฆ
jsp
โ—ฆ
html
โ€ข
Controller: HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ ์ ˆํ•œ ๋ชจ๋ธ์„ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์ ์ ˆํ•œ ๋ทฐ๋ฅผ ์„ ํƒํ•˜์—ฌ, ์ ์ ˆํ•œ ๋ทฐ ํŽ˜์ด์ง€๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ถ€๋ถ„
โ—ฆ
Controller

Spring MVC ๊ตฌ์กฐ

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

1.
Dispatcher Servlet:
โ€ข
์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์„œ๋ธ”๋ฆฟ์ž…๋‹ˆ๋‹ค.
2.
Handler Mapping:
โ€ข
ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ํ•ธ๋“ค๋Ÿฌ(์ปจํŠธ๋กค๋Ÿฌ)๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
3.
Handler Adapter:
โ€ข
์„ ํƒ๋œ ํ•ธ๋“ค๋Ÿฌ(์ปจํŠธ๋กค๋Ÿฌ)๊ฐ€ ์‹ค์ œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
4.
View Resolver:
โ€ข
ํ•ธ๋“ค๋Ÿฌ(์ปจํŠธ๋กค๋Ÿฌ)์—์„œ ์„ ํƒ๋œ ๋ทฐ ์ด๋ฆ„์„ ๋ทฐ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
5.
Controller:
โ€ข
ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํฌํ•จํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.
6.
Model:
โ€ข
์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ทฐ์— ์ „๋‹ฌํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
7.
View:
โ€ข
๋ทฐ ํ…œํ”Œ๋ฆฟ(์˜ˆ: JSP, Thymeleaf)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์ œ ์‘๋‹ต(HTML ํŽ˜์ด์ง€)์„ ์ƒ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.
8.
Service:
โ€ข
๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ณ  ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค ๋ ˆ์ด์–ด์˜ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.
9.
Repository:
โ€ข
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ ˆ์ด์–ด์˜ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๋ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

MVC ํŒจํ„ด ๋™์ž‘ ์ˆœ์„œ

1.
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•˜๋ฉด, Front controller์ธ DispatcherServlet ํด๋ž˜์Šค๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค.
2.
DispatcherServlet์€ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ๋‚ด์˜ servlet-context.xml ํŒŒ์ผ์˜ @Controller ์ธ์ž๋ฅผ ํ†ตํ•ด ๋“ฑ๋กํ•œ ์š”์ฒญ ์œ„์ž„ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„ ๋ฉ”ํ•‘(mapping)๋œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์กด์žฌํ•˜๋ฉด @RequestMapping์„ ํ†ตํ•ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋ฉ”์†Œ๋“œ๋กœ ์ด๋™ํ•œ๋‹ค.
3.
์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ Service ๋ฅผ ๋ฐ›์•„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์„œ๋น„์Šค์—๊ฒŒ ์œ„์ž„ํ•œ๋‹ค.
4.
Service ๋Š” ์š”์ฒญ์— ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์š”์ฒญ์— ๋Œ€ํ•ด DB์— ์ ‘๊ทผํ•ด์•ผํ•œ๋‹ค๋ฉด DAO์— ์š”์ฒญํ•˜์—ฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ž„ํ•œ๋‹ค.
5.
DAO๋Š” DB์ •๋ณด๋ฅผ DTO๋ฅผ ํ†ตํ•ด ๋ฐ›์•„ ์„œ๋น„์Šค์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
6.
์„œ๋น„์Šค๋Š” ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
7.
์ปจํŠธ๋กค๋Ÿฌ๋Š” Model(๋ชจ๋ธ) ๊ฐ์ฒด์—๊ฒŒ ์š”์ฒญ์— ๋งž๋Š” View(๋ทฐ) ์ •๋ณด๋ฅผ ๋‹ด์•„ DispatcherServlet์—๊ฒŒ ์ „์†กํ•œ๋‹ค.
8.
DispatcherServlet์€ ViewResolver์—๊ฒŒ ์ „๋‹ฌ๋ฐ›์€ View ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
9.
ViewResolver๋Š” ์‘๋‹ตํ•  View์— ๋Œ€ํ•œ JSP๋ฅผ ์ฐพ์•„ DispatcherServlet์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
10.
DispatcherServlet์€ ์‘๋‹ตํ•  ๋ทฐ์˜ ๋ Œ๋”๋ง๋ฅผ ์ง€์‹œํ•˜๊ณ  ๋ทฐ๋Š” ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
11.
DispatcherServlet์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ Œ๋”๋ง๋œ ๋ทฐ๋ฅผ ์‘๋‹ตํ•˜๋ฉฐ ์š”์ฒญ์„ ๋งˆ์นœ๋‹ค.

Front Controller ๋””์ž์ธ ํŒจํ„ด

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์ ์„ ํ•˜๋‚˜๋กœ ํ†ต์ผํ•˜๊ณ , ์š”์ฒญ์„ ์ค‘์•™ ์ง‘์ค‘์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ์™€ ํ๋ฆ„์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด

DispatcherServlet ๊ณผ Front Controller

Spring Framework์˜ DispatcherServlet์€ Front Controller ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค. DispatcherServlet ๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ณ , ์ ์ ˆํ•œ ํ•ธ๋“ค๋Ÿฌ(์ปจํŠธ๋กค๋Ÿฌ)๋ฅผ ์„ ํƒํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๋ทฐ(View)๋ฅผ ๋ Œ๋”๋งํ•˜์—ฌ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.