Home > Backend > Spring > ๐Ÿƒ[Spring] Spring MVC์—์„œ `View` ๊ฐ์ฒด.

๐Ÿƒ[Spring] Spring MVC์—์„œ `View` ๊ฐ์ฒด.
Spring Framework

๐Ÿƒ[Spring] Spring MVC์—์„œ View ๊ฐ์ฒด.

1๏ธโƒฃ View ๊ฐ์ฒด.

  • Spring MVC์—์„œ View ๊ฐ์ฒด๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ตœ์ข… ์ถœ๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
  • View ๊ฐ์ฒด๋Š” ์ฃผ์–ด์ง„ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTML, JSON, XML, PDF ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ์‘๋‹ต์„ ๋ Œ๋”๋ง ํ•ฉ๋‹ˆ๋‹ค.
  • Spring MVC์˜ View ๊ฐ์ฒด๋Š” ์ถ”์ƒํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋‚˜ ์ถœ๋ ฅ ํ˜•์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ View ๊ฐ์ฒด์˜ ์ฃผ์š” ์—ญํ• .

  • 1. ๋ชจ๋ธ ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง
    • View ๊ฐ์ฒด๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ „๋‹ฌ๋œ Model ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ๋ฅผ ๋“ค์–ด, HTML ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, JSON์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•ด API ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 2. ์‘๋‹ต ์ƒ์„ฑ
    • ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†ก๋  ์ตœ์ข… ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์— ํ‘œ์‹œ๋  HTML ํŽ˜์ด์ง€์ผ ์ˆ˜๋„ ์žˆ๊ณ , RESTful API์˜ JSON ์‘๋‹ต์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 3. ์ปจํ…์ธ  ํƒ€์ž… ์„ค์ •
    • View ๊ฐ์ฒด๋Š” ์ƒ์„ฑ๋œ ์‘๋‹ต ์ปจํ…์ธ  ํƒ€์ž…(์˜ˆ: text/html, application/json, application/pdf ๋“ฑ)์„ ์„ค์ •ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ View ๊ฐ์ฒด์˜ ์ข…๋ฅ˜.

  • Spring MVC์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์œ ํ˜•์˜ View ๊ฐ์ฒด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋“ค์€ ๋‹ค์–‘ํ•œ ์‘๋‹ต ํ˜•์‹์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

      1. JSP(JavaServer Page)

  • Spring MVC์—์„œ ๊ฐ€์žฅ ์ „ํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ทฐ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.
  • JSP๋Š” HTML๊ณผ Java ์ฝ”๋“œ๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ๋™์ ์ธ ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

2. Thymeleaf

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

3. FreeMarker

  • HTML๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ๋‹ค์–‘ํ•œ ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์ž…๋‹ˆ๋‹ค.

4. Velocity

  • Apache ํ”„๋กœ์ ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์œผ๋กœ, FreeMarker์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋‹ค์–‘ํ•œ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์‘๋‹ด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. JSON/XML View

  • MappingJackson2JsonView ์™€ ๊ฐ™์€ JSON ๋˜๋Š” XML ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ JSON ๋˜๋Š” XML ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ RESTful API ์‘๋‹ต์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. PDF/Excel View

  • AbstractPdfView, AbstractXlsView ์™€ ๊ฐ™์€ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PDF๋‚˜ Excel ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4๏ธโƒฃ View ๊ฐ์ฒด ์‚ฌ์šฉ ์˜ˆ์‹œ

  • ์ปจํŠธ๋กค๋Ÿฌ์—์„œ View ๊ฐ์ฒด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋ทฐ ๋ฆฌ์กธ๋ฒ„(View Resolver)๊ฐ€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
@Controller
public class GreetingController {
    
    @GetMapping("/greeting")
    public ModelAndView greeting() {
        ModelAndView mav = new ModelAndView("greeting");
        mav.addObject("message", "Hello welcome to our website!");
        return mav;
    }
}
  • ์œ„์˜ ์˜ˆ์ œ์—์„œ ModelAndView ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ View๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • greeting์ด๋ผ๋Š” ๋ทฐ ์ด๋ฆ„์€ ๋ณดํ†ต JSP๋‚˜ Thymeleaf ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ๊ณผ ๋งคํ•‘๋˜๋ฉฐ, ์ด ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์ด ๋ Œ๋”๋ง ๋ฉ๋‹ˆ๋‹ค.

5๏ธโƒฃ ๋ทฐ ๋ฆฌ์กธ๋ฒ„(View Resolver)

  • Spring MVC์—์„œ ๋ทฐ ๋ฆฌ์กธ๋ฒ„(View Resolver)๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๋ทฐ ์ด๋ฆ„์„ ์‹ค์ œ View ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋‚˜ ๋ทฐ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•  ์ ์ ˆํ•œ View ๊ฐ์ฒด๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ทฐ ๋ฆฌ์กธ๋ฒ„ ์„ค์ •์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      @Bean
      public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
      }
      
  • ์œ„ ์„ค์ •์—์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ greeting์ด๋ผ๋Š” ๋ทฐ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด, InternalResourceViewResolver๋Š” /WEB-INF/views/greeting.jsp ๋ผ๋Š” JSP ํŒŒ์ผ์„ ์ฐพ์•„์„œ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

6๏ธโƒฃ ์š”์•ฝ.

  • View ๊ฐ์ฒด๋Š” Spring MVC์—์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๊ณ  ๋ Œ๋”๋งํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๊ฐ์ฒด๋Š” ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ข… ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ํ˜•์‹์˜ ์ถœ๋ ฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Spring MVC๋Š” View ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.