[SPRING] ๐Ÿงฉ Spring Framework ์™€ MVC ํŒจํ„ด

์ž„๋‚™ํ˜„ยท2022๋…„ 9์›” 28์ผ
0

SpringFramework

๋ชฉ๋ก ๋ณด๊ธฐ
1/7
post-thumbnail

ย ์ €๋ฒˆ์ฃผ๊นŒ์ง€ ์ €๋Š” Servlet๊ณต๋ถ€๋ฅผ ํ•˜๋ฉฐ, ์›น ๊ฐœ๋ฐœ์˜ ๊ธฐ์ดˆ๋ฅผ ๋‹ค์ ธ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ย ์ด๋ฒˆ์ฃผ ๋ถ€ํ„ฐ๋Š” ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ•˜๋ฉฐ Spring Framework ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ MVC ํŒจํ„ด ์„ ๊ตฌํ˜„ ๋ฐ ์ตœ์ ํ™” ์‹œ์ผœ๋ณด๋ฉฐ ๊ณต๋ถ€๋ฅผ ์ง„ํ–‰ํ•ด ๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

ย ์˜ค๋Š˜์€ ๊ฐ„๋‹จํžˆ Spring Framework๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ, MVC ํŒจํ„ด์€ ์–ด๋–ค ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํžˆ ์ •๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ย ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ๐Ÿ“ Spring Framework

0. โ›บ Spring ์ด๋ž€?

ย Spring์€ Java ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ Framework ์ž…๋‹ˆ๋‹ค.

ย ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ Framework๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ”ํƒ•์ด ๋˜๋Š” ํ‹€๊ณผ ๊ณตํ†ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ, ๊ธฐ์ˆ  API ๋“ฑ์„ ์ œ๊ณตํ•ด ์ค๋‹ˆ๋‹ค.



1. โ›บ Spring ์ปจํ…Œ์ด๋„ˆ

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ํ‹€ - Spring ์ปจํ…Œ์ด๋„ˆ

    Spring์€ Spring ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” Spring ๋Ÿฐํƒ€์ž„ ์—”์ง„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ย Spring ์ปจํ…Œ์ด๋„ˆ๋Š” ์„ค์ •์ •๋ณด๋ฅผ ์ฐธ๊ณ ๋กœ ํ•ด์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Spring ์ปจํ…Œ์ด๋„ˆ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋ณดํ†ต ์›น ๋ชจ๋“ˆ์—์„œ ๋™์ž‘ํ•˜๋Š” ์„œ๋น„์Šค๋‚˜ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ย Spring์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € Spring ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•๊ณผ Spring ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •์ •๋ณด๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.



2. โ›บ ๊ณตํ†ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ

ย Framework๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ํ‹€์„ ์ œ๊ณตํ•ด์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ธฐ์ค€๋„ ์ œ์‹œํ•ด์ค๋‹ˆ๋‹ค.

์ด๋Ÿฐ ํ‹€์„ ๋ณดํ†ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Spring์€ ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

1) IoC/DI

ย ์ฒซ ๋ฒˆ์งธ๋Š” Ioc/DI๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์˜์กด๊ด€๊ณ„์— ๋Œ€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

ย Spring์€ ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™๊ณผ ๋””์ž์ธ ํŒจํ„ด์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” IoC/DI๋ฅผ Framework์˜ ๊ทผ๊ฐ„์œผ๋กœ ์‚ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ย Spring Framework์—์„œ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋Š” IoC/DI ๋ฐฉ์‹์„ ๋”ฐ๋ผ์„œ ์ž‘์„ฑ๋˜์–ด์•ผ Spring์ด ์ œ๊ณตํ•˜๋Š” ๊ฐ€์น˜๋ฅผ ์ œ๋Œ€๋กœ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ย Spring์ด ์ง์ ‘ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๊ธฐ์ˆ ๊ณผ API, ์‹ฌ์ง€์–ด ์ปจํ…Œ์ด๋„ˆ๋„ IoC/DI ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ย Spring์„ ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๊ธฐ๋ณธ์ด ๋˜๋ฉฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

2) ์„œ๋น„์Šค ์ถ”์ƒํ™”

ย ๋‘ ๋ฒˆ์งธ๋Š” ์„œ๋น„์Šค ์ถ”์ƒํ™” ์ž…๋‹ˆ๋‹ค. Spring์„ ์‚ฌ์šฉํ•˜๋ฉด ํ™˜๊ฒฝ์ด๋‚˜ ์„œ๋ฒ„, ํŠน์ • ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ์ด์‹์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ, ์œ ์—ฐํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์„œ๋น„์Šค ์ถ”์ƒํ™”์ž…๋‹ˆ๋‹ค.

