[Spring] MVC 1ํŽธ (9) - ์Šคํ”„๋ง MVC ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์กฐ

2022. 3. 31. 20:26ยทSpring

๐Ÿ“Œ ์Šคํ”„๋ง MVC ๊ตฌ์กฐ

โœ… ๋™์ž‘ ์ˆœ์„œ

  1. ํ•ธ๋“ค๋Ÿฌ ์กฐํšŒ: ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ํ†ตํ•ด ์š”์ฒญ URL์— ๋งคํ•‘๋œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  2. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ์กฐํšŒ: ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  3. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ์‹คํ–‰: ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  4. ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰: ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์‹ค์ œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  5. ModelAndView ๋ฐ˜ํ™˜: ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋Š” ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ •๋ณด๋ฅผ ModelAndView๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  6. viewResolver ํ˜ธ์ถœ: ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋ฅผ ์ฐพ๊ณ  ์‹คํ–‰ํ•œ๋‹ค.
  7. View ๋ฐ˜ํ™˜ : ๋ทฐ ๋ฆฌ์กธ๋ฒ„๊ฐ€ ๋ทฐ์˜ ๋…ผ๋ฆฌ ์ด๋ฆ„์„ ๋ฌผ๋ฆฌ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ๊ณ , ๋ Œ๋”๋ง ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  8. ๋ทฐ ๋ Œ๋”๋ง : ๋ทฐ๋ฅผ ํ†ตํ•ด ๋ทฐ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

 

๐Ÿ“Œ ๊ฐ„๋‹จํ•œ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘๊ณผ ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

OldController
@Component("/spirngmvc/old-controller")
public class OldController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("OldController.handleRequest");
        return null;
    }
}
  • ModelAndView๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์Šคํ”„๋ง์˜ ๊ณผ๊ฑฐ ๋ฒ„์ „ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
  • ์ด ์ปจํŠธ๋กค๋Ÿฌ๋Š” /spirngmvc/old-controller๋ผ๋Š” ์ด๋ฆ„์˜ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์—ˆ๋‹ค.

ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘๊ฐ€์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค. → ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘, ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ

 

โœ…  ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ž๋™ ๋“ฑ๋กํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘๊ณผ ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ

HandlerMapping
0 = RequestMappingHandlerMapping // ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์ปจํŠธ๋กค๋Ÿฌ์ธ @RequestMapping์—์„œ ์‚ฌ์šฉ
1 = BeanNameUrlHandlerMapping // ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ

 

HandlerAdapter
0 = RequestMappingHandlerAdapter // ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์ปจํŠธ๋กค๋Ÿฌ์ธ @RequestMapping์—์„œ ์‚ฌ์šฉ
1 = HttpRequestHandlerAdapter // HttpRequestHandler ์ฒ˜๋ฆฌ
2 = SimpleControllerHandlerAdapter // Controller ์ธํ„ฐํŽ˜์ด์Šค(์• ๋…ธํ…Œ์ด์…˜X, ๊ณผ๊ฑฐ์— ์‚ฌ์šฉ) ์ฒ˜๋ฆฌ

 

โœ… ๊ณผ์ •

1๏ธโƒฃ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ ์กฐํšŒ

  • HandlerMapping์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•ด์„œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฐพ๋Š”๋‹ค.
  • ๋นˆ ์ด๋ฆ„์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฐพ์•„์ฃผ๋Š” BeanNameUrlHandlerMapping์ด ์‹คํ–‰๋˜๊ณ , ํ•ธ๋“ค๋Ÿฌ์ธ OldController๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

2๏ธโƒฃ ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ์กฐํšŒ

  • HandlerAdapter์˜ supports()๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœํ•œ๋‹ค.
  • SimpleControllerHandlerAdapter๊ฐ€ Controller ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

 

3๏ธโƒฃ ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ์‹คํ–‰

