๐Ÿ’ป๊ฐœ๋ฐœ๊ณต๋ถ€/JavaScript

JS๊ธฐ์ดˆ | Ajax, JSON ๊ฐœ๋…์ •๋ฆฌ ๋ฐ ํ™œ์šฉ๋ฐฉ๋ฒ•

Jee-young 2021. 8. 24. 17:05

Ajax๋ž€?

Ajax๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ , ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ์›นํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ด๋‹ค. 

 

Ajax๋Š” XMLHttpRequest ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, http ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์œ„ํ•œ ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 

 

์ „ํ†ต์ ์ธ ์›นํŽ˜์ด์ง€์˜ ์ƒ๋ช…์ฃผ๊ธฐ 

์˜ˆ์ „์˜ ์›นํŽ˜์ด์ง€๋Š” ์™„์ „ํ•œ html ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ง„ html ํŒŒ์ผ์„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „์†ก๋ฐ›์•„ ์›นํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋žœ๋”๋ง ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ™”๋ฉด์ „ํ™˜์„ ์š”์ฒญํ•˜๋ฉด, ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด html์„ ์ „์†ก๋ฐ›์•„ ์›นํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ์ƒˆ๋กœ๊ณ ์นจ ํ•ด์•ผํ–ˆ๋‹ค. 

์ „ํ†ต์ ์ธ ์›น ์ƒ๋ช…์ฃผ๊ธฐ

์œ„์™€ ๊ฐ™์ด ๋™์ž‘ํ•˜๋ฉด ์–ด๋–ค ๋‹จ์ ์ด ์žˆ์„๊นŒ?

1. ๋ณ€๊ฒฝ๋  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ๋งค๋ฒˆ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์žฌ์ „์†ก ๋ฐ›๊ธฐ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ๋ฐœ์ƒํ•œ๋‹ค. 

2. ํ™”๋ฉด์ „ํ™˜์ด ์ผ์–ด๋‚˜๋ฉด, ํ™”๋ฉด์ด ์ˆœ๊ฐ„์ ์œผ๋กœ ๊นœ๋ฐ•์ด๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒ. ์ด๊ฒƒ๋„ ๋ถˆํ•„์š”ํ•œ ํ˜„์ƒ์ด๋‹ค. 

3. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ๋™๊ธฐ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์ด ์žˆ์„๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์ฒ˜๋ฆฌ๋Š” ๋ธ”๋กœํ‚น๋œ๋‹ค.

 

์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ Ajax ๋•๋ถ„์—, ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์›นํŽ˜์ด์ง€์˜ ๋ณ€๊ฒฝ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋น„๋™๊ธฐ๋ฐฉ์‹์œผ๋กœ ์ „์†ก๋ฐ›์•„, ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„๋งŒ ํ•œ์ •์ ์œผ๋กœ ๋ Œ๋”๋ง์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค. 

Ajax ๋•๋ถ„์— ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์œ ์‚ฌํ•œ ๋น ๋ฅธ ํผํฌ๋จผ์Šค์™€ ๋ถ€๋“œ๋Ÿฌ์šด ํ™”๋ฉด์ „ํ™˜์ด ๊ฐ€๋Šฅํ•ด์ง„ ๊ฒƒ์ด๋‹ค. 

 

Ajax ํ†ต์‹  ์ƒ๋ช…์ฃผ๊ธฐ 

Ajax

Ajax๋Š” ๋น„๋™๊ธฐ ํ†ต์‹ ๋ฐฉ์‹์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ์š”์ฒญ์„ Ajax๋กœ ์š”์ฒญํ•˜๋ฉด, ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ „์†ก๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐํ†ต์‹ ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