ย ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ˆ ๊ณผ ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š๋„๋ก ์œ ์—ฐํ•œ ์ถ”์ƒ ๊ณ„์ธต์„ ๋‘๋Š” ๋ฐฉ๋ฒ•์ด๋ผ ํ•  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

3) AOP

ย ์„ธ ๋ฒˆ์งธ๋Š” AOP ์ž…๋‹ˆ๋‹ค. AOP๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ์‚ฐ์žฌํ•ด์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ชจ๋“ˆํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

ย Spring์€ AOP๋ฅผ ์ด์šฉํ•ด์„œ, ๋‹ค์–‘ํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์„œ๋น„์Šค๋ฅผ ์ ์šฉํ•˜๊ณ ๋„ ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

ย Spring์„ ์‚ฌ์šฉํ•ด์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋ฐ˜๋“œ์‹œ ์ด ์„ธ ๊ฐ€์ง€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์ž˜ ์ดํ•ดํ•ด์•ผ ํ•˜๊ณ  ์ž์œ ๋กญ๊ฒŒ ์‘์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



3. โ›บ ๊ธฐ์ˆ  API

ย Spring์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœ์˜ ๋‹ค์–‘ํ•œ ์˜์—ญ์— ๋ฐ”๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ๊ธฐ์ˆ  API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ย UI ์ž‘์„ฑ์€ ๋ฌผ๋ก ์ด๊ณ  ์›น ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต, ๋น„์ฆˆ๋‹ˆ์Šค ์„œ๋น„์Šค ๊ณ„์ธต, ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๊ณ„์ธต, ๋„๋ฉ”์ธ ๊ณ„์ธต, ๋ฐ์ดํ„ฐ ์—‘์„ธ์Šค ๊ณ„์ธต ๋“ฑ์—์„œ ํ•„์š”ํ•œ ์ฃผ์š” ๊ธฐ์ˆ ์„ Spring์—์„œ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๊ณผ ์ „๋žต ํด๋ž˜์Šค ๋“ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ย Spring์ด ์ œ๊ณตํ•˜๋Š” API์™€ ์ง€์› ๊ธฐ์ˆ ์€ ๋ชจ๋‘ Spring์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์— ๋”ฐ๋ผ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ Spring์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์ฝ”๋“œ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ย Spring์˜ ๋ชจ๋“  ๊ธฐ์ˆ ์€ ํ‘œ์ค€ Java ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”Œ๋žซํผ (JavaEE) ์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ย ํ‘œ์ค€ ๊ธฐ์ˆ ๊ณผ ๋”๋ถˆ์–ด ์œ ๋ช… ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์ˆ ๊ณผ ์ฃผ์š” ์ƒ์šฉ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ง€์› ๊ธฐ๋Šฅ๋„ ๋‹ค์–‘ํ•˜๊ฒŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.



ย Spring์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ์ด ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

ย ํด๋ž˜์Šค๋Š” Spring ์ปจํ…Œ์ด๋„ˆ ์œ„์—์„œ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋งŒ๋“ค์–ด์ ธ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ , ์ฝ”๋“œ๋Š” Spring์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ๋”ฐ๋ผ์„œ ์ž‘์„ฑํ•˜๊ณ , ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” Spring์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ  API์™€ ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•˜๋„๋ก ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.




2. ๐Ÿ“ MVC ํŒจํ„ด

0. โ™พ๏ธ MVC ํŒจํ„ด์ด๋ž€?

ย ๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ(model-view-controller, MVC)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

ย ์ด ํŒจํ„ด์„ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹œ๊ฐ์  ์š”์†Œ๋‚˜ ๊ทธ ์ด๋ฉด์—์„œ ์‹คํ–‰๋˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์„œ๋กœ ์˜ํ–ฅ ์—†์ด ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



1. โ™พ๏ธ MVC์˜ ๊ตฌ์„ฑ์š”์†Œ

ย ๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์„ธ ๊ฐ€์ง€์˜ ๊ตฌ์„ฑ์š”์†Œ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๊ตฌ์„ฑ์š”์†Œ๋“ค ์‚ฌ์ด์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ด€๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

1) Model

ย ๋ชจ๋ธ(model)์ด๋ž€ ์–ด๋– ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งํ•˜๋ฉฐ, ํ‘œ์‹œ ํ˜•์‹์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ย ๋‹ค์‹œ๋งํ•ด, ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€์— ๋Œ€ํ•ด ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

ย ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋ธ์€ ์ˆœ์ˆ˜ํ•˜๊ฒŒ public ํ•จ์ˆ˜๋กœ๋งŒ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

ย ๋˜ํ•œ ๋ช‡๋ช‡ ํ•จ์ˆ˜๋“ค์€ ์‚ฌ์šฉ์ž์˜ ์งˆ์˜(query)์— ๋Œ€ํ•ด ์ƒํƒœ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋‚˜๋จธ์ง€ ํ•จ์ˆ˜๋“ค์€ ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

