ํฌ๊ฒ ์ธ ์ข ๋ฅ๊ฐ ์๋ค.
01. ์ ์ ์ปจํ ์ธ : ํ์ผ์ ์น ๋ธ๋ผ์ฐ์ ์ ๊ทธ๋ฅ ์ ๋ฌํด์ค๋ค.
02 MVC & ํ ํ๋ฆฟ ์์ง : ์๋ฒ์์ HTML์ ์กฐ๊ธ ๋ฐ๊ฟ์ ์ ๋ฌํด์ค๋ค
03. API : json ๋ฐ์ดํฐ ํฌ๋งท์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ดํฐ ์ ๋ฌ / ์๋ฒ๋ผ๋ฆฌ ํต์ ํ ๋๋ ์ฌ์ฉ
์ ์ ์ปจํ ์ธ
- ์คํ๋ง๋ถํธ์์ ์ ์ ์ปจํ ์ธ ๋ฅผ ์ง์ํ๋ค.
์ ์ ์ปจํ ์ธ ๋์ ์๋ฆฌ
01. ์น ๋ธ๋ผ์ฐ์ ์์ localhost์ ์ ์ ์์ฒญ์ ๋ณด๋ธ๋ค.
02. ๋ด์ฅ ํฐ์บฃ ์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ์ hello-static์ ํ์ธํ ํ ์คํ๋ง์ผ๋ก ๋ณด๋ธ๋ค.
03. ์ปจํธ๋กค๋ฌ๋ฅผ ํ์ธํ๋ค(์ปจํธ๋กค๋ฌ๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค) -> ๊ทผ๋ฐ ๊ด๋ จ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ค
04. resources/static ๋ด๋ถ์ ๋์ผ ์ด๋ฆ์ ๊ฐ์ง ํ์ผ์ด ์๋์ง ์ฐพ์๋ณธ๋ค.
05. ์์ผ๋ฉด ๋ฐํํ๋ค.
MVC & ํ ํ๋ฆฟ ์์ง
MVC๋?
Model, View, Controller๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์๋๋ view๋ controller๋ฅผ ๊ตฌ๋ถํ์ง ์์์ง๋ง ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ๋ถ๋ฆฌํ์ฌ ํ์ฌ์ ํํ๊ฐ ๋์๋ค!
Controller
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value="name") String name, Model model){ // ์ธ๋ถ์์ ํ๋ผ๋ฏธํฐ ๋ฐ๋๋ค
model.addAttribute("name", name); // ์์๊ฐ key ๋ค์๊ฐ value
return "hello-template";
}
}
- ์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์์ ํํ์ด์ง ์ฃผ์๋ localhost:8080/hello-mvc์ด๋ค! (hello-template ์๋)
localhost:8080/hello-mvc๋ก ๋ค์ด๊ฐ๋ฉด error๊ฐ ๋จ๋๋ฐ name ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฒจ์ฃผ์ง ์์์ ๋ฐ์ํ๋ ์๋ฌ์ด๋ค
์ ์ฝ๋์ name์์ ctrl+P(์๋์ฐ ๊ธฐ์ค)์ ๋๋ฅด๋ฉด ์ต์ ์ด ๋ํ๋๋๋ฐ, required๋ฅผ false๋ก ์ง์ ํด์ฃผ๋ฉด ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋๊ฒจ๋ ๋๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ ์ค๋ฅ๋ฅผ ํผํ ์ ์๋ค(required๋ default true)
ํ์ง๋ง ์ฐ๋ฆฌ๋ name์ ๋ฐ์์ผ ํ๋ฏ๋ก...์ฌ์ดํธ ์ฃผ์์ ์ง์ name์ ๋ฃ์ด์ฃผ์
MVC, ํ ํ๋ฆฟ ์์ง ์๋ ์๋ฆฌ
01. ์น ๋ธ๋ผ์ฐ์ -> ํฐ์บฃ ์๋ฒ -> ์คํ๋ง
02. helloController์ ๋ฉ์๋๊ฐ mapping ๋์ด์์ผ๋ฏ๋ก ํด๋น ์กฐ๊ฑด์ ๋ฐ๋ผ ์คํ๋ง์ ๋๊ฒจ์ค๋ค
03. viewResolver๊ฐ view๋ฅผ ์ฐพ์์ฃผ๊ณ ํ ํ๋ฆฟ ์์ง์ ์ฐ๊ฒฐํด์ค๋ค. -> template์์ ์ฐพ์์ ๋๊ฒจ์ค๋ค.
04. ํ ํ๋ฆฟ ์์ง์ด ๋ ๋๋ง์ ํ์ฌ(์ ์ ๋ธ๋ผ์ฐ์ ์์ ์ฐจ์ด์ ) ์น ๋ธ๋ผ์ฐ์ ์ ๋๊ฒจ์ค๋ค
API
@ResponseBody ๋ฌธ์ ๋ฐํ
@Controller public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
@ResponseBody ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ทฐ ๋ฆฌ์กธ๋ฒ( viewResolver )๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค - ํ ํ๋ฆฟ ์์ง๊ณผ์ ์ฐจ์ด์ !!
๋์ ์ HTTP์ BODY์ ๋ฌธ์ ๋ด์ฉ์ ์ง์ ๋ฐํ(HTML BODY TAG๋ฅผ ๋งํ๋ ๊ฒ์ด ์๋)
- ์์ค ์ฝ๋๋ฅผ ๋ณด๋ฉด HTML์์ด ๋ ๋ค hello name๋ง ๋์จ๋ค
@ResponseBody ๊ฐ์ฒด ๋ฐํ
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name){
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
// property ์ ๊ทผ ๋ฐฉ์(JavaBean)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
http://localhost:8080/hello-api?name=spring
์คํํ๋ฉด JSON ํํ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
๊ธฐ์กด์ xml ๋ฐฉ์์ ์ด๊ณ ๋ซ์์ผ ํ๋๋ฐ json์ ๋ฐ๋ก ๋์ค๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๋ค. ์ต๊ทผ์๋ ๊ฑฐ์ JSON ๋ฐฉ์์ผ๋ก ๊ฐ๊ณ ์๋ค.
@ResponseBody ์๋์๋ฆฌ
01. ๋ธ๋ผ์ฐ์ -> ํฐ์บฃ -> ์คํ๋ง
02. helloapi Controllerํ์ธ -> @ResponseBody annotation ํ์ธ -> http์ ๊ทธ๋ฅ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ์!
๊ทผ๋ฐ ๋ฌธ์๊ฐ ์๋๊ณ ๊ฐ์ฒด์ด๋ค? default JSON ๋ฐฉ์์ผ๋ก ๋ฐํํ์
- HTTP์ BODY์ ๋ฌธ์ ๋ด์ฉ์ ์ง์ ๋ฐํ
- viewResolver ๋์ HttpMessageConverter๊ฐ ๋์ํ๋ค
- ๊ธฐ๋ณธ ๋ฌธ์ ์ฒ๋ฆฌ : StringHttpMessageConverter
- ๊ธฐ๋ณธ ๊ฐ์ฒด ์ฒ๋ฆฌ : MappingJackson2HttpMessageConverter (Jackson - JSON์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
- byte ์ฒ๋ฆฌ ๋ฑ ๊ธฐํ ์ฌ๋ฌ HttpMessageConverter๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ฑ๋ก๋์ด ์์
์ฐธ๊ณ : ํด๋ผ์ด์ธํธ์ HTTP Accept ํค๋์ ์๋ฒ์ ์ปจํธ๋กค๋ฌ ๋ฐํ ํ์ ์ ๋ณด ๋์ ์กฐํฉํด์ HttpMessageConverter๊ฐ ์ ํ๋๋ค.
์ค๋์ ํโจ
Ctrl+shift+enter๋ฅผ ๋๋ฅด๋ฉด ๋๊น์ง ์๋์์ฑํด์ค๋ค
๋๊ธ