JSON์ด๋ž€, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„์˜ http ํ†ต์‹ ์„ ๋•๋Š” ๋ฐ์ดํ„ฐ ํฌ๋งท์ด๋‹ค. JSON์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜๋Š” ๊ฐ์ฒด๋ฅผ serializeํ•ด์„œ {key: value} ํƒ€์ž…์˜ string์œผ๋กœ ๋งŒ๋“ค๊ณ , ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š”๋ฐ ์ด์šฉํ•œ๋‹ค์Œ deserialize๋ฅผ ๊ฑฐ์ณ ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด ํด๋ผ์ด์–ธํŠธ์— ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. 

 

JSON.stringify()

JSON์—๋Š” ๋‘๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋จผ์ €, stringify()๋Š” ๊ฐ์ฒด๋ฅผ JSON ํฌ๋งท์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ๊ฐ์ฒด๋ฅผ ์ „์†กํ•˜๋ ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ดํ™” ํ•ด์•ผํ•˜๋Š”๋ฐ, ์ด๋ฅผ serializing ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

// 1. Object to JSON
// stringify(obj)
const obj = {
  name: 'Kim',
  age: 20,
  alive: true,
  hobby: ['traveling', 'tennis']
};

// obj ๊ฐ์ฒด๋ฅผ JSON ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ 
const json = JSON.stringify(obj);
console.log(json, typeof json);  // {"name":"Kim","age":20,"alive":true,"hobby":["traveling","tennis"]} string

// ์›ํ•˜๋Š” value๋งŒ ๋ฐ›์•„์˜ค๊ธฐ 
console.log(JSON.stringify(obj, ['age']));  // {"age":20}

// ๋“ค์—ฌ์“ฐ๊ธฐ ์ ์šฉ 
const json2 = JSON.stringify(obj, null, 2);
console.log(json2);
/*
{
  "name": "Kim",
  "age": 20,
  "alive": true,
  "hobby": [
    "traveling",
    "tennis"
  ]
}
*/

๊ฐ์ฒด๋ฅผ JSON ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ ๋ชจ์Šต์ด๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ๋์— ์ˆซ์ž๋‚˜ ๋ฌธ์ž์—ด์„ ๋„ฃ์œผ๋ฉด ํ•ด๋‹น ์นธ๋งŒํผ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ๋œ๋‹ค. ์•„๋ž˜ api ๋ฌธ์„œ์ฐธ๊ณ .  

stringify() API๋ฌธ์„œ

์ด๋ฒˆ์—๋Š” ๋ฐฐ์—ด์„ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ด๋ณด์ž. 

const todos = [
  { id: 1, content: 'HTML', completed: false},
  { id: 2, content: 'CSS', completed: false},
  { id: 3, content: 'JavaScript', completed: true}
];

const arrayToJson = JSON.stringify(todos, null, 2);
console.log(arrayToJson);
/*
[
  {
    "id": 1,
    "content": "HTML",
    "completed": false
  },
  {
    "id": 2,
    "content": "CSS",
    "completed": false
  },
  {
    "id": 3,
    "content": "JavaScript",
    "completed": true
  }
]
*/

 

JSON.parse()

parse๋Š” JSON ํฌ๋งท์˜ ๋ฌธ์ž์—ด์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ๋œ json์€ ๋ฌธ์ž์—ด์ด๊ณ , ๊ฐ์ฒด๋กœ์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ฐ์ฒดํ™” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ deserializing ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

// 2. JSON to Object
// parse(json) 
const parsed = JSON.parse(json2);
const JsonToArray = JSON.parse(arrayToJson);

console.log(parsed, typeof parsed); // { name: 'Kim', age: 20, alive: true, hobby: [ 'traveling', 'tennis' ] } object
console.log(JsonToArray, typeof JsonToArray);
/*
[
  { id: 1, content: 'HTML', completed: false },
  { id: 2, content: 'CSS', completed: false },
  { id: 3, content: 'JavaScript', completed: true }
] object
*/

์œ„์—์„œ ๋งŒ๋“  JSON ๋ฌธ์ž์—ด๋“ค์„ ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ ๋ชจ์Šต์ด๊ณ , ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝ๋œ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 


์ฐธ๊ณ  | ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ #43