๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅDEV/Java || Spring

FrontController ํŒจํ„ด

by bdd 2022. 7. 21.

์›น ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ํ•™์Šต๊ณผ์ •์—์„œ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 

 

 

 

 

 

1. ์„œ๋ธ”๋ฆฟ๊ณผ jsp


์„œ๋ธ”๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ ์œผ๋กœ html์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, ํ•˜์ง€๋งŒ ์ž๋ฐ”์ฝ”๋“œ๋กœ text/html์„ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€ body์— text/html๊ณผ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹(utf-8)๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์ง์ ‘ ๋„ฃ์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” (์ž๋ฐ”๋กœ html์„ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์—) ๋ณต์žกํ•˜๊ณ  ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ์‹์ด๋ฉฐ requestParam( ) ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜ํ™˜ ํƒ€์ž…์ด String์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜• ๋ณ€ํ™˜ ๋˜ํ•œ ๊ฐ•์ œ๋กœ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ €์žฅ์˜ ๊ฒฝ์šฐ html์ฝ”๋“œ์— ๋™์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. 

 

 

 

 

 

์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด jsp๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋๋Š”๋ฐ์š”, ๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์„ jsp๊ฐ€ ๊ฐ€์ ธ๊ฐ€๊ณ  ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์—๋งŒ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•ด์„œ ์„œ๋ธ”๋ฆฟ์— ๋ชฐ๋ฆฐ ๊ณผ๋„ํ•œ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ๋ทฐ์— java์ฝ”๋“œ, ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ ๋“ฑ ๋‹ค์–‘ํ•œ ์ฝ”๋“œ๊ฐ€ ๋…ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— jsp๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ์„ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.  

 

์„œ๋ธ”๋ฆฟ์œผ๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ํ™”๋ฉด(View)์„ ์œ„ํ•œ HTML์„ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด ์ž๋ฐ” ์ฝ”๋“œ์— ์„ž์—ฌ์„œ ์ง€์ €๋ถ„ํ•˜๊ณ  ๋ณต์žกํ–ˆ๋‹ค.

 

 

 

 

 

2. MVCํŒจํ„ด์˜ ๋“ฑ์žฅ


์„œ๋ธ”๋ฆฟ์„ ์ด์šฉํ•˜๋˜ ๊ธฐ์กด ๋ฐฉ์‹์˜ ๋ถˆํŽธํ•จ์œผ๋กœ ์ธํ•ด MVC ํŒจํ„ด์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ณ€๊ฒฝ ์ฃผ๊ธฐ๊ฐ€ ๋‹ค๋ฅผ ๋•Œ๋Š” ์ด๋“ค์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๋Š”๋ฐ์š”, ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ JSP๋กœ ์ฒ˜๋ฆฌํ•˜๋˜ ๊ฒƒ์„ ์ปจํŠธ๋กค๋Ÿฌ/๋ทฐ๋ผ๋Š” ๊ฐ๊ฐ์˜ ์˜์—ญ์œผ๋กœ ์—ญํ• ์„ ๋‚˜๋ˆ„์—ˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด Controller/ModelAndView๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. 

 

๋ชจ๋ธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์„œ ์ „๋‹ฌํ•œ๋‹ค.

 

 

 

 

 

 

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

 

 

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์„œ๋ธ”๋ฆฟ์ด ์•„๋‹Œ ๋‹ค๋ฅธ๊ณณ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ , jsp๋Š” ๋ชฉ์ ์— ๋งž๊ฒŒ html๋กœ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ์ผ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์— ๋Œ€ํ•œ ์ˆ˜์ •์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋”๋ผ๋„ ์ด์— ๋Œ€ํ•œ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉฐ, ๋˜ํ•œ ๋ชจ๋ธ ๋•๋ถ„์— ๋ทฐ์—์„œ ์ฒ˜๋ฆฌํ•˜๋˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ํ˜ธ์ถœ์„ ๋Š์–ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. **๋ทฐ๋Š” xml, html ๋“ฑ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

 

 

 

 

 

