[Spring] ๐Ÿฆ‘์˜ค์ง•์–ด๊ฒŒ์ž„์œผ๋กœ ์•Œ์•„๋ณด๋Š” Spring MVC

์ง€์ˆ˜ยท2021๋…„ 10์›” 5์ผ
15

ํ”Œ๋ ˆ์ด๋ฐ์ดํ„ฐ

๋ชฉ๋ก ๋ณด๊ธฐ
41/50
post-thumbnail

1. Spring MVC๋ž€?

ใ„ด MVC ํŒจํ„ด + Spring

MVC ํŒจํ„ด์€
๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Model, ์‚ฌ์šฉ์ž์— ๋ณด์—ฌ์ง€๋Š” View, Model๊ณผ View๋ฅผ ๊ฐ„ ๋ช…๋ น์„ ์ „๋‹ฌํ•˜๋Š” Controller๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ
์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

ํ•ด๋‹น ๋””์ž์ธ ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํ™”๋ฉด์„ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ์ค‘์ ์„ ๋‘์–ด
๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์—…๋ฌด ๋ถ„๋ฆฌ์™€ ํ–ฅ์ƒ๋œ ์œ ์ง€ ๋ณด์ˆ˜(๊ด€๋ฆฌ)๋ฅผ ์ง€์›ํ•œ๋‹ค.


๊ทธ๋ ‡๋‹ค๋ฉด Spring MVC๋Š”?
Spring MVC๋Š” ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜ ์›น ๊ฐœ๋ฐœ ๋ชจ๋“ˆ์ด๋‹ค.
์ด๋Š” Spring์—์„œ ๋ณด๋‹ค ํŽธํ•˜๊ฒŒ MVC ํŒจํ„ด์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.

์•„๋ž˜ ์ด๋ฏธ์ง€๋Š” Spring MVC์˜ ๋™์ž‘ flow๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
Spring MVC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐœ๋ฐœ์ž๋Š” ๋ณด๋ผ์ƒ‰ ์˜์—ญ๊ณผ (๋•Œ๋•Œ๋กœ)์—ฐ๋‘์ƒ‰ ์˜์—ญ๋งŒ ๊ฐœ๋ฐœํ•ด์ฃผ๋ฉด๋œ๋‹ค.
๊ทธ ์™ธ์˜ ์˜์—ญ์€ Spring MVC๊ฐ€ ์•Œ์•„์„œ ์ง€์›ํ•œ๋‹ค..๐Ÿ‘
์ด๋ฏธ์ง€ ์ถœ์ฒ˜: ํ•˜๋‚˜์˜ ์ ์„ ์ฐ์–ด๋‚˜๊ฐ€๋ฉฐ, [๋ถ€์ŠคํŠธ์ฝ”์Šค ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ]์Šคํ”„๋ง MVC

Spring MVC = Spring์—์„œ ๋ณด๋‹ค ํŽธํ•˜๊ฒŒ MVC ํŒจํ„ด ๊ฐœ๋ฐœํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ

... ๊ทธ๋Ÿฐ๋ฐ ์ด์ œ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ณ๋“ค์ธ..ใ…Ž




2. ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ž€?

์˜ค์ง•์–ด๊ฒŒ์ž„์—๋Š” ํ”„๋ก ํŠธ๋งจ์ด ์žˆ๊ณ , ์Šคํ”„๋ง์—๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์žˆ๋‹ค..!

