[JavaScript] Fetch API ์‚ฌ์šฉํ•ด๋ณด๊ธฐ (JSONplaceholder)
728x90

Fetch API๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์—ฐ์Šต!

JSONPlaceholder

์˜ˆ์‹œ๋กœ jsonplaceholder ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋ ค ํ•œ๋‹ค.
์„œ๋ฒ„๊ฐ€ ์—†์„ ๋•Œ ๊ฐ€์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ์— ์œ ์šฉํ•œ ์‚ฌ์ดํŠธ๋‹ค.

https://jsonplaceholder.typicode.com/

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ด ์ค‘์—์„œ users๋ฅผ ์ด์šฉํ•ด๋ณด๋ ค ํ•œ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ HTTP ๋ฉ”์„œ๋“œ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. REST API๋ฅผ ์—ฐ์Šตํ•ด๋ณผ ๋•Œ๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

Fetch API๋กœ ๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜ค๊ธฐ

Fetch API

Fetch API๋Š” XMLHttpRequest ๊ฐ์ฒด์—์„œ ์ข€ ๋” ๋ณด์™„๋œ API๋กœ, ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €๋ผ๋ฉด ๋Œ€๋ถ€๋ถ„ ๋‚ด์žฅ๋˜์–ด์žˆ๋‹ค.

๋น„๋™๊ธฐ ํ†ต์‹ ์— ๋งŽ์ด ์‚ฌ์šฉ๋˜๋˜ ajax๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ํŽ˜์ด์ง€์˜ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” API๋‹ค.
์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ url์„ ๋ฐ›๊ณ , ํ•„์ˆ˜๊ฐ€ ์•„๋‹Œ ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์ดˆ๊ธฐํ™”์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š”๋‹ค.

 

์œ„์˜ JSONplaceholder url์„ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Fetch๋Š” ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด ๊ฐ์ฒด๋Š” response์ธ๋ฐ, ์š”์ฒญ์ด ์„ฑ๊ณตํ•˜๋“  ์‹คํŒจํ•˜๋“  ๋ฐ˜ํ™˜๋œ๋‹ค.
๊ทธ๋ž˜์„œ response ๊ฐ์ฒด๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ˜ํ™˜๋˜์—ˆ์„ ๋•Œ๋งŒ json ๋ฐ์ดํ„ฐ๋กœ ๋ฐ”๊พธ์–ด ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ–ˆ๋‹ค.

const fetchInfo = function () {
  return fetch('https://jsonplaceholder.typicode.com/users').then(
    (response) => {
      if (response.ok) {
        return response.json();
      } else {
        return console.error('response error');
      }
    }
  );
};

 

 

๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ HTML ํƒœ๊ทธ์— ๋„ฃ๋Š” ๊ณผ์ •์ด๋‹ค.
userInfos๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— for..of ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์ •๋ณด๋ฅผ li ํƒœ๊ทธ์— ๋‹ด์•„ ์ด๋ฏธ ์ •์˜๋˜์–ด ์žˆ๋Š” ul ํƒœ๊ทธ๋กœ ๋„ฃ์–ด์คฌ๋‹ค.

const repoInfos = function (userInfos) {
  for (user of userInfos) {
    let li = document.createElement('li');
    li.classList.add('user-item');
    let info = `name: ${user.name}\n email: ${user.email}\n phone: ${user.phone}`;
    li.innerText = info;
    userList.prepend(li);
  }
};

 

 

์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
CSS๋ฅผ ๊ฐ€๋ณ๊ฒŒ ๋งŒ์ ธ์คฌ๋‹ค. Grid๋ฅผ ์ด์šฉํ•ด 2๋‹จ์œผ๋กœ ์ •๋ ฌํ–ˆ๋‹ค.

 

 

์‘์šฉ

json ๋ฐ์ดํ„ฐ ์ค‘ ์ด๋ฆ„์„ select ํƒœ๊ทธ์— ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์„œ ์„ ํƒํ•œ ์ด๋ฆ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐฐ๊ฒฝ์ƒ‰์„ ๋ฐ”๊พธ๋„๋ก ํ•ด๋ดค๋‹ค.
์ œ์ด์ฟผ๋ฆฌ๋กœ ์จ๋ดค๋‹ค๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํ•˜๋ ค๋‹ˆ ์‰ฝ์ง€ ์•Š์•˜๋‹ค!.. ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๋”ฐ๋กœ ํฌ์ŠคํŒ… ํ•  ์˜ˆ์ •.

select ํƒœ๊ทธ์— option ํƒœ๊ทธ๋ฅผ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ๋•Œ ์œ„ ์ฝ”๋“œ๋ฅผ ์‘์šฉํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ๋‹ค.

const loadInfos = function (userInfo) {
  for (user of userInfo) {
    let option = document.createElement('option');
    let name = user.name;
    option.setAttribute('value', name);
    option.innerText = name;
    nameList.prepend(option);
  }
};

728x90