Home > Backend > Spring > πŸƒ[Spring] `.addAttribute()` λ©”μ„œλ“œ.

πŸƒ[Spring] `.addAttribute()` λ©”μ„œλ“œ.
Spring Framework

πŸƒ[Spring] .addAttribute() λ©”μ„œλ“œ.

1️⃣ .addAttribute() λ©”μ„œλ“œ.

  • .addAttribute()λŠ” Spring MVCμ—μ„œ Model λ˜λŠ” ModelMap객체의 λ©”μ„œλ“œλ‘œ, μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 뷰둜 전달할 데이터λ₯Ό μΆ”κ°€ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • 이 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ»¨νŠΈλ‘€λŸ¬κ°€ μ²˜λ¦¬ν•œ κ²°κ³Όλ₯Ό 뷰에 μ „λ‹¬ν•˜κ³ , λ·°λŠ” 이 데이터λ₯Ό μ‚¬μš©ν•΄ λ™μ μœΌλ‘œ μ½˜ν…μΈ λ₯Ό λ Œλ”λ§ν•©λ‹ˆλ‹€.

2️⃣ μ£Όμš” κΈ°λŠ₯.

  • λͺ¨λΈμ— 데이터 μΆ”κ°€
    • addAttribute()λ₯Ό μ‚¬μš©ν•˜μ—¬ ν‚€-κ°’ 쌍 ν˜•νƒœλ‘œ 데이터λ₯Ό λͺ¨λΈμ— μΆ”κ°€ν•©λ‹ˆλ‹€.
      • 이 λ°μ΄ν„°λŠ” 이후 λ·°μ—μ„œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ·° λžœλ”λ§μ— 데이터 전달
    • λͺ¨λΈμ— μΆ”κ°€λœ λ°μ΄ν„°λŠ” λ·° ν…œν”Œλ¦Ώ(예: Thymeleaf, JSP)μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ©°, 이λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ™μ μœΌλ‘œ μƒμ„±λœ HTML을 λ°˜ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ μ‚¬μš© μ˜ˆμ‹œ.

@Controller
public class HomeController {
    
    @GetMapping("/home")
    public String home(Model model) {
        // λͺ¨λΈμ— 데이터λ₯Ό μΆ”κ°€
        model.addAttribute("message", "Welcome to the Home Page!");
        model.addAttribute("date", LocalDate.now());
        
        // "home"μ΄λΌλŠ” λ·° 이름을 λ°˜ν™˜
        return "home";
    }
}
  • μœ„ μ½”λ“œμ—μ„œ home() λ©”μ„œλ“œλŠ” /home URL둜 GET μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ μ‹€ν–‰λ©λ‹ˆλ‹€.
  • Model 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ "message"와 "date"λΌλŠ” 두 개의 속성을 μΆ”κ°€ν•©λ‹ˆλ‹€.
  • 이 속성듀은 β€œhomeβ€μ΄λΌλŠ” λ·°(예: home.html λ˜λŠ” home.jsp)μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

4️⃣ λ·°μ—μ„œμ˜ μ‚¬μš© μ˜ˆμ‹œ(Thymeleaf)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Home Page</title>
</head>
<body>
    <h1 th:text="${message}">Default Message</h1>
    <p>Today's date is: <span th:text="${date}">01/01/2024</span></p>
</body>
</html>
  • μœ„μ˜ Thymeleaf ν…œν”Œλ¦Ώμ—μ„œ ${message}와 ${date}λŠ” μ»¨νŠΈλ‘€λŸ¬μ—μ„œ addAttribute()λ₯Ό 톡해 μΆ”κ°€λœ 데이터λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ œκ³΅ν•œ "Welcome to the Home Page!" 와 ν˜„μž¬ λ‚ μ§œκ°€ 뷰에 λ Œλ”λ§λ©λ‹ˆλ‹€.

5️⃣ .addAttribute()의 λ‹€μ–‘ν•œ μ‚¬μš© 방법.

  • 1. 킀와 κ°’ 쌍으둜 μ‚¬μš©
    • κ°€μž₯ 기본적인 μ‚¬μš© λ°©λ²•μœΌλ‘œ, 첫 번째 인수둜 μ†μ„±μ˜ 이름을, 두 번째 인수둜 μ†μ„±μ˜ 값을 μ§€μ •ν•©λ‹ˆλ‹€.
      model.addAttribute("username", "JohnDoe");
      
  • 2. ν‚€ 없이 κ°’λ§Œ 전달
    • ν‚€λ₯Ό μƒλž΅ν•˜κ³  κ°’λ§Œ 전달할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
      • 이 경우 Spring은 μ „λ‹¬λœ 객체의 클래슀 이름을 κΈ°λ³Έ ν‚€λ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.(첫 κΈ€μžλŠ” μ†Œλ¬Έμžλ‘œ).
        User user = new User("John", "Doe");
        model.addAttribute(user);
        // "user"λΌλŠ” ν‚€λ‘œ λͺ¨λΈμ— μΆ”κ°€λ©λ‹ˆλ‹€.
        
  • 3. 체이닝(Chaining)
    • addAttribute()λŠ” λ©”μ„œλ“œ 체이닝이 κ°€λŠ₯ν•˜μ—¬, μ—¬λŸ¬ 개의 속성을 ν•œ λ²ˆμ— μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      model.addAttribute("name", "Jane")
         .addAttribute("age", 30)
         .addAttribute("city", "New York");
      
  • .addAttribute()λŠ” Spring MVCμ—μ„œ μ»¨νŠΈλ‘€λŸ¬μ™€ λ·° μ‚¬μ΄μ˜ 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” μ€‘μš”ν•œ 역할을 ν•˜λ©°, 동적인 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— ν•„μˆ˜μ μΈ μš”μ†Œμž…λ‹ˆλ‹€.