[Spring] 2.์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด
0. ์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด
- ์ ์ ์ปจํ ์ธ : ์๋ฒ์์ ํ๋ ๊ฒ ์์ด ํ์ผ์ ์น๋ธ๋ผ์ฐ์ ์ ๊ทธ๋๋ก ๋ด๋ ค์ฃผ๋ ๊ฒ
- MVC์ ํ ํ๋ฆฟ ์์ง : HTML์ ๊ทธ๋ฅ ์ฃผ๋ ๊ฒ์ด ์๋๋ผ ์๋ฒ์์ ํ๋ก๊ทธ๋๋ฐํด์ ์ฃผ๋ ๊ฒ
= Model View Controller
- API : JSON(๋ฐ์ดํฐ ๊ตฌ์กฐ ํฌ๋งท)์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ดํฐ ์ ๋ฌ = React, ์๋ฒํต์
1. ์ ์ ์ฝํ ์ธ
- ์คํ๋ง ๋ถํธ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต
๋งํฌ : https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#web
- resources - static
hello-static.html
์์ฑ
๋์์๋ฆฌ : ์น๋ธ๋ผ์ฐ์ -> localhost8080/hello-static -> ๋ด์ฅ ํฐ์บฃ์๋ฒ ์์ฒญ ๋ฐ์ -> ์คํ๋ง ๋๊น ->
1) ์คํ๋ง์ ์ปจํธ๋กค๋ฌ์์ ํ์ธ (์ปจํธ๋กค๋ฌ๊ฐ ์ฐ์ ์์) -> ์์ ->
2) ๋ด๋ถ resources์์์ ์ฐพ์ -> ๋ธ๋ผ์ฐ์ ๋ก ๋ฐํ
2. MVC์ ํ ํ๋ฆฟ ์์ง
- Model Veiw Controller
[Controller]
- ๋น์ฆ๋์ค ๋ก์ง ์ง์ค
- ๋ด๋ถ ์ฒ๋ฆฌ ์ง์ค
Hello Controller
// ์์์๋ string์ ์ง์ ๋ฐ์
// ์ฌ๊ธฐ์๋ @RequestParam์ ์ด์ฉ,
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
@RequestParam("name")
[View]
- ํ๋ฉด์ ๊ทธ๋ฆฌ๋๋ฐ ์ญ๋ ์ง์ค
hello-template.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<!--์๋
ํ์ธ์ ์๋ = ์๋ฒ์์ด html ํ์ธํ๊ธฐ ์ํด-->
<p th:text="'Hello. ' + ${name}">์๋
ํ์ธ์ ์๋</p>
</body>
</html>
-> ์ฒ์์ ์ค๋ฅ ๋ฐ์ (ํ๋ผ๋ฏธํฐ ๊ฐ ์ค์ ์๋์ด์๊ธฐ ๋๋ฌธ)
-> ์ฃผ์์ฐฝ์ url ๋ค์ ?name=spring
ํ๋ผ๋ฏธํฐ ๊ฐ์ด addAtrribute์ value๊ฐ์ผ๋ก ๋ค์ด๊ฐ๊ณ ๊ทธ๊ฒ attributeName์ ์ ์ฅ๋ผ์ ํ๋ฉด์ ๋์ค๋ ๊ฒ
= ${} ๋ชจ๋ธ์์ ๊ฐ์ ๊บผ๋ด๋ ๊ฒ์
๋์์๋ฆฌ
์น๋ธ๋ผ์ฐ์ -> localhost8080/mvc -> ๋ด์ฅ ํฐ์บฃ์๋ฒ -> ์ปจํธ๋กค๋ฌ์์ ๋งตํ๋จ์ ํ์ธ -> returnํ ๋ hello-template์ model(name : spring) -> viewResolver (ํ๋ฉด ํด๊ฒฐ์, ๋ทฐ ์ฐพ์์ฃผ๊ณ ํ ํ๋ฆฟ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ) -> ํ ํ๋ฆฟ ์์ง์ด ์ฒ๋ฆฌ=๋ ๋๋ง -> ๋ณํ ํ HTML ์ ์น๋ธ๋ผ์ฐ์ ์ ๋ฐํ
(์ ์ ์ฝํ ์ธ ์์ ์ฐจ์ด์ ์)
3. API
@ResponseBody
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name, Model model) {
return "hello" + name;
}
-> @ResponseBody : http์ body์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ฃ๊ฒ ๋ค๋ ์๋ฏธ
-> ๋ทฐ๊ฐ ์๊ณ ๊ทธ๋ฅ ๋ฌธ์๊ฐ ๊ทธ๋๋ก ๋ด๋ ค๊ฐ
ex) ์ฃผ์์ ?name=spring (HTML ํ๊ทธ ๊ฐ์๊ฑฐ ์์)
ํด๋์ค
@GetMapping("hello-class")
@ResponseBody
public Hello helloAip(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
{ "name" : "spring"}
-> JSON ๋ฐฉ์์ผ๋ก ๋์ด
(๊ณผ๊ฑฐ xml = html ํ๊ทธ ์ฌ์ฉ)
-> ์คํ๋ง์ ๊ฐ์ฒด๋ฅผ JSON ์ผ๋ก ๋ฐํํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์
Getter Setter
- java bean ๊ท์ฝ, java bean ํ์ค๋ฐฉ์ = property ์ ๊ทผ ๋ฐฉ์
= private ์ธ๋ถ์์ ๋ชป๊บผ๋ด๊ฒ ํด์ ๋ฉ์๋๋ฅผ ํตํด ์ ๊ทผํ๋๋ก
๋์์๋ฆฌ
localhost8080/hello-api -> ํฐ์บฃ ๋ด์ฅ์๋ฒ -> ์ปจํธ๋กค๋ฌ O -> @ResponseBody -> ๋ฌธ์๊ฐ ์๋๋ผ ๊ฐ์ฒด -> ๋ํดํธ : JSON ๋ฐฉ์์ผ๋ก ๋ง๋ค๊ธฐ (httpmessageconverter / ๋จ์ ๋ฌธ์๋ฉด string converter, ๊ฐ์ฒด๋ฉด json converter) -> ๋ธ๋ผ์ฐ์ ์ ์๋ต
[์ ๋ฆฌ]
@ResponseBody ์ฌ์ฉ
- HTTP์ BODY์ ๋ฌธ์ ๋ด์ฉ์ ์ง์ ๋ฐํ
- 'viewResolver'๋์ ์ 'HttpMesseageConverter' ๊ฐ ๋์
- ๊ธฐ๋ณธ๋ฌธ์์ฒ๋ฆฌ : StringHttpMessageConverter
- ๊ธฐ๋ณธ๊ฐ์ฒด์ฒ๋ฆฌ : MappingJackson2HttpMessageConverter (Jackson = ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ library)
* jackson ๋ง๊ณ ๋ ๊ตฌ๊ธ์ GSON
- byte ์ฒ๋ฆฌ ๋ฑ๋ฑ ๊ธฐํ ์ฌ๋ฌ HttpMessageConverter๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ฑ๋ก๋์ด์์
* ์ฐธ๊ณ : ํด๋ผ์ด์ธํธ์ HTTP Accept ํค๋์ ์๋ฒ์ ์ปจํธ๋กค๋ฌ ๋ฐํ ํ์ ์ ๋ณด ๋์ ์กฐํฉํด์
'HttpMessageConverter' ๊ฐ ์ ํ๋จ
= Accept ํค๋์ xml, json ์ ๋ณด ์์ผ๋ฉด ํด๋น ์ ๋ณด๋ก ๋ฐํ, ์์ผ๋ฉด ์๋ฒ ์ปจํธ๋กค๋ฌ
* cmd + shift + enter = ์์ฑ์์ผ์ค * cmd + N = ์ฝ๋์์ฑ (getter setter) * cmd + P = ํ๋ผ๋ฏธํฐ ์ ๋ณด ์ต์ |
'๐จโ๐ป Web Development > Spring - Intro' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] 6.์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ (0) | 2023.02.14 |
---|---|
[Spring] 5.ํ์ ๊ด๋ฆฌ ์์ - ์น MVC ๊ฐ๋ฐ (0) | 2023.02.13 |
[Spring] 4.์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ (0) | 2023.02.11 |
[Spring] 3.ํ์๊ด๋ฆฌ ์์ - ๋ฐฑ์๋ ๊ฐ๋ฐ (0) | 2022.07.03 |
[Spring] 1.ํ๋ก์ ํธ ํ๊ฒฝ์ค์ (0) | 2022.06.30 |
์ต๊ทผ๋๊ธ