JSON
์ง๋ ๋ฒ ํฌ์คํ ์์ Restful API๊ดํ์ฌ ์์ธํ ์์๋ณด๋ค๊ฐ ๊ณต๊ฐ๋ OPEN API ๋๋ถ๋ถ JSON์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ค๋ ๊ฒ์ ์์๋ค. ์ ํฌ์คํ ์์๋ JSON์ ๊ฐ๋ ๊ณผ ์ด๋ ํ ํ์์ ๋ํด ์ข ๋ ์์ธํ ์์๋ณด๊ณ JSON์ ๊ด๋ จ๋ Library๊ฐ ๋ฌด์์ด ์๋์ง ์์๋ณธ๋ค.
1. JSON(JavaScript Object Notation)์ด๋?
- JSON์ ๊ฒฝ๋(Lightweight)์ DATA-๊ตํ ํ์
- Javascript์์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ํํ์์ ์๋ฏธํ๋ค.
- JSON ํํ์์ ์ฌ๋๊ณผ ๊ธฐ๊ณ ๋ชจ๋ ์ดํดํ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ฉ๋์ด ์์์, ์ต๊ทผ์๋ JSON์ด XML์ ๋์ฒดํด์ ๋ฐ์ดํฐ ์ ์ก ๋ฑ์ ๋ง์ด ์ฌ์ฉํ๋ค.
- ํน์ ์ธ์ด์ ์ข ์๋์ง ์์ผ๋ฉฐ, ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ JSON ํฌ๋งท์ ๋ฐ์ดํฐ๋ฅผ ํธ๋ค๋ง ํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค.
2. JSON(JavaScript Object Notation) ํ์
2.1 Name-value ํ์์ ์(pair)
- ์ฌ๋ฌ ๊ฐ์ง ์ธ๋ค์์ object, hashtable, struct๋ก ์คํ๋์๋ค.
- { String key : String Value}
{
"firstName": "Kwon",
"lastName": "YoungJae",
"email": "kyoje11@gmail.com"
}
2.2 ๊ฐ๋ค์ ์์ํ๋ ๋ฆฌ์คํธ ํ์
- ์ฌ๋ฌ ๊ฐ์ง ์ธ์ด๋ค์์ ๋ฐฐ์ด(Array), ๋ฆฌ์คํธ(List)๋ก ์คํ๋์๋ค.
- [ value1, value2, โฆ ]
{
"firstName": "Kwon",
"lastName": "YoungJae",
"email": "kyoje11@gmail.com",
"hobby": ["puzzles","swimming"]
}
3. JSON Library - Jackson(Java) ์ ์ฉํ๊ธฐ
- JSON์ ์ฝ๊ฒ ๊ฐ์ฒด(Object)๋ก ๋ฐ๊ฟ์ฃผ๊ฑฐ๋ ๊ฐ์ฒด(Object)๋ฅผ JSON์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ Library๊ฐ ๋๋ถ๋ถ ์ธ์ด์์ ์กด์ฌํ๋ค.
- Jackson : https://github.com/FasterXML/jackson
- Spring Framework ๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฅผ ๋ค์ด๋ณด์ด๊ฒ ๋ค.
3.1 Maven์ pom.xml์ ์ถ๊ฐํ๊ธฐ
- Jackson์ด๋ผ๊ณ ์น๋ฉด ๊ฐ์ฅ ์์ ๋ณด์ด๋ Jackson Databind๋ฅผ ์ ํํ๋ค.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>
3.2 @ResponseBody๋ฅผ ์ฌ์ฉํ์ฌ JSONํํ๋ก ์๋ตํ๊ธฐ
-
Controller๋ฅผ ํตํด View๋ก ๋์ด๊ฐ์ง ์๊ณ ๋ฐ์ดํฐ(JSON OR XML)๋ฅผ ๋๊ฒจ ์ค ์ ์๋ค.
-
Spring 3.1์์๋ถํฐ mvc:annotation-driven</mvc:annotation-driven>์ ์ฌ์ฉํ๋ฉด HttpMessageConverter๊ฐ ์๋์ผ๋ก ๋ฑ๋ก๋๋ค.
-
@ResponseBody : Return ๊ฐ์ View๋ฅผ ํตํด์ ์ถ๋ ฅ๋๋ ๊ฒ์ด ์๋๋ผ HTTP Response Body์ ์ง์ ์ฐ์ฌ์ง๋ค.
-
annotation-driven ํ์ฑํ ํ๊ธฐ
<mvc:annotation-driven></mvc:annotation-driven>
- RestfulController์ getUserList ์ฝ๋
@RequestMapping(value = "/users", method = RequestMethod.GET)
@ResponseBody
public Map getUserList(){
List<Offer> userList = offersService.getCurrent(); // DB์ ๋ฑ๋ก๋ User List๋ฅผ ๋ฐ์์จ๋ค.
Map result = new HashMap();
result.put("result",Boolean.TRUE);
result.put("data",userList);
return result;
}
3.3 ์๋ฒ๋ฅผ ์๋์์ผ ํ์ธํด๋ณด๊ธฐ.
-
RequestMapping๋ ์ฃผ์์ธ
http://localhost:8080/users
ํ์ธํด๋ณด์. -
๊ฒฐ๊ณผ ๋ชจ์ต : ์ ๋์ฐฉํ์ง๋ง ๋ณด๊ธฐ๊ฐ ๋ถํธํ๋ค.
3.4 PostMan์ ํตํด ์์๊ฒ ๋ณด์.
- Postman์ด๋ผ๋ ํฌ๋กฌ ์ฑ์ ํตํด ์์๊ฒ ๋ณผ ์๋ ์๊ณ ๋ค์ํ ํ ์คํธ๋ ๊ฐ๋ฅํ๋ค.
- Download : https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop
- ๊ฒฐ๊ณผ ๋ชจ์ต : ์์ ๋ชจ์ต์ผ๋ก ๋ณผ ์ ์๋ค.