์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด
3. API
MVC๋ ๋ณํ๋ html์ ์น ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ฐํํ๋ ๋ฐฉ์์ด๊ณ (xml)
API๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๊ทธ๋๋ก ๋ด๋ ค์ฃผ๋ ๋ฐฉ์์ด๋ค. (json)
1) ๋ฌธ์ ๋ฐํ
Controller
- ๊ธฐ์กด์ ๊ตฌํํ HelloController ์์ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ๊ฒ์ด๋ค.
- viewResolver๋ฅผ ์ฌ์ฉํ์ง ์๊ณ HTTP์ ์๋ต body์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ฐํํ ๊ฒ์ด๋ค. (@ResponseBody)
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
์คํ ํ๋ฉด
์ด์ ์ ์์ ํ๋ MVC ๋ฐฉ์๊ณผ ๋ณ ์ฐจ์ด๊ฐ ์์ด ๋ณด์ธ๋ค.
ํ์ง๋ง, ํ์ด์ง ์์ค ๋ณด๊ธฐ๋ฅผ ํ๋ฉด ์ฐจ์ด์ ์ด ๋ํ๋๋ค.
html Tag๊ฐ ๋ณด์ด์ง ์๊ณ ์ค์ง ์ ๋ ฅํ ๋ฌธ์๋ง ๋ณด์ธ๋ค.
2) ๊ฐ์ฒด ๋ฐํ
Controller
- ๊ธฐ์กด์ ๊ตฌํํ HelloController ์์ ์๋ก์ด ๋ฉ์๋ ๋ฐ ํด๋์ค๋ฅผ ์ถ๊ฐํ ๊ฒ์ด๋ค.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name)
Hello hello = new Hello();
hello.setName(name);
return hello;
}
// static์ผ๋ก ๋ง๋ค๋ฉด ํด๋์ค ์์์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
static class Hello { // ๋ฐํํ ๊ฐ์ฒด
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
์คํ ํ๋ฉด
๋ฌธ์๋ฅผ ๋ฐํํ ๊ฒ๊ณผ ๋ค๋ฅธ ๊ฒฐ๊ณผ ํ๋ฉด์ด ๋ํ๋ฌ๋ค.
๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด ๊ฐ์ฒด๊ฐ Json์ผ๋ก ๋ณํ๋์ด ๋ฐํ๋๋ค.
3) ๋์ ๋ฐฉ์
์น ๋ธ๋ผ์ฐ์ ์์ ์ด๋ค ํ์ด์ง๋ฅผ ๋์ง๋ฉด ๋ด์ฅ ํฐ์บฃ ์๋ฒ๊ฐ ๋ฐ์์ ์คํ๋งํํ
์ ๋ฌํ๋ค.
์ ๋ฌ๋ฐ์ ์คํ๋ง์ ๋งค์นญ ๊ฐ๋ฅํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ํด๋น ๋ฉ์๋๋ฅผ ์คํ์ํจ๋ค. (@GetMapping)
@ResponseBody๋ HTTP์ ์๋ต body์ ๊ทธ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๋๋ก ๋์ํ๋ค.
์ด๋, ๋๊ฒจ์ผ ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌธ์๋ผ๋ฉด ๋ฐ๋ก ๋ฐํํ๊ณ
๊ฐ์ฒด๋ผ๋ฉด json ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋๋ก default๊ฐ ์ค์ ๋์ด ์๋ค.
๋ณํ์ ํ๊ธฐ ์ํด HttpMessageConverter๊ฐ ๋์ํ๋๋ฐ,
๊ธฐ๋ณธ ๋ฌธ์ ์ฒ๋ฆฌ๋ StringHttpMessageConverter์์ ํ๊ณ
๊ธฐ๋ณธ ๊ฐ์ฒด ์ฒ๋ฆฌ๋ MappingJackson2HttpMessageConverter์์ ํ๋ค.
์ถ๊ฐ๋ก byte ์ฒ๋ฆฌ ๋ฑ ์ฌ๋ฌ HttpMessageConverter๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ฑ๋ก๋์ด ์๋ค.
ํด๋ผ์ด์ธํธ์ HTTP Accept ํค๋์ ์๋ฒ์ ์ปจํธ๋กค๋ฌ ๋ฐํ ํ์ ์ ๋ณด๋ฅผ ์กฐํฉํด์ ์ ํํ๋ค.
๊ทธ ํ ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์๋ฒ๋ ์น ๋ธ๋ผ์ฐ์ ๋ก ๋ฐํํ๋ค.