Home > Spring > πŸƒ[Spring] Spring MVCμ—μ„œ `Model` 객체.

πŸƒ[Spring] Spring MVCμ—μ„œ `Model` 객체.
Spring Framework

πŸƒ[Spring] Spring MVCμ—μ„œ Model 객체.

1️⃣ Model 객체.

  • Spring MVCμ—μ„œ Model κ°μ²΄λŠ” μ»¨νŠΈλ‘€λŸ¬μ™€ λ·° μ‚¬μ΄μ—μ„œ 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
  • μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μƒμ„±λœ 데이터λ₯Ό Model 객체에 담아두면, 이 λ°μ΄ν„°λŠ” λ·° ν…œν”Œλ¦Ώ(예: Thymeleaf, JSP)μ—μ„œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.
  • Model κ°μ²΄λŠ” μš”μ²­μ— λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ μ–΄λ–€ 데이터λ₯Ό 뷰둜 보내야 ν•˜λŠ”μ§€ κ²°μ •ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

2️⃣ Model 객체의 μ£Όμš” κΈ°λŠ₯.

  • 1. 데이터 μ €μž₯ 및 전달.
    • Model 객체에 데이터λ₯Ό μ €μž₯ν•˜λ©΄, ν•΄λ‹Ή λ°μ΄ν„°λŠ” 뷰에 μ „λ‹¬λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ ν‘œμ‹œλ©λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, μ‚¬μš©μžμ˜ μ΄λ¦„μ΄λ‚˜ λ¦¬μŠ€νŠΈμ™€ 같은 데이터λ₯Ό 뷰에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 2. ν‚€-κ°’ 쌍 ν˜•νƒœλ‘œ 데이터 관리.
    • Model κ°μ²΄λŠ” 데이터λ₯Ό ν‚€-κ°’ 쌍 ν˜•νƒœλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
      • λ·°μ—μ„œ 이 데이터λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” ν‚€λ₯Ό 톡해 μ ‘κ·Όν•©λ‹ˆλ‹€.
  • 3. λ·° ν…œν”Œλ¦Ώμ—μ„œ 데이터 μ‚¬μš©.
    • Model에 μΆ”κ°€λœ λ°μ΄ν„°λŠ” λ·° ν…œν”Œλ¦Ώμ—μ„œ λ³€μˆ˜λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
      • λ·° ν…œν”Œλ¦Ώ 엔진(예: Thymeleaf, JSP)은 이 데이터λ₯Ό μ΄μš©ν•΄ 동적인 HTML을 μƒμ„±ν•˜κ³ , 이λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

3️⃣ Model 객체의 μ‚¬μš© 예.

@Controller
public class GreetingController {
    
    @GetMapping("/greeting")
    public String greeting(Model model) {
        model.addAttribute("name", "John");
        model.addAttribute("message", "Hello welcome to our website!");
        
        // "greeting"μ΄λΌλŠ” λ·° 이름을 λ°˜ν™˜
        return "greeting";
    }
}
  • μœ„ μ˜ˆμ œμ—μ„œ greeting() λ©”μ„œλ“œλŠ” Model 객체에 "name" κ³Ό "message" λΌλŠ” 두 가지 데이터λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
    • 이 λ°μ΄ν„°λŠ” λ·° 이름 "greeting"에 μ „λ‹¬λ˜λ©°, ν•΄λ‹Ή λ·° ν…œν”Œλ¦Ώμ—μ„œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ λ·° ν…œν”Œλ¦Ώμ—μ„œμ˜ μ‚¬μš©(Thymeleaf)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Greeting Page</title>
</head>
<body>
    <h1 th:text="${message}">Default Message</h1>
    <p>Hello, <span th:text="${name}">User</span>!</p>
</body>
  • 이 Thymeleaf ν…œν”Œλ¦Ώμ—μ„œ ${message} 와 ${name} 은 Model 객체에 λ‹΄κΈ΄ 데이터λ₯Ό μ‚¬μš©ν•΄ λ™μ μœΌλ‘œ μ½˜ν…μΈ λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
    • μ»¨νŠΈλ‘€λŸ¬μ—μ„œ Model에 μΆ”κ°€λœ "Hello, welcome to our website!"와 "John"이 뷰에 λ Œλ”λ§λ©λ‹ˆλ‹€.

5️⃣ Model, ModelMap, ModelAndView

  • Spring MVCμ—μ„œ Model 외에도 ModelMapκ³Ό ModelAndViewλΌλŠ” μœ μ‚¬ν•œ 객체듀이 μžˆμŠ΅λ‹ˆλ‹€.
    • Model : κ°„λ‹¨ν•œ μΈν„°νŽ˜μ΄μŠ€λ‘œ, 데이터 μ €μž₯ 및 전달을 μœ„ν•œ κ°€μž₯ 기본적인 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.
    • ModelMap : Model의 κ΅¬ν˜„μ²΄λ‘œ, 데이터λ₯Ό 맡 ν˜•μ‹μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
    • ModelAndView : λͺ¨λΈ 데이터와 λ·° 이름을 ν•¨κ»˜ λ°˜ν™˜ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. ν•œ λ²ˆμ— λͺ¨λΈκ³Ό λ·° 정보λ₯Ό λͺ¨λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

6️⃣ μš”μ•½.

  • Model κ°μ²΄λŠ” Spring MVCμ—μ„œ μ»¨νŠΈλ‘€λŸ¬κ°€ 뷰에 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 동적인 μ›Ή νŽ˜μ΄μ§€λ₯Ό μ‰½κ²Œ 생성할 수 있으며, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 응닡 κ²°κ³Όλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 효과적으둜 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.