Spring Web MVC

Spring Web MVC๋Š” Spring Framework์—์„œ ์ œ๊ณตํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ

Spring Web MVC ์•„ํ‚คํ…์ฒ˜์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ

Spring Tomcat & Spring Container

Spring Web MVC๋Š” ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ˜‘๋ ฅํ•˜์—ฌ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • Spring MVC๋Š” ๋ณดํ†ต Tomcat ์œ„์—์„œ ๋™์ž‘

  • Tomcat์€ ์›น ์„œ๋ฒ„์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์š”์ฒญ์„ ๋ฐ›์•„ ์„œ๋ธ”๋ฆฟ์— ์œ„์ž„ํ•˜๊ณ , ์Šค๋ ˆ๋“œ ํ’€์„ ํ†ตํ•ด ์ฒ˜๋ฆฌ

  • Spring Boot๋Š” ์ž„๋ฒ ๋””๋“œ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์ด ๊ธฐ๋ณธ๊ฐ’์ด๋ฉฐ Tomcat, Jetty, Undertow ์ค‘ ์„ ํƒ ๊ฐ€๋Šฅ

Spring Web MVC๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๊ตฌ์„ฑ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

  • Servlet Container

    • Tomcat๊ณผ ๊ฐ™์€ WAS ๋‚ด๋ถ€์—์„œ ๋™์ž‘ํ•˜๋ฉฐ Servlet์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  DispatcherServlet ์‹คํ–‰ ํ™˜๊ฒฝ ์ œ๊ณต

    • ์š”์ฒญ/์‘๋‹ต ์ฒ˜๋ฆฌ ๋ฐ ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ ์ˆ˜ํ–‰

  • Spring Container

    • IoC/DI ๊ธฐ๋ฐ˜์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” Spring ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ์ปจํ…Œ์ด๋„ˆ

    • ๊ณตํ†ต Bean์„ ๊ด€๋ฆฌํ•˜๋Š” Root Context์™€ Web ๊ณ„์ธต Bean์„ ๊ด€๋ฆฌํ•˜๋Š” Servlet Context๋กœ ๊ตฌ์„ฑ

์š”์ฒญ-์‘๋‹ต ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ

  1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ๋„์ฐฉ

  2. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋“ฑ๋ก๋œ ํ•„ํ„ฐ ์ฒด์ธ์„ ์ ์šฉ

  3. DispatcherServlet์ด ์š”์ฒญ์„ ์ˆ˜์‹ 

  4. HandlerMapping์—์„œ ์š”์ฒญ์— ๋งค์นญ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ ํƒ์ƒ‰

  5. HandlerAdapter๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ ๊ทœ์•ฝ์„ ์ˆ˜ํ–‰

  6. ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ชจ๋ธ ๋˜๋Š” ์‘๋‹ต ๋ณธ๋ฌธ ์ƒ์„ฑ

  7. ๋ฐ˜ํ™˜ ํƒ€์ž…์— ๋”ฐ๋ผ ViewResolver ๋˜๋Š” HttpMessageConverter๊ฐ€ ์‘๋‹ต ์ƒ์„ฑ

  8. DispatcherServlet์ด ์‘๋‹ต์„ ์ปค๋ฐ‹

๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์—ญํ• 

๊ตฌ์„ฑ ์š”์†Œ
์—ญํ• 

Filter Chain

์ธ์ฆ / ๋กœ๊น… / CORS ๋“ฑ ๊ณตํ†ต ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Filter๋“ค์ด ์ฒด์ธ ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ

Filter

FilterChain์— ์—ฐ๊ฒฐ๋˜์–ด ์„œ๋ธ”๋ฆฟ ์š”์ฒญ ์ „ํ›„์— ๊ณตํ†ต ์ž‘์—…์„ ์ˆ˜ํ–‰

DispatcherServlet

์š”์ฒญ ์ˆ˜์‹  ๋ฐ ์‘๋‹ต ๋ฐ˜ํ™˜ ์—ญํ•  ์ˆ˜ํ–‰ํ•˜๋Š” Spring MVC์˜ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ

Handler Mapping

์š”์ฒญ URI๋ฅผ ๊ธฐ์ค€์œผ๋กœ Controller ํƒ์ƒ‰ ๋ฐ ๊ฒฐ์ •

Handler Interceptor

Controller ์ „ํ›„๋กœ ์‹คํ–‰๋˜์–ด ์ธ์ฆ / ๋กœ๊น… / ์ „์ฒ˜๋ฆฌ / ํ›„์ฒ˜๋ฆฌ ๋“ฑ ์ˆ˜ํ–‰

Handler Adapter

์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰

Controller

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰ ๋ฐ ์‘๋‹ต ๋ฐ์ดํ„ฐ ํ˜น์€ ๋ทฐ ๋ฐ˜ํ™˜

Handler Exception Resolver

Controller์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ View ํ˜น์€ Response๋กœ ๋ณ€ํ™˜

Application Code

์‚ฌ์šฉ์ž ์ •์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฝ”๋“œ(Service, Repository ๋“ฑ)

DelegatingFilterProxy

Spring Bean์œผ๋กœ ๋“ฑ๋ก๋œ Filter๋ฅผ ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ ์ฒด์ธ์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ก์‹œ

FilterChainProxy

Spring Security๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ณด์•ˆ ํ•„ํ„ฐ ์ฒด์ธ

Spring MVC ์ฝ”๋“œ ํ๋ฆ„ ์˜ˆ์‹œ

