Home > Backend > Spring > ๐Ÿƒ[Spring] `@ModelAttribute` ์• ๋…ธํ…Œ์ด์…˜

๐Ÿƒ[Spring] `@ModelAttribute` ์• ๋…ธํ…Œ์ด์…˜
Spring Framework

๐Ÿƒ[Spring] @ModelAttribute ์• ๋…ธํ…Œ์ด์…˜.

1๏ธโƒฃ @ModelAttribute

  • @ModelAttribute๋Š” Spring Framework์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ, Spring MVC์—์„œ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ์™€ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ฑฐ๋‚˜, ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐ˜ํ™˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ์— ์ „๋‹นํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • @ModelAttribute๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ ๋ฉ”์„œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ์—์„œ ์‚ฌ์šฉ(@ModelAttribute ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ)

  • @ModelAttribute๋ฅผ ๋ฉ”์„œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ ์šฉํ•˜๋ฉด, Spring์€ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๋˜๋Š” ํผ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์œผ๋กœ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ.

@Controller
public class UserController {
    
    @PostMapping("/register")
    public String registerUser(@ModelAttribute User user) {
        // User ๊ฐ์ฒด๋Š” ํผ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.
        // ์ด์ œ user ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        System.out.println("User Name: " + user.getName());
        return "registrationSuccess";
    }
}
  • ์œ„ ์˜ˆ์‹œ์—์„œ @ModelAttribute๋Š” User ๊ฐ์ฒด๋ฅผ ํผ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑํ•˜๊ณ , name, email ๋“ฑ์˜ ํ•„๋“œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์œผ๋กœ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ๋ฉ”์„œ๋“œ์— ์‚ฌ์šฉ(@ModelAttribute ๋ฉ”์„œ๋“œ)

  • @ModelAttribute๋ฅผ ๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ์— ์ ์šฉํ•˜๋ฉด, ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ชจ๋“  ์š”์ฒญ ์ „์— ์‹คํ–‰๋˜์–ด, ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ธ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๊ฐ์ฒด๋Š” ์ดํ›„ ๋ทฐ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      ```java
      @Controller
      public class UserController {

    @ModelAttribute(โ€œuserTypesโ€)
    public List populateUserTypes() { // ์ด ๋ฉ”์„œ๋“œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ชจ๋“  ์š”์ฒญ ์ „์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. // ์ด ๋ฆฌ์ŠคํŠธ๋Š” ๋ชจ๋ธ์— ์ถ”๊ฐ€๋˜์–ด ๋ทฐ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. return Arrays.asList("Admin", "User", "Guest"); }

    @GetMapping(โ€œ/registerโ€)
    public String showRegistrationForm(Model model) {
    model.addAttribute(โ€œuserโ€, new User());
    return โ€œregisterโ€;
    }
    }
    ```

  • ์œ„ ์˜ˆ์‹œ์—์„œ populateUserTypes() ๋ฉ”์„œ๋“œ๋Š” @ModelAttribute("userTypes")๋กœ ์„ ์–ธ๋˜์–ด, ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฆฌ์ŠคํŠธ๋Š” userTypes๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ชจ๋ธ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
    • ์ด ๊ฐ’์€ ๋ทฐ(์˜ˆ: JSP, Thymeleaf ํ…œํ”Œ๋ฆฟ ๋“ฑ)์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3๏ธโƒฃ @ModelAttribute ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ ์š”์•ฝ.

  • 1. ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์ด ๊ฐ์ฒด๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.
  • 2. ๋ชจ๋ธ ์ถ”๊ฐ€ : ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋ชจ๋ธ์— ์ถ”๊ฐ€ํ•˜์—ฌ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋“  ๋ทฐ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๋‘๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด @ModelAttribute๋Š” Spring MVC์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ๊ณผ ๋ทฐ์— ์ „๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ด€๋ฆฌ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.