2) View

ย MVC์—์„œ ๋ชจ๋ธ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ทฐ(view)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ย ๋ทฐ๋Š” ๋ณด์—ฌ์ค„ ๊ฐ’(๋ชจ๋ธ)์„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

3) Controller

ย MVC์˜ ๋ทฐ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํŠธ๋กค๋Ÿฌ(controller)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ย ์‚ฌ์šฉ์ž๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์˜ ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

ย ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ชจ๋ธ์˜ mutator(๋ชจ๋ธ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

ย ์ด๋•Œ ๋ชจ๋ธ์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๋ชจ๋ธ์€ ๋“ฑ๋ก๋œ ๋ทฐ์— ์ž์‹ ์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ฆฌ๊ณ  ๋ทฐ๋Š” ๊ฑฐ๊ธฐ์— ๋งž๊ฒŒ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ชจ๋ธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.



2. โ™พ๏ธ MVC์˜ ์›๋ฆฌ

ย Java ์–ธ์–ด์—์„œ ๋ชจ๋ธ์€ java.util.Observable ์„ ์ƒ์†(extends)๋ฐ›์•„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋ธ์—๋Š” ํ˜„์žฌ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—๊ฒŒ ์•Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ย mutator๋Š” setChanged() ์™€ notifyObservers()๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ย notifyObservers๋Š” ๋ชจ๋ธ์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋ทฐ์—๊ฒŒ ์—…๋ฐ์ดํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ย ๋ทฐ๋Š” java.util.Observer ๋ฅผ implementํ•˜์—ฌ ๋งŒ๋“ค๋ฉด update method๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย updateํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” Object ๋ชจ๋ธ์—์„œ ๋„˜์–ด์˜จ ์ถ”๊ฐ€์ •๋ณด๋ฅผ ๋ฐ›๋Š” ๋ฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

interface Observer {
		void update(Observable t, Object o);
}

ย ๋ทฐ๋Š” ๋ฐ˜๋“œ์‹œ ๋ชจ๋ธ์—๊ฒŒ ์งˆ์˜ํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ถ€๋ถ„์ด ๊ตฌํ˜„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ย ๋ชจ๋ธ์€ addObserver๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ทฐ๋ฅผ ์ž์‹ ์—๊ฒŒ ๋“ฑ๋ก์‹œํ‚ต๋‹ˆ๋‹ค.

ย ๋ชจ๋ธ์€ ์ž์‹ ์—๊ฒŒ ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋ทฐ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์ž์‹ ์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋˜๋ฉด ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋ทฐ์— notify ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ทฐ๋ฅผ update์‹œํ‚ต๋‹ˆ๋‹ค.

ย ๋ชจ๋ธ์€ ๋ทฐ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MVC์—์„œ๋Š” ์ด๊ฒƒ์„ ํ—ˆ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋˜ํ•œ ๋ทฐ๋„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ชจ๋ธ์— ๋“ฑ๋ก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



3. โ™พ๏ธ Spring MVC ๊ตฌ์กฐ

0) MVC์˜ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ

1) DispatcherServlet

  • ย DispatcherServlet์˜ ์—ญํ• 
    DispatcherServlet์€ MVC์˜ ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
    FRONT ๊ฐ€ URL๋กœ ํ˜ธ์ถœํ•˜์˜€์„ ๋•Œ, DispatcherServlet์ด ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ตœ์ดˆ๋กœ ๋ฐ›๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ฅผ ์ค‘์•™ ์ง‘์ค‘์‹ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

2) Handler Mapping

  • ย Handler Mapping์˜ ์—ญํ• 
    Handler Mapping์€ DispatcherServlet์—๊ฒŒ 1) ์—์„œ ๋ฐ›์€ request๊ฐ€ ์–ด๋–ค ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์‘๋‹ตํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

3) Controller

  • ย Controller์˜ ์—ญํ• 
    2) ์—์„œ DispatcherServlet์€ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‘๋‹ต ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น Controller ๋กœ ์ฒ˜๋ฆฌ ์š”์ฒญ์„ ๋„˜๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๋ฉฐ Model์„ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ, ์ด Model์ด ModelAndView ๊ฐ์ฒด์— ๋‹ด๊ฒจ์ ธ์„œ ๋‹ค์‹œ DispatcherServlet ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Model์„ ๋งŒ๋“ค์–ด DispatcherServlet์œผ๋กœ ๋„˜๊ฒจ์ฃผ๋Š”๊ฒƒ์ด ๋ฐ”๋กœ Controller์˜ ์—ญํ• ์ž…๋‹ˆ๋‹ค.