์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœํ•˜๋ฉด forward๋Š” ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋˜๋ฉฐ ์ด๋Š” redirect๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

์ถ”๊ฐ€๋กœ static ๊ฒฝ๋กœ์— ํŒŒ์ผ์„ ๋„ฃ๊ฒŒ ๋˜๋ฉด ์™ธ๋ถ€์—์„œ๋„ ์ด๋ฅผ ์ž์œ ๋กญ๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด ํŠน์ • ๊ฒฝ๋กœ์— ํŒŒ์ผ์„ ๋„ฃ์œผ๋ฉด ๋ฐ˜๋“œ์‹œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฑฐ์ณ์„œ ์ด๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ** ์ด๋Š” WAS ์„œ๋ฒ„์˜ ๋ฃฐ์ธ๋ฐ์š”, ์šฐ๋ฆฌ๋ˆˆ์—์„œ๋Š” ์•ˆ ๋ณด์ด์ง€๋งŒ url์„ ํ˜ธ์ถœํ•˜๋Š” ์ˆœ๊ฐ„ forward๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ redirect๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 

 

 

 

 

 

 

๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋Š” ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ(์›น ๋ธŒ๋ผ์šฐ์ €)์— ์‘๋‹ต์ด ๋‚˜๊ฐ”๋‹ค๊ฐ€, ํด๋ผ์ด์–ธํŠธ๊ฐ€ redirect ๊ฒฝ๋กœ๋กœ ๋‹ค์‹œ ์š”์ฒญ์„ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๊ณ , URL ๊ฒฝ๋กœ๋„ ์‹ค์ œ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ํฌ์›Œ๋“œ๋Š” ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํ˜ธ์ถœ์ด๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „ํ˜€ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. 

 

request.setAttribute์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ทฐ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

 

 

 

 

 

3. MVC ํŒจํ„ด์˜ ํ•œ๊ณ„


ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋„ ์—ฌ์ „ํžˆ ๋‹จ์ ์ด ์กด์žฌํ•˜๋Š”๋ฐ์š”, ์šฐ์„  ์ปจํŠธ๋กค๋Ÿฌ์˜ ํฌ์›Œ๋“œ ๋กœ์ง๊ณผ ๊ฒฝ๋กœ์˜ ์ค‘๋ณต์ด ๋งŽ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ค‘๋ณต ๋กœ์ง์ด ๋งŽ๋‹ค๋Š” ๊ฒƒ์€ ๊ณตํ†ต ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๋Š” ๊ฒƒ์ธ๋ฐ์š”, ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๊ณ  ๊ธฐ๋Šฅ์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜๋ก ์ค‘๋ณต ๋กœ์ง์ด ์ฆํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ฉ”์„œ๋“œ๋กœ ๋ฝ‘์•„์„œ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ•ด๋‹น ํด๋ž˜์Šค์— ์˜์กดํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค. ** jsp๊ฐ€ ์•„๋‹Œ thymeleaf ๊ฐ™์€ ๋‹ค๋ฅธ ๋ทฐ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด ์ „์ฒด ์ฝ”๋“œ๋ฅผ ๋‹ค ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ViewPath์— ์ค‘๋ณต ์ด๋Š”prefix, suffix๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๋ฟ๋งŒ ์•„๋‹ˆ๋ผ HttpServletResponse๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋„ ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ ์ „์— ๋จผ์ € ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ๊ธฐ๋Šฅ์— ๋งž๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ค‘๋ณต ๋กœ์ง/๊ฒฝ๋กœ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ธ๋ฐ ์ด๋Š” ์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ๋กœ์ง์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ธ€์—์„œ๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋‹ค์Œ ๋ฒ„์ „์ด ์–ด๋–ป๊ฒŒ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํฌ์›Œ๋“œ ์ค‘๋ณต

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€