๐ ์ฌ์ ๊ณต๋ถ!
HTTP๋ Hypertext Transfer Protocol์ ์ฝ์๋ก Client์ Server๊ฐ์ ํต์ ์ ์ฝ์์ด๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ(request)ํ๊ณ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ๊ทธ์ ๋ง๋ ์๋ต(response)์ ๋ณด๋ธ๋ค. ์ฌ๊ธฐ์ Hypertext๋ ์น์ฌ์ดํธ์์ ์ฌ์ฉ๋๋ ํ์ดํผ๋งํฌ(Hyperlink)๋ฟ๋ง ์๋๋ผ ์ ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฆฌ์์ค๋ค(๋ฌธ์, ์ด๋ฏธ์ง ๋ฑ)์ ํฌํจํด์ ๋งํ๋ค.
์ด๋ ๊ฒ HTTP๋ฅผ ์ด์ฉํด์ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๋ฐฉ๋ฒ์ผ๋ก๋ AJAX๊ฐ ์๋ค. Asynchronous JavaAScript and XML์ ์ฝ์๋ก ์นํ์ด์ง์์ ๋์ ์ผ๋ก ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋ฐ์์ค๋ ๊ธฐ์ ์ด๋ค. ๋ํ์ ์ธ ์๋ก๋ XMLHttpRequest๋ผ๋ ์ค๋ธ์ ํธ๊ฐ ์๋ค. ์ด ์ค๋ธ์ ํธ๋ ๋ธ๋ผ์ฐ์ API์์ ์ ๊ณตํ๋ ์ค๋ธ์ ํธ ์ค์ ํ๋๋ก ์ด ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋ฐ์์ฌ ์ ์๋ค. ์ต๊ทผ ๋ธ๋ผ์ฐ์ API์ ์ถ๊ฐ๋ fetch() API๋ฅผ ์ฌ์ฉํ๋ฉด ์ญ์ ๊ฐํธํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค. ํ์ง๋ง ๋ฌด์กฐ๊ฑด ์ ์์ด๋ผ๊ณ ํด์ ๋ฐ๋ก ์ฌ์ฉํ ์๋ ์๋ค๋ ์ฌ์ค! ์ด API๋ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ์์ ์ง์์ด ๋์ง ์์ผ๋ ์ ์ํด์ ์ฌ์ฉํ์.
XML
XML์ HTML๊ณผ ๊ฐ์ ๋งํฌ์ ์ธ์ด ์ค์ ํ๋์ด๋ค. ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋ฉฐ HTML๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ ์ค์ ํ๋์ด๋ค. ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋์๋ XML๋ฟ๋ง ์๋๋ผ ๋ค์ํ ํ์ผ ํฌ๋งท์ ํตํด ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ฐ ์์ฆ์ JSON์ ๋ง์ด ์ฌ์ฉํ๋ ์ถ์ธ์ด๋ค.
XHR์ ํ์
AJAX์ XHR(XMLHttpRequset)์ด ํ๋ฐํ ๊ฐ๋ฐ๋๊ณ ์์ ๋น์ ๋ง์ดํฌ๋ก์ํํธ์ฌ์ ์๋ ์์๋ฃฉ ๊ฐ๋ฐํ์ด ํ๋ฐํ ์ฐธ์ฌํ์๋๋ฐ ์ด ๊ฐ๋ฐํ์ ํต์ ์๋จ์ผ๋ก XML์ ์ฌ์ฉํ์๊ธฐ ๋๋ฌธ์ ์ ์ก๋ฐฉ๋ฒ(HttpRequest)์ ์์ ์์ XML์ ๋ปํ๋ X๋ฅผ ๋ฃ๊ฒ ๋์๋ค. ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋์๋ XML ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ ์์ XML์ ๋ถ์ธ ๊ฒ์ ์๋ชป๋ ๋ช ๋ช ๋ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ค. ํจ์๋ ํด๋์ค ๋ฑ ์ธ๋ถ๋ก ๋ ธ์ถ๋๋ API๋ฅผ ๋ง๋ค ๋์๋ API์ ์ด๋ฆ์ ๋ช ๋ฃํ๊ฒ ์์ฑํด์ผ ํ๋์ ์์ง๋ง์!
JSON
๋ธ๋ผ์ฐ์ ์์ ํต์ ์ ํ ๋๋ fetch()๋ XHR์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ํต์ ์ ํ๋๋ฐ XML์ ์ฌ์ฉํ๋ฉด ๋ถํ์ํ ํ๊ทธ๊ฐ ๋๋ฌด ๋ง์ด ๋ค์ด๊ฐ์ ์ฌ์ด์ฆ๋ ์ปค์ง๊ณ ์ฝ๊ธฐ ๋ถํธํ๊ธฐ ๋๋ฌธ์ ์์ฆ์ JSON์ ๋ง์ด ์ฌ์ฉํ๋ค. JSON์ JavaScript Object Notaiton์ ์ฝ์๋ก 1999๋ ๋ฐํ๋ ECMAScript3์ ์ค๋ธ์ ํธ์ ์๊ฐ์ ๋ฐ์์ ๋ง๋ค์ด์ง ๋ฐ์ดํฐํฌ๋งท์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์์ ์ค๋ธ์ ํธ๋ ํค(Key)์ ๊ฐ(Value)๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ ๋ธ๋ผ์ฐ์ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ฐ์ผ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋, ๋๋ ์๋ฒ์ ํต์ ์ ํ์ง ์๋๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ ํ์ด๋ฆฟ์คํ ์ ์ ์ฅํ ๋์๋ JSONํ์ ์ ๋ง์ด ์ฌ์ฉํ๊ณ ์๋ค.
ํ๋ง๋๋กJSON์
- ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉ๋ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ํ์ผ ํฌ๋งท
- ํ ์คํธ ๊ธฐ๋ฐ์ ๊ฐ๋ฒผ์
- ์ฌ๋์ด ์ฝ๊ธฐ ํธํจ
- ํค์ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ํ์ผ ํฌ๋งท
- ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ฃผ๊ณ ๋ฐ์ ๋ ์ง๋ ฌํ(serialization)์ ์ํด์ ์ฌ์ฉ
- ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ ํ๋ซํผ์์๊ด ์์ด ์ฐ์ผ ์ ์๋ค
!important
JSON ๊ณต๋ถ ํฌ์ธํธ
- ์ค๋ธ์ ํธ๋ฅผ ์ด๋ป๊ฒ ์ง๋ ฌํํ์ฌ ์ ์กํ๋๊ฐ?
- ์ง๋ ฌํ๋ JSON์ ์ด๋ป๊ฒ deserializeํ์ฌ ๋ฐ์ดํฐ๋ก ๋ณํํ๋๊ฐ?
JSON์ค๋ธ์ ํธ ์์๋ ๋๊ฐ์ API๊ฐ ์๋ค. parse
stringify
๊ฐ ์๋๋ฐ ๊ฐ API๋ ์ค๋ฒ๋ผ์ด๋ฉ ๋์ด ์๋ค.
Object to JSON
// JSON์ค๋ธ์ ํธ์ ์๋ stringify์ parse๋ฉ์๋๋ฅผ ์ฌ์ฉํ์.
let json = JSON.stringify(true)
console.log(json) // true
json = JSON.stringify(['apple', 'banana']);
console.log(json) // ["apple", "banana"] -> ์ฑ๊ธ์์ ๋๋ธ ์ฟผํ
์ด์
์ผ๋ก ๋ฐ๋ ๊ฑฐ์ ์ฃผ๋ชฉ!
const rabbit = {
name: 'tori',
color: 'white',
birthDate: new Date(),
jump: () => { console.log(`${name} can jump!`) }
}
json = JSON.stringify(rabbit)
console.log(json)
// {"name":"tori","color":"white","birthDate":"2020-10-30T08:59:05.130Z"}
// jump๋ผ๋ ํจ์๋ ๋ฐ์ดํฐ์ ํฌํจ๋์ง ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค!
// JS์๋ง ์๋ Symbol๊ณผ ๊ฐ์ ๊ธฐ๋ฅ๋ค๋ JSON์ ํฌํจ๋์ง ์๋๋ค.
// reviver๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์ ์ ํ ์ ์๋ค.
json = JSON.stringify(rabbit, ['name']) // {"name":"tori"}
json = JSON.stringify(rabbit, ['name', 'color']) // {"name":"tori", "color":"white"}
json = JSON.stringify(rabbit, (key, value) => {
console.log(`key: ${key}, value: ${value}`)
}) // ์ ์ผ ์ฒ์ ์ ๋ฌ๋๋๊ฑด ์ค๋ธ์ ํธ ๊ทธ ์์ฒด! ๊ทธ ํ ์ค๋ธ์ ํธ์ ๊ฐ๋ค์ ํ๋์ฉ ์ฝ๋๋ค.
JSON to Object
json = JSON.stringify(rabbit);
const obj = JSON.parse(json);
console.log(obj) // {"name":"tori","color":"white","birthDate":"2020-10-30T08:59:05.130Z"}
// ํจ์๋ serialize๋ ๋ JSON์ผ๋ก ๋ณํ๋์ง ์์์ผ๋ฏ๋ก obj์๋ ์๋ rabbit์ ์๋ jump()๊ฐ ์๋ค.
rabbit.jump() // can jump!
obj.jump() // Uncaught TypeError
// ์๋ rabbit์ ์๋ birthDate๋ ์ค๋ธ์ ํธ์ด๋ JSON์ผ๋ก ๋ค์ด๊ฐ ๊ฐ์ ์คํธ๋ง์ด๋ฏ๋ก
// Date์ ๊ด๋ จ๋ API๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
console.log(rabbit.birthDate.getDate()) // 2020-10-30T08:59:05.130Z
console.log(obj.birthDate.getDate()) // Error!
// ์ด๋ reviver์ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฃ์ด์ obj์์ Date ์ค๋ธ์ ํธ๋ฅผ ๋ฃ์ด์ค ์ ์๋ค
const obj = JSON.parse(json, key, value) => {
return key === 'bitrhDate'? new Date(value): value;
})
ํ์ต์ ์ ์ฉํ ์ฌ์ดํธ
JSON DIFF : ๋๊ฐ์ JSON์ ๋น๊ตํ์ฌ ๋ค๋ฅธ์ ์ ์ฐพ์์ฃผ๋ ์ฌ์ดํธ. ๋๋ฒ๊น ํ ๋ ์ ์ฉํ๋ค.
JSON Beautifier : JSON ํฌ๋งท์ ๋ณต์ฌํ๋ฉด์ ํฌ๋งท์ด ๋ง๊ฐ์ง๋ ๊ฒฝ์ฐ ๊ณ ์ณ์ค๋ค.
JSON Parser : JSON ํ์ผ์ ์ค๋ธ์ ํธ ํ์ ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ๋ณด์ฌ์ค๋ค.
JSON Validator : ํด๋น JSON ์ด ์ ํจํ์ง ๊ฒ์ฌ๋ฅผ ํด์ค๋ค!