๐Ÿฆ‘ ์˜ค์ง•์–ด๊ฒŒ์ž„ ๊ณผ๋ชฐ์ž…์ž๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ณด๊ณ  ํ”„๋ก ํŠธ ๋งจ์„ ๋– ์˜ฌ๋ ธ๋‹ค..

  • ํด๋ผ์ด์–ธํŠธ์ธ vip๊ฐ€ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด
  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋งจ ์•ž๋‹จ์—์„œ ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค. (๋ณ‘ํ—Œ์ด ํ˜•์ด ์ „ํ™”๋ฅผ ๋ฐ›๋Š”๋‹ค.This is the Front man speaking..)
  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” HandlerMapping์œผ๋กœ ํ•ด๋‹น ์š”์ฒญ ๋กœ์ง ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•œ (์„œ๋ธŒ) ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„ ๋งคํ•‘ํ•œ๋‹ค.
  • ์ดํ›„ HandlerAdapter๋กœ ๋งคํ•‘๋œ (์„œ๋ธŒ) ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.
    - (์„œ๋ธŒ) ์ปจํŠธ๋กค๋Ÿฌ๋Š” (ํ•„์š”ํ•˜๋‹ค๋ฉด ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ) ์š”์ฒญ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ณ ,
    - ์š”์ฒญ ๋กœ์ง ์‹คํ–‰ ๊ฒฐ๊ณผ์ธ ๋ชจ๋ธ ๊ฐ์ฒด(์˜ˆ:DTO)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    - ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์‘๋‹ต์„ ์ถœ๋ ฅํ•  ๋ทฐ ์ •๋ณด์ธ viewName๊ณผ ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ์ธ ๋ชจ๋ธ(ModelAndView)์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ViewResolver๋กœ ํ•ด๋‹น viewName์˜ ๋ทฐ๋ฅผ ์ฐพ๊ณ 
  • ๋ทฐ์— ๋ชจ๋ธ์ด ํฌํ•จ๋œ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๋žœ๋”๋ง ํ•œ๋‹ค.
  • ๋ทฐ์— ์ถœ๋ ฅ๋œ ๊ฒฐ๊ณผ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค.

์ž ๊น๐Ÿ–, Spring MVC์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

๊ตฌ์„ฑ ์š”์†Œ๊ธฐ๋Šฅ
Dispatcher Servletํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋งจ ์•ž๋‹จ์—์„œ ๋ฐ›์•„ controller์—๊ฒŒ ์ „๋‹ฌ, ๋ฆฌํ„ดํ•œ ๊ฒฐ๊ณผ๋ฅผ view์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” servlet ๊ฐ์ฒด (ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ)
HandlerMappingurl๊ณผ ์š”์ฒญ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ค ํ•ธ๋“ค๋Ÿฌ ๊ฐ์ฒด(controller)๋ฅผ ์‚ฌ์šฉํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋กœ์ง์˜ ๊ฐ์ฒด,
Dispatcher Servlet์€ ํ•˜๋‚˜ ์ด์ƒ์˜ HandlerMapping์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
HandlerAdapterHandlerMapping์„ ํ†ตํ•ด ์ฐพ์€ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰, controller์˜ ๋ฆฌํ„ด๊ฐ’์„ Dispatcher Servlet์— ์ „๋‹ฌ
Controllerํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ, ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ Dispatcher Servlet์— ์ „๋‹ฌ
ModelAndViewcontroller๊ฐ€ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ ์ •๋ณด(Model) ๋ฐ ๋ทฐ ์„ ํƒ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ณด์œ ํ•œ ๊ฐ์ฒด
ViewResolvercontroller๊ฐ€ ๋ฆฌํ„ดํ•œ ๋ทฐ ์ด๋ฆ„(viewName)์„ ๊ธฐ๋ฐ˜์œผ๋กœ controller ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  ๋ทฐ ๊ฒฐ์ •
Viewcontroller์˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ํ™”๋ฉด ์ƒ์„ฑ

์ฐธ๊ณ : ํ•˜๋‚˜์˜ ์ ์„ ์ฐ์–ด๋‚˜๊ฐ€๋ฉฐ, [๋ถ€์ŠคํŠธ์ฝ”์Šค ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ]์Šคํ”„๋ง MVC



๊ทผ๋ฐ, ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์™œ ์žˆ์–ด์•ผํ•˜์ง€?

