์ด๋ฏธ์ง ์ถ์ฒ: ์ธํ๋ฐ ๊ฐ์(์คํ๋ง ์
๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ )
request
๋ฅผ ๋ณด๋Controller
์ ํด๋น URL
์ด ์๋์ง ํ์ธ@ResponseBody
์ด๋
ธํ
์ด์
์ด ๋ถ์ด ์์ผ๋ฉดViewResolver
๊ฐ ์๋ HttpMessageConverter
๋ก ๋ฐ์ดํฐ ์ ์กStringConverter
๊ฐ ์ฒ๋ฆฌ (StringHttpMessageConverter)JsonConverter
๊ฐ ์ฒ๋ฆฌ (MappingJackson2HttpMessageConverter)Http Response Body
์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํViewResolver
๋์ ์ HttpMessageConverter
๊ฐ ๋์)StringHttpMessageConverter
MappingJacson2HttpMessageConverter
HttpMessageConverter
๊ฐ ๋ฑ๋ก๋์ด ์์ํ์ | Converter |
---|---|
String | StringHttpMessageConverter |
Object (ex. DTO) | MappingJackson2HttpMessageConverter |
๊ธฐํ ๋ฐ์ด๋๋ฆฌ ๋ฑ | ํ์ ์ ์ถ๊ฐ ๋ฑ๋ก ๊ฐ๋ฅ (ByteArrayHttpMessageConverter ๋ฑ) |
/* 1. API ๋ฐฉ์ (๋ฐํ ํ์์ด ๋ฌธ์์ผ ๋) */
@GetMapping("hello-string")
@ResponseBody // HTML์ด ์๋ HTTP์์ Head/Body์ ๊ทธ body ๋ถ๋ถ์ ๋ด๊ฐ ์ง์ ๊ฐ์ ๋ฃ์ด์ฃผ๊ฒ ๋ค~ ๋ผ๋ ์๋ฏธ
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
/* 2. API ๋ฐฉ์ (๋ฐํ ํ์์ด JSON์ผ ๋) */
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static public class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
ํ๋ก์ ํธ ์คํ ํ, ๋ฐํ ํ์์ด ๋ฌธ์์ผ ๋๋ฅผ ๋จผ์ ํ
์คํธ ํด๋ณด์๋ฉด http://localhost:8080/hello-string?name=์ํ๋์ด๋ฆ
ํธ์ถ
๊ฒฐ๊ณผํ์ธ
๋ฐํ ํ์์ด ๊ฐ์ฒด์ผ ๋ ํ
์คํธ๋ฅผ ํด๋ณด๋ฉด, http://localhost:8080/hello-api?name=์ํ๋์ด๋ฆ
ํธ์ถ
๊ฒฐ๊ณผํ์ธ
Spring ๊ฐ์์์๋ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์๋๋ฐ ( class ์์ public ์์ด )
/* hello.hello_spring.controller.HelloController.java */
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
hello
๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ ๋ถ๋ถ์์ ์คํ์ ๋์ง๋ง
Class 'Hello' is exposed outside its defined visibility scope
์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
Spring์ด ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํํ ๋ ํด๋์ค์ ์ ๊ทผ ์ ํ์๋ฅผ ์๊ฒฉํ๊ฒ ์ฒดํฌํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค.
Spring์์ @ResponseBody
๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด(Hello
)๋ฅผ JSON์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ด ํ์ํ๋ฐ,
์ด ๋ณํ์ ๋ด๋นํ๋๊ฒ ์์์ ๋งํ Jackson์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
Jackson์ ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํํ ๋,
1. ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์กด์ฌํ๋์ง ํ์ธ
2. ํ๋์ ์ ๊ทผํ ์ ์๋ Getter ๋ฉ์๋๊ฐ ์๋์ง ํ์ธ
3. ํด๋์ค๊ฐ ์ง๋ ฌํ ๊ฐ๋ฅํ๊ณ , ์ ๊ทผํ ์ ์๋ ๋ฒ์์ธ์ง ํ์ธ์ ํ๋ค.
Spring์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฐํํ ๋ JSON ํํ๋ก ๋ฐํํ๋ค๊ณ ํ๋ค. xmlํํ๋ ์์ง๋ง
Java Script Object Notation์ ์ฝ์์ด๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ตํํ๊ณ ์ ์ฅํ๊ธฐ ์ํ ํ
์คํธ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ๊ตํ ํ์ค์ด๋ค.
{ key : value }
JSON์ ํํ๋ ํค(key), ๊ฐ(value)์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๊ตฌ์กฐ์ด๋ค. ์ฐธ๊ณ
Spring ํ๋ ์์ํฌ์์๋ ์๋ฐ๋น ํ๋กํผํฐ๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ฒด์ ์ํ๋ฅผ ์บก์ํํ๊ณ , ์ฝ๊ฒ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ฐธ๊ณ
์๋ฐ๋น ํ๋กํผํฐ๋
๊ฐ์ฒด์ ํ๋์ ์ ๊ทผํ๊ธฐ ์ํ Getter, Setter ๋ฉ์๋๋ฅผ ํต์นญํ๋ ์ฉ์ด์ด๋ค.
Spring์์๋ ์๋ฐ๋น ํ๋กํผํฐ๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ฒด์ ์ํ๋ฅผ ์บก์ํํ๊ณ , ์ธ๋ถ์์ ์์ ํ๊ฒ ํ๋์ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋๋ก ์ง์ํ๋ค.
์๋ฐ๋น ํ๋กํผํฐ์ ์ญํ ๋ก๋
JsonConverter
๋ ์ผ๋ฐ์ ์ธ ๊ฐ๋
๋๋ ์ฝ์นญ์ด๊ณ ,MappingJackson2HttpMessageConverter
๋ Spring์ด ์ค์ ๋ก ์ฌ์ฉํ๋ ๊ตฌํ์ฒด ํด๋์ค์
๋๋ค.StringConverter
์ StringHttpMessageConverter
๋ ๊ฐ์ ๊ฐ๋
์
๋๋ค.