์๋ฒ์์ ์ฒ๋ฆฌํ๋ ์์ ์์ด ๋จ์ง ํ์ผ์ ์น ๋ธ๋ผ์ฐ์ ์ ๋ด๋ ค์ฃผ๋ ๋ฐฉ์
resources/static
ํด๋์ study.html
ํ์ผ์ ๋ง๋ค์๋ค๊ณ ํ๋ฉด ์ ์ ํ์ด์ง์ url์ http://localhost:8080/study.html
์ด ๋๋ค๐ ๋์ ๋ฐฉ์
์น ๋ธ๋ผ์ฐ์ ์์ http://localhost:8080/hello-static.html์ ๋์ง๋ฉด ๋ด์ฅ ํฐ์บฃ ์๋ฒ๊ฐ ๋ฐ์ ์คํ๋งํํ ์ ๋ฌํ๋ค.
์คํ๋ง์ ๋จผ์ Controller ์ชฝ์์ hello-static
์ด ์๋์ง ์ฐพ์๋ณธ๋ค. (Controller๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ๋๋ค)
๋ง์ฝ ์๋ค๋ฉด, resources/static
ํด๋ ์์์ ํด๋น ํ์ด์ง๋ฅผ ํ์ธํ ํ ์กด์ฌํ๋ค๋ฉด ๊ทธ ํ์ผ์ ๋ฐํํ๋ค.
์๋ฒ์์ ํ๋ก๊ทธ๋๋ฐํด์ HTML์ ๋์ ์ผ๋ก ๋ฐ๊ฟ์ ๋ด๋ ค์ฃผ๋ ๋ฐฉ์
Model
: ํ๋ฉด์ ํ์ํ ๊ฒ๋ค์ ๋ด์์ ์ ๋ฌํ๊ณ , ๋ด๋ถ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ญํ View
: ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ญํ , ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ํ๋ฉด(UI)Controller
: ๋น์ฆ๋์ค ๋ก์ง์ด๋ ์๋ฒ ๋ท ๋จ์ ๊ด๋ จ๋ ๊ฒ์ ์ฒ๋ฆฌํ๊ณ , Model๊ณผ View ์ฌ์ด๋ฅผ ์ด์ด์ฃผ๋ ์ธํฐํ์ด์ค ์ญํ ๐ @RequestParam
์น url์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์ ๋ฐ์ดํฐ์ ์ ์ฅ (ex. ?name=spring!)
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
http://localhost:8080/hello-mvc?name=spring!
@RequestParam์์๋ required๋ผ๋ ์์ฑ์ด ์๋ค. default ๊ฐ์ true์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋๊ธฐ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฌ๋ค. ๋ง์ฝ ๊ฐ์ ๋๊ธฐ๊ณ ์ถ์ง ์๋ค๋ฉด required๋ฅผ false๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. required = false์ผ ๋ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ด ์์ผ๋ฉด null์ด ์ ์ฅ๋๋ค.
๐ ์ด ์ฝ๋๋ ๋ญ์ผ?
์ ์ฝ๋์์ ํ์ด๋ผ์ดํธ ์ฝ๋๋ ์์ด๋ ์ ๋๋ก ๋์ํ๋ค! ๊ทธ๋ ๋ค๋ฉด ์ ํ์ํ๊ฑธ๊น?
thymeleaf ๊ธฐ๋ฅ ์ค ํ๋์ธ๋ฐ ์๋ฒ ์์ด HTML ํ์ผ์ ์ด์ด ํ๋ฉด์ ๋์ธ ์ ์๋๋ก ํด์ค๋ค!
๐ ๋์ ๋ฐฉ์
์น ๋ธ๋ผ์ฐ์ ์์ http://localhost:8080/hello-mvc๋ฅผ ๋์ง๋ฉด ๋ด์ฅ ํฐ์บฃ ์๋ฒ๊ฐ ๋ฐ์ ์คํ๋งํํ ์ ๋ฌํ๋ค.
์ ๋ฌ๋ฐ์ ์คํ๋ง์ ๋งค์นญ ๊ฐ๋ฅํ Controller๋ฅผ ์ฐพ์ ํด๋น ๋ฉ์๋๋ฅผ ์คํ์ํจ๋ค. (@GetMapping)
๋งค์นญ๋ ๋ฉ์๋๋ ๋ฆฌํด์ ํ ๋ hello-template์ ๋๊ธฐ๊ณ Model์๋ (name:spring)์ ๋ด์ ๋ณด๋ธ๋ค.
viewResolver๊ฐ ํ๋ฉด์ ์ฐพ๊ณ ํ ํ๋ฆฟ ์์ง์ ์ฐ๊ฒฐํ๋ค.
ํ ํ๋ฆฟ ์์ง์ด ๋ ๋๋ง์ ํตํด ๋ณํ๋ HTML์ ์น ๋ธ๋ผ์ฐ์ ์ ๋ฐํํ๋ค.
์๋ฒ์์ Json ๋ฐ์ดํฐ ๊ตฌ์กฐ ํฌ๋งท์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์
@GetMapping("hello-string")
@ResponseBody //HTTP์ Body์ ๋ฌธ์ ๋ด์ฉ์ ์ง์ ๋ฐํ
public String helloString(@RequestParam("name") String name) {
return "hello " + name; //๋ง์ฝ name์ด spring์ด๋ผ๋ฉด hello spring, view ์์ด ๋ฌธ์๊ฐ ๋ฐ๋ก ์ ๋ฌ
}
โ View๋ฅผ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ ํ์ด์ง ์์ค ๋ณด๊ธฐ๋ฅผ ํ์ ๋ html ์ฝ๋๋ก ๋จ์ง ์๊ณ ๊ธ์๋ง ๊ทธ๋๋ก ๋ธ
๐ JSON
@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;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
โ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๊ฒ ๋๋ฉด, key์ value๋ก ์ด๋ฃจ์ด์ง JSON ํ์์ผ๋ก ๋ฐํ
๐ ๋์ ๋ฐฉ์
์น ๋ธ๋ผ์ฐ์ ์์ http://localhost:8080/hello-api
๋ฅผ ๋์ง๋ฉด ๋ด์ฅ ํฐ์บฃ ์๋ฒ๊ฐ ๋ฐ์ ์คํ๋งํํ
์ ๋ฌํ๋ค.
์ ๋ฌ๋ฐ์ ์คํ๋ง์ ๋งค์นญ ๊ฐ๋ฅํ Controller๋ฅผ ์ฐพ์ ํด๋น ๋ฉ์๋๋ฅผ ์คํ์ํจ๋ค. (@GetMapping)
@ResponseBody
๋ HTTP์ ์๋ต body์ ๊ทธ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๋๋ก ๋์ํ๋ค. ์ด๋, ๋๊ฒจ์ผ ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌธ์๋ผ๋ฉด ๋ฐ๋ก ๋ฐํํ๊ณ ๊ฐ์ฒด๋ผ๋ฉด json ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋๋ก default๊ฐ ์ค์ ๋์ด ์๋ค.
๋ณํ์ ํ๊ธฐ ์ํด HttpMessageConverter
๊ฐ ๋์ํ๋๋ฐ, ๊ธฐ๋ณธ ๋ฌธ์ ์ฒ๋ฆฌ๋ StringHttpMessageConverter
์์ ํ๊ณ , ๊ธฐ๋ณธ ๊ฐ์ฒด ์ฒ๋ฆฌ๋ MappingJackson2HttpMessageConverter
์์ ํ๋ค.
์ถ๊ฐ๋ก byte ์ฒ๋ฆฌ ๋ฑ ์ฌ๋ฌ HttpMessageConverter๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ฑ๋ก๋์ด ์๋ค. ํด๋ผ์ด์ธํธ์ HTTP Accept ํค๋์ ์๋ฒ์ ์ปจํธ๋กค๋ฌ ๋ฐํ ํ์ ์ ๋ณด๋ฅผ ์กฐํฉํด์ ์ ํํ๋ค.
๊ทธ ํ ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์๋ฒ๋ ์น ๋ธ๋ผ์ฐ์ ๋ก ๋ฐํํ๋ค.
์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์