๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š/ใ„ด JavaScript

[JavaScript] AJAX / XMLHttpRequest, axios, fecth

๐Ÿ”— AJAX๋ž€?

 

 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ ์ด๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„์˜ XML ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

 XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋ฆฌ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

[JavaScript / ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ] AJAX / Callback, Promise, async, await

๐Ÿ“Œ ๋™๊ธฐ(Synchronous) ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ๋น„๋™๊ธฐ(Asynchronous) ํ”„๋กœ๊ทธ๋ž˜๋ฐ  ๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑ๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.  ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ฝ”๋“œ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ

devjindev.tistory.com

 


 

๐Ÿ”— XMLHttpRequest

 

AJAX๋Š” ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ๋ชจ๋‘ XMLHttpRequest๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// GET ์š”์ฒญ
 
var xhr = new XMLHttpRequest();
 
xhr.onload = function() {
    if (xhr.status === 200 || xhr.status === 201) {
        console.log(xhr.responseText);
    } else {
        console.error(xhr.responseText);
    }
};
xhr.open('GET''https://www.zerocho.com/api/get?name=zerocho');
xhr.send();
 
// POST ์š”์ฒญ
 
var xhr = new XMLHttpRequest();
var data = {
    property_one: value_one,
    property_two: value_two
};
 
xhr.onload = function() {
    if (xhr.status === 200 || xhr.status === 201) {
        console.log(xhr.responseText);
      } else {
        console.error(xhr.responseText);
      }
};
xhr.open('POST''https://someurl.com');
xhr.setRequestHeader('Content-Type''application/json'); // ์ปจํ…์ธ ํƒ€์ž…์„ json์œผ๋กœ
xhr.send(JSON.stringify(data)); // ๋ฐ์ดํ„ฐ๋ฅผ stringifyํ•ด์„œ ๋ณด๋ƒ„
cs

 

 


 

๐Ÿ”— AJAX ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

โ—พ axios

 

  • ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • ๋”ฐ๋กœ import(์„ค์น˜)๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • HTTP ์š”์ฒญ ์ทจ์†Œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ JSON ํ˜•ํƒœ๋กœ ์ž๋™ ๋ณ€๊ฒฝํ•œ๋‹ค. (.json() ์‚ฌ์šฉ ํ•„์š” X)
  • ์‘๋‹ต์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์„ค์ •ํ•˜์—ฌ, ๋„คํŠธ์›Œํฌ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. (response timeout API ์ œ๊ณต O)
  • catch์— ๊ฑธ๋ ธ์„ ๋•Œ, .then์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  .console ์ฐฝ์— ํ•ด๋‹น ์—๋Ÿฌ ๋กœ๊ทธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
  • return ๊ฐ’์€ Promise ๊ฐ์ฒด ํ˜•ํƒœ์ด๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let url = 'https://someurl.com';
let options = {
    method: 'POST',
    url: url,
    headers: {
        'Accept''application/json',
        'Content-Type''application/json;charset=UTF-8'
    },
    data: {
        property_one: value_one,
        property_two: value_two
    }
};

let response = await axios(options);
let responseOK = response && response.status === 200 && response.statusText === 'OK';
if (responseOK) {
    let data = await response.data;
}
cs

 

 

[JavaScript] Axios ์‚ฌ์šฉํ•˜์—ฌ ์›น์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ธฐ

๐Ÿ”ฝ AJAX, HTTP์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” ๐Ÿ”ฝ [JavaScript / ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ] AJAX / Callback, Promise, async, await ๐Ÿ“Œ ๋™๊ธฐ(Synchronous) ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ๋น„๋™๊ธฐ(Asynchronous) ํ”„๋กœ๊ทธ๋ž˜๋ฐ  ๋™๊ธฐ..

devjindev.tistory.com

 

โ—พ fecth

 

  • ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์žˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— import ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์—…๋ฐ์ดํŠธ์— ๋”ฐ๋ฅธ ์—๋Ÿฌ ๋ฐฉ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. (React Native์˜ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žฆ์•„์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ซ“์•„์˜ค์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, fetch์˜ ๊ฒฝ์šฐ ์ด๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.)
  • HTTP ์š”์ฒญ ์ทจ์†Œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ JSON ํ˜•ํƒœ๋กœ ์ž๋™ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค. (.json() ์‚ฌ์šฉ ํ•„์š” O)
  • ๋„คํŠธ์›Œํฌ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค. (response timeout API ์ œ๊ณต X)
  • return ๊ฐ’์€ Promise ๊ฐ์ฒด ํ˜•ํƒœ์ด๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let url = 'https://someurl.com';
let options = {
    method: 'POST',
    mode: 'cors',
    headers: {
        'Accept''application/json',
        'Content-Type''application/json;charset=UTF-8'
    },
    body: JSON.stringify({
        property_one: value_one,
        property_two: value_two
    })
};

let response = await fetch(url, options);
let responseOK = response && response.ok;
if (responseOK) {
    let data = await response.json();
}
cs

 

 

โœ” fetch์˜ request ํ•จ์ˆ˜๋Š” response ๊ฐ์ฒด๊ฐ€ ok ํ”„๋กœํผํ‹ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ •์ƒ์ ์ธ ์š”์ฒญ/์‘๋‹ต์„ ์ฒดํฌํ•˜๊ณ , axios๋Š” status ๊ฐ’์ด 200์ธ์ง€์™€ statusText๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธํ•œ๋‹ค.

โœ” fetch๋Š” response ๊ฐ์ฒด์— .json() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ json ๊ฐ์ฒด๋ฅผ ์–ป๊ณ , axios๋Š” response ๊ฐ์ฒด์˜ data property์— ์ ‘๊ทผํ•˜์—ฌ ์–ป๋Š”๋‹ค.

๐Ÿ”Ž ์ฐธ๊ณ  ์ž๋ฃŒ

๐Ÿ’ก ๊ฐ™์ด ๋ณด๋ฉด ์ข‹์„ Post

 

[JavaScript / ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ] AJAX / Callback, Promise, async, await

๐Ÿ“Œ ๋™๊ธฐ(Synchronous) ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ๋น„๋™๊ธฐ(Asynchronous) ํ”„๋กœ๊ทธ๋ž˜๋ฐ  ๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑ๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.  ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ฝ”๋“œ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ

devjindev.tistory.com

 

[JavaScript] Axios ์‚ฌ์šฉํ•˜์—ฌ ์›น์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ธฐ

๐Ÿ”ฝ AJAX, HTTP์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” ๐Ÿ”ฝ [JavaScript / ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ] AJAX / Callback, Promise, async, await ๐Ÿ“Œ ๋™๊ธฐ(Synchronous) ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ๋น„๋™๊ธฐ(Asynchronous) ํ”„๋กœ๊ทธ๋ž˜๋ฐ  ๋™๊ธฐ..

devjindev.tistory.com