์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด
2. MVC์ ํ ํ๋ฆฟ ์์ง
MVC๋ Model, View, Controller๋ฅผ ๋งํ๋ค.
๊ณผ๊ฑฐ์๋ Controller์ View๊ฐ ๋ฐ๋ก ๋ถ๋ฆฌ๋์ด ์์ง ์์๊ณ View์์ ๋ชจ๋ ๊ฒ์ ๋ค ์ฒ๋ฆฌํ๋ค.
์ด๋ฌํ ๋ฐฉ์์ ๋ชจ๋ธ 1 ๊ตฌ์กฐ๋ผ๊ณ ํ๊ณ JSP์์ ์ฌ์ฉ๋์๋ค.
ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ๊ด์ฌ์ฌ๋ ์ญํ ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
View๋ ํ๋ฉด์ ๊ทธ๋ฆฌ๋๋ฐ ์ง์คํด์ผ ํ๊ณ
Controller๋ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ์๋ฒ๋ ๋ด๋ถ์ ์ธ ๊ฒ์ ์ฒ๋ฆฌํ๋๋ฐ ์ง์คํด์ผ ํ๊ณ
Model์ ํ๋ฉด์์ ํ์ํ ๊ฒ๋ค์ ์ ์ฅํ๊ณ ํ๋ฉด์ ์ ๋ฌํ๋๋ฐ ์ง์คํด์ผ ํ๋ค.
1) ์ ์ฉ
Controller
- ๊ธฐ์กด์ ๊ตฌํํ HelloController ์์ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ๊ฒ์ด๋ค.
- ์ด์ ์ ๊ตฌํํ ๋ฉ์๋๋ ์ฝ๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ฐ์์๋ค.
- ์๋ก์ด ๋ฉ์๋๋ ์น URL์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์ ๋ฐ์ดํฐ์ ์ ์ฅํ ๊ฒ์ด๋ค. (@RequestParam)
package hello.hello.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller // ์ปจํธ๋กค๋ฌ์์ ์๋ ค์ฃผ๋ ์ด๋
ธํ
์ด์
public class HelloController {
@GetMapping("hello") // ์น ์ดํ๋ฆฌ์ผ์ด์
์์ '/hello'๋ก ๋ค์ด์ค๋ฉด ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello"; // model์ ๊ฐ์ hello ํ๋ฉด์ ์คํ์ํค๋๋ก ํ๋ค.
}
@GetMapping("hello-mvc")
// ์น URL์ ํตํด ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌ ๋ฐ๋๋ค.
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
View
- {name}๋ Controller์์ ์ ๋ ฅํ key ๊ฐ์ผ๋ก ์คํ ํ๋ฉด์ ํ๋ผ๋ฏธํฐ(value) ๊ฐ์ด ๋ณด์ด๊ฒ ๋๋ค.
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
2) thymeleaf ๊ธฐ๋ฅ ์๊ฐ
์๋ ์ฝ๋์์ ํ์ด๋ผ์ดํธ ์ฝ๋๋ ์ ํ์ํ ๊ฒ์ผ๊น?
์ฌ์ค ์์ด๋ ๋์ํ๋ค!
์๋ฒ ์์ด html ํ์ผ์ ์ด์ด ํ๋ฉด์ ๋์ธ ์ ์๋๋ก ํด์ฃผ๋ ๊ฒ์ด๋ค.
ํ๋ฉด์ ํ์ด๋ผ์ดํธ ์ฝ๋๊ฐ ๋ณด์ด๊ฒ ๋๋ค.
3) ์คํ ํ๋ฉด
์ด์ ์ ํ๋ ๋ฐฉ์๊ณผ ๊ทธ๋๋ก ์ ์ํ๋ฉด ์๋์ ๊ฐ์ด ์๋ฌ ํ์ด์ง๊ฐ ๋ํ๋ ๊ฒ์ด๋ค.
์ ๊ทธ๋ด๊น?
ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ฅผ ํ์ธํด๋ณด์. (Win Ctrl+P)
required์ default ๊ฐ์ด true์ธ๋ฐ, ๋ฌด์กฐ๊ฑด ๊ฐ์ ๋ฃ์ด์ผ ํ๋ค๋ ๋ป์ด๋ค.
ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฃ์ด์ฃผ๋ ์ ์ ํ๋ฉด์ด ๋ณด์ด๊ฒ ๋๋ค. (http Get ๋ฐฉ์)
4) ๋์ ๋ฐฉ์
์น ๋ธ๋ผ์ฐ์ ์์ ์ด๋ค ํ์ด์ง๋ฅผ ๋์ง๋ฉด ๋ด์ฅ ํฐ์บฃ ์๋ฒ๊ฐ ๋ฐ์์ ์คํ๋งํํ
์ ๋ฌํ๋ค.
์ ๋ฌ๋ฐ์ ์คํ๋ง์ ๋งค์นญ ๊ฐ๋ฅํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ํด๋น ๋ฉ์๋๋ฅผ ์คํ์ํจ๋ค. (@GetMapping)
๋งค์นญ๋ ๋ฉ์๋๋ ๋ฆฌํด์ ํ ๋ hello-template์ ๋๊ธฐ๊ณ Model์๋ (name:spring)์ ๋ด์ ๋ณด๋ธ๋ค.
๊ทธ๋ฆฌ๊ณ viewResolver๊ฐ ํ๋ฉด์ ์ฐพ๊ณ ํ
ํ๋ฆฟ ์์ง์ ์ฐ๊ฒฐํ๋ค.
๊ทธ ํ ํ ํ๋ฆฟ ์์ง์ด ๋ ๋๋ง์ ํตํด ๋ณํ๋ html์ ์น ๋ธ๋ผ์ฐ์ ์ ๋ฐํํ๋ค.