Home > Backend > 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์—์„œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ทฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ๋™์ ์ธ ์›น ํŽ˜์ด์ง€๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.