4) ViewResolver

  • ย ViewResolver์˜ ์—ญํ• 
    DispatcherServlet์€ 3) ์—์„œ ModelAndView ๊ฐ์ฒด๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ๋ฐ›์€ ModelAndView ๊ฐ์ฒด์— ๋งž๋Š” View๋ฅผ ์ฐพ์•„๋‹ฌ๋ผ๊ณ  DispatcherServlet์€ ViewResolver ์—๊ฒŒ ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ViewResolver์˜ ์—ญํ• ์€ ์š”์ฒญ๋ฐ›์€ View๋ฅผ ์ฐพ์•„์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

5) View

  • ย View์˜ ์—ญํ• 
    4)์—์„œ ViewResolver๋Š” ModelAndView์— ๋งž๋Š” View์ •๋ณด๋ฅผ ๋„˜๊ฒจ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ฐ›์€ ์ •๋ณด๋กœ DispatcherServlet์—๊ฒŒ ํ•„์š”ํ•œ View๋ฅผ ์ฐพ์€ ํ›„ Model๊ฐ’์„ ๋„˜๊ฒจ์„œ View๋ฅผ ์ถœ๋ ฅํ•ด ์ค๋‹ˆ๋‹ค.



4. โ™พ๏ธ Spring MVC์˜ ์ฒ˜๋ฆฌ์ˆœ์„œ

01) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•˜๋ฉด, front controller์ธ DispatcherServlet ํด๋ž˜์Šค๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

02) DispatcherServlet์€ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ๋‚ด์˜ servlet-context.xmlํŒŒ์ผ์˜ @Controller์ธ์ž๋ฅผ ํ†ตํ•ด ๋“ฑ๋กํ•œ ์š”์ฒญ ์œ„์ž„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋งคํ•‘(mapping)๋œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์กด์žฌํ•˜๋ฉด, @RequestMapping์„ ํ†ตํ•ด ์š”์ฒญ ์ฒ˜๋ฆฌํ•  ๋ฉ”์†Œ๋“œ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

03) ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  Service(์„œ๋น„์Šค)๋ฅผ ๋ฐ›์•„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์„œ๋น„์Šค์—๊ฒŒ ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.

04) Service๋Š” ์š”์ฒญ์— ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์š”์ฒญ์— ๋Œ€ํ•ด DB์— ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค๋ฉด DAO์— ์š”์ฒญํ•˜์—ฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.

05) DAO[1]๋Š” DB์ •๋ณด๋ฅผ DTO[2]๋ฅผ ํ†ตํ•ด ๋ฐ›์•„ ์„œ๋น„์Šค์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

06) ์„œ๋น„์Šค๋Š” ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

07) ์ปจํŠธ๋กค๋Ÿฌ๋Š” Model(๋ชจ๋ธ) ๊ฐ์ฒด์—๊ฒŒ ์š”์ฒญ์— ๋งž๋Š” View(๋ทฐ) ์ •๋ณด๋ฅผ ๋‹ด์•„ DispatcherServlet์—๊ฒŒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

08) DispatcherServlet์€ ViewResolver์—๊ฒŒ ์ „๋‹ฌ๋ฐ›์€ View์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

09) ViewResolver๋Š” ์‘๋‹ตํ•  View์— ๋Œ€ํ•œ JSP๋ฅผ ์ฐพ์•„ DispatcherServlet ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

10) DispatcherServlet์€ ์‘๋‹ตํ•  ๋ทฐ์˜ Render๋ฅผ ์ง€์‹œํ•˜๊ณ  ๋ทฐ๋Š” ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

11) DispatcherServlet์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ Rendering๋œ ๋ทฐ๋ฅผ ์‘๋‹ตํ•˜๋ฉฐ ์š”์ฒญ์„ ๋ฏธ๋ฃน๋‹ˆ๋‹ค.

[1] DAO(Data Access Object) : DB๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ „๋‹ดํ•˜๋„๋ก ๋งŒ๋“  ์˜ค๋ธŒ์ ํŠธ
[2] DTO(Data Transfer Object) : VO(Value Object)๋กœ ๋ฐ”๊พธ์–ด ๋งํ• ์ˆ˜ ์žˆ๋‹ค. ๊ณ„์ธต๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ์˜ค๋ธŒ์ ํŠธ

ย ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Spring Framework์™€ MVC ํŒจํ„ด์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ๋งŒ ๋Œ€๋žต์ ์œผ๋กœ ๋‹ค๋ฃจ์–ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ย ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ™˜๊ฒฝ์„ค์ •๊ณผ ์˜ˆ์ œ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด๋Š” ํฌ์ŠคํŒ…์„ ํ•œ ๋ฒˆ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก Reference

http://www.acornpub.co.kr/book/toby-spring3-1-set

profile
์ฝ”๋”ฉํ•˜๋Š” ์ˆ˜ํ•™๊ณผ

0๊ฐœ์˜ ๋Œ“๊ธ€