Home > 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 객체λ₯Ό 직접 μ‚¬μš©ν•˜κ±°λ‚˜ λ·° 리쑸버λ₯Ό 톡해 κ°„μ ‘μ μœΌλ‘œ μ‚¬μš©ν•˜μ—¬, ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ΅œμ’… κ²°κ³Όλ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.