- Dispatcher ์„œ๋ธ”๋ฆฟ์ด ์กฐํšŒํ•œ SimpleControllerHandlerAdapter๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ํ•ธ๋“ค๋Ÿฌ ์ •๋ณด๋„ ํ•จ๊ป˜ ๋„˜๊ฒจ์ค€๋‹ค.

- ์–ด๋Œ‘ํ„ฐ๋Š” ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๐Ÿ“Œ ๊ฐ„๋‹จํ•œ ๋ทฐ์™€ ๋ทฐ ๋ฆฌ์กธ๋ฒ„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

OldController
return new ModelAndView("new-form");
  • View๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ ์ถ”๊ฐ€

 

โœ… ViewResolver ์„ค์ • ์ •๋ณด 

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
  • application.properties์— ์„ค์ • ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” InternalResourceViewResolver๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด๋•Œ ์ด ์„ค์ • ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ทฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

โœ… ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ž๋™ ๋“ฑ๋กํ•˜๋Š” ๋ทฐ ๋ฆฌ์กธ๋ฒ„

ViewResolver
1 = BeanNameViewResolver // ๋นˆ ์ด๋ฆ„์œผ๋กœ ๋ทฐ๋ฅผ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (์˜ˆ: ์—‘์…€ ํŒŒ์ผ ์ƒ์„ฑ ๊ธฐ๋Šฅ์— ์‚ฌ์šฉ)
2 = InternalResourceViewResolver // JSP๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ทฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

โœ… ๊ณผ์ •

1๏ธโƒฃ ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ํ˜ธ์ถœ

  • ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด new-form์ด๋ผ๋Š” ๋…ผ๋ฆฌ ๋ทฐ ์ด๋ฆ„์„ ํš๋“ํ•œ๋‹ค.

2๏ธโƒฃ ViewResolver ํ˜ธ์ถœ

  • new-form์ด๋ผ๋Š” ๋ทฐ ์ด๋ฆ„์œผ๋กœ viewResolver๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœํ•œ๋‹ค.
  • new-form์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋“ฑ๋ก๋œ ์Šคํ”„๋ง ๋นˆ์ด ์—†์œผ๋ฏ€๋กœ InternalResourceViewResolver๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

3๏ธโƒฃ InternalResourceViewResolver

  • InternalResourceView๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

4๏ธโƒฃ ๋ทฐ ๋ Œ๋”๋ง

  • view.render()๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  InternalResourceView๋Š” forward()๋ฅผ ์‚ฌ์šฉํ•ด์„œ JSP๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 


๊ฐ•์˜ ๋งํฌ

 

์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ  - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์›น ๊ธฐ์ˆ ์„ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., -

www.inflearn.com

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring] MVC 1ํŽธ (10) - ์‹ค์šฉ์ ์ธ ์Šคํ”„๋ง MVC  (0) 2022.03.31
[Spring] MVC 1ํŽธ (8) - MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋งŒ๋“ค๊ธฐ v4,v5  (0) 2022.03.31
[Spring] MVC 1ํŽธ (7) - MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋งŒ๋“ค๊ธฐ v1, v2, v3  (0) 2022.03.29
'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring] MVC 1ํŽธ (10) - ์‹ค์šฉ์ ์ธ ์Šคํ”„๋ง MVC
  • [Spring] MVC 1ํŽธ (8) - MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋งŒ๋“ค๊ธฐ v4,v5
  • [Spring] MVC 1ํŽธ (7) - MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋งŒ๋“ค๊ธฐ v1, v2, v3
  • [Spring] MVC 1ํŽธ (6) - MVC ํŒจํ„ด ์ ์šฉ
Sue
Sue
๊ฐœ๋ฐœ ๊ณต๋ถ€ ๋กœ๊ทธ
  • Sue
    Sue's devlog
    Sue
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Sue
[Spring] MVC 1ํŽธ (9) - ์Šคํ”„๋ง MVC ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์กฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”