์•„๋ž˜๋Š” Spring MVC์—์„œ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ทฐ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ์ „์ฒด ํ๋ฆ„์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ์ด๋‹ค.

  • @Controller: ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋˜๋Š” ์›น ๊ณ„์ธต ์ปดํฌ๋„ŒํŠธ๋กœ ์ธ์‹. HandlerMapping์ด ์ด ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ํ•ธ๋“ค๋Ÿฌ๋กœ ํƒ์ƒ‰

  • @RequestMapping, @GetMapping: URI์™€ HTTP ๋ฉ”์„œ๋“œ ์กฐ๊ฑด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ • ๋ฉ”์„œ๋“œ์— ์š”์ฒญ์„ ๋งคํ•‘. ์ด ๋งคํ•‘ ์ •๋ณด๋Š” HandlerMapping์—์„œ ์‚ฌ์šฉ๋จ

  • Model: ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋กœ, ๋‚ด๋ถ€์ ์œผ๋กœ ModelMap ํ˜น์€ ModelAndView๋กœ ๊ตฌ์„ฑ๋˜์–ด ๋ทฐ ๋ Œ๋”๋ง ์‹œ ViewResolver๋กœ ์ „๋‹ฌ๋จ

  • ๋ฐ˜ํ™˜ String: ๋…ผ๋ฆฌ์  ๋ทฐ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ViewResolver๊ฐ€ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์ œ ๋ฌผ๋ฆฌ์  ๋ทฐ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ ๋ Œ๋”๋ง ์ˆ˜ํ–‰

๋™์ž‘์˜ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ /spring/example ๊ฒฝ๋กœ๋กœ HTTP ์š”์ฒญ์„ ์ „์†ก

  2. ์š”์ฒญ์€ ๋จผ์ € Filter Chain์„ ๊ฑฐ์น˜๋ฉฐ, ๋“ฑ๋ก๋œ Filter, DelegatingFilterProxy, FilterChainProxy ๋“ฑ์ด ๋ณด์•ˆ, ๋กœ๊น…, CORS ๋“ฑ์„ ์ฒ˜๋ฆฌ

  3. ํ•„ํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ์š”์ฒญ์€ Servlet Container์— ์˜ํ•ด DispatcherServlet์œผ๋กœ ์ „๋‹ฌ

  4. DispatcherServlet์€ HandlerMapping์„ ํ†ตํ•ด ํ•ด๋‹น URI์— ๋งคํ•‘๋œ ์ปจํŠธ๋กค๋Ÿฌ(SpringExampleController)์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํƒ์ƒ‰

  5. ๋งคํ•‘๋œ ํ•ธ๋“ค๋Ÿฌ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ HandlerAdapter๊ฐ€ ์‹ค์ œ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹คํ–‰ ๋กœ์ง์„ ์œ„์ž„

  6. ์š”์ฒญ ์ „์—๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ Handler Interceptor๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜์–ด ์ธ์ฆ, ๋กœ๊น… ๋“ฑ์˜ ์ „์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰

  7. ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰

  8. Model ๊ฐ์ฒด์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ (Application Code ์˜์—ญ์—์„œ ์ฒ˜๋ฆฌ)

  9. ๋…ผ๋ฆฌ ๋ทฐ ์ด๋ฆ„ "example"์„ ๋ฐ˜ํ™˜

  10. DispatcherServlet์€ ๋ฐ˜ํ™˜๋œ ๋…ผ๋ฆฌ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ViewResolver๋ฅผ ํ†ตํ•ด ์‹ค์ œ JSP/HTML ๋ทฐ๋ฅผ ๊ฒฐ์ •

  11. ๋ทฐ ๋ Œ๋”๋ง ์ค‘ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Handler Exception Resolver๊ฐ€ ์ ์ ˆํ•œ ์˜ˆ์™ธ ์‘๋‹ต์œผ๋กœ ๋ณ€ํ™˜

  12. ์ตœ์ข…์ ์œผ๋กœ ๋ทฐ๊ฐ€ ๋ Œ๋”๋ง๋˜์–ด ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต ์ „์†ก

๋ฐ˜ํ™˜ ํƒ€์ž…๊ณผ ์‘๋‹ต ์ฒ˜๋ฆฌ

Spring MVC ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ์ง€์›ํ•˜๋ฉฐ, ๊ฐ ํƒ€์ž…์— ๋”ฐ๋ผ ์‘๋‹ต ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ค.

๋ฐ˜ํ™˜ ํƒ€์ž…
์ฒ˜๋ฆฌ ๊ฒฝ๋กœ

String

ViewResolver๋กœ ๋…ผ๋ฆฌ ์ด๋ฆ„ ํ•ด์„ ํ›„ ๋ทฐ ๋ Œ๋”๋ง

ModelAndView

๋ทฐ ์ด๋ฆ„๊ณผ ๋ชจ๋ธ ๋™์‹œ ์ง€์ •

void

์š”์ฒญ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ทฐ ์„ ํƒ ๋˜๋Š” ์ง์ ‘ HttpServletResponse ์‚ฌ์šฉ

ResponseEntity

์ƒํƒœ ์ฝ”๋“œ/ํ—ค๋”/๋ณธ๋ฌธ์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ตฌ์„ฑ

@ResponseBody + T

๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋กœ ๋ณธ๋ฌธ ์ง๋ ฌํ™”

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?