ํ˜•..ํ˜•์ด ์™œ..

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์—†๋‹ค๋ฉด,

  • ํ•œ ๊ฐœ์˜ url์— ํ•œ ๊ฐœ์˜ servlet์ด ๋งคํ•‘, ๋งค servlet ๊ตฌํ˜„ ์‹œ๋งˆ๋‹ค ํ•ธ๋“ค๋Ÿฌ์˜ ๊ณตํ†ต ๋กœ์ง์ด ์ค‘๋ณต๋จ
  • ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค๋ฉด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•จ
    (์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์Šค๋ ˆ๋“œ ๋‹น ๊ฐ๊ฐ ๋‹ค๋ฅธ setvlet์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ํ•œ servlet์˜ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Œ)
    โ†’ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ํฐ ๋น„์šฉ
    โ†’ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ ์ „ํ™˜ํ•˜๋Š” context switch๊ฐ€ ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ผ์œผํ‚ด
    โ†’ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ์— ์ œํ•œ์„ ๋‘์ง€ ์•Š์œผ๋ฉด, ๋งŽ์€ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋‹ค๊ฐ€ ์„œ๋ฒ„์˜ ํ•˜๋“œ์›จ์–ด ํ•œ๊ณ„๋ฅผ ๋„˜์–ด๋ฉด..์„œ๋ฒ„ ํŽ‘..๐Ÿ’ฅ

ใ„ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ๋‹ค๋ค„์•ผํ•˜๋Š” ์–ด๋ ค์›€ + ๊ณตํ†ต ๋กœ์ง์„ ์ค‘๋ณตํ•˜์—ฌ ๊ฐœ๋ฐœํ•ด์•ผํ•˜๋Š” ๋ถˆํŽธํ•จ

์ถœ์ฒ˜: [10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐Ÿถ ์ฝ”๊ธฐ์˜ Servlet vs Spring, ๊ตฌ๋ฐํƒ€๋งˆ ๊ตฌ๋ฐํƒ€๋งˆ, Front Controller ํŒจํ„ด



ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š”,

โญ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์•ž๋‹จ์—์„œ ์ฒ˜๋ฆฌ(๊ณตํ†ต ๋กœ์ง)ํ•˜๊ณ , ์š”์ฒญ์— ๋งž๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งคํ•‘, ์ด๊ด„์ž์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” servlet ๊ฐ์ฒด
โญ ํ•˜๋‚˜์˜ servlet์œผ๋กœ ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์Œ = Dispatcher Servlet
(Dispatcher Servlet์œผ๋กœ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ตฌํ˜„)

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์ด๋ž€?
ํ•˜๋‚˜์˜ servlet์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„, ๊ณตํ†ต ๋กœ์ง์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์š”์ฒญ์— ๋งž๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งคํ•‘ํ•ด์ฃผ๋„๋ก ์•ž๋‹จ์— ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด

  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•˜๋‚˜๊ณ , (์„œ๋ธŒ) ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋กœ์ง์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์ด๋‹ค.
  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ค‘์•™์ง‘๊ถŒ์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ๊ณตํ†ต ๋กœ์ง์€ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ ,
    ํ•˜๋‚˜์˜ (์„œ๋ธŒ) ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•œ ๊ธฐ๋Šฅ๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„ ๊ฐ€๋Šฅํ•˜๋‹ค.
    โ†’ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ฉ, ๊ด€๋ฆฌํ•˜๊ธฐ ์šฉ์ดํ•ด์ง„๋‹ค.



์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€,

์ฝ”๋“œ๋กœ Spring MVC๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ..โญ

(ํฌ์ŠคํŒ…ํ•˜๊ณ ๋ณด๋‹ˆ ๋‚˜๋งŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ์™ˆ๋ž„๋ผ๋ผ ์ ์—ˆ๋‹ค...ใ…Ž;;; ๋ณต์Šต์šฉ TIL์ด๋‹ˆ๊นŒ ๊ป„๊ป„)

profile
์‚ฌ๋ถ€์ž‘ ์‚ฌ๋ถ€์ž‘

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

comment-user-thumbnail
2021๋…„ 10์›” 10์ผ

๊ธ€์„ ๋„ˆ๋ฌด ์žฌ๋ฐŒ๊ฒŒ ์ž˜ ์“ฐ์…จ๋„ค์š”.. ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค!!

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2023๋…„ 6์›” 7์ผ

์ง€๋งŒ ์•Œ์•„๋ณด๊ฒŒ ์“ฐ๋ฉด ๋ญํ•˜๋ƒ

1๊ฐœ์˜ ๋‹ต๊ธ€