๊ฐœ๋ฐœ ๊ณต๋ถ€/๋ฐ๋ธŒ์ฝ”์Šค TIL

[ํด๋ผ์šฐ๋”ฉ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”์ง€๋‹ˆ์–ด๋ง TIL] 240119 - ๊ณ ์–‘์ด ์‚ฌ์ง„ ๊ฒ€์ƒ‰ ์‹ค์Šต 3

๊ฐ€์šค์ด 2024. 1. 20. 14:54

Intro


์˜ค๋Š˜์€ ๊ณ ์–‘์ด ์‚ฌ์ง„ ๊ฒ€์ƒ‰ ์‹ค์Šต์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ๋ฆฌํŒฉํ† ๋ง์„ ํ•™์Šตํ–ˆ๋‹ค.

๋ชจ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ’€๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ ๊ฐ•์˜๋ฅผ ๋‹ค ๋“ค์–ด์•ผ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ณ„์† ๋ฏธ๋ฃจ๊ณ  ์žˆ๋Š” ์ค‘์ด๋‹ค ใ…Ž,,,

 

 

 

 

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ

: api, ๋ชจ๋“ˆํ™”, ๊ธฐํƒ€ ๋ฆฌํŒฉํ† ๋ง


๐Ÿ‘ฉ‍๐Ÿ’ป async-await ๋„์ž…
API fetch ์ฝ”๋“œ๋ฅผ async , await ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•ด์ฃผ์„ธ์š”. ํ•ด๋‹น ์ฝ”๋“œ๋“ค์€ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด์„œ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ฉ‍๐Ÿ’ป api ์š”์ฒญ ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ
API ์˜ status code ์— ๋”ฐ๋ผ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

async-await

๊ธฐ์กด ์ฝ”๋“œ์—์„  api ํ˜ธ์ถœ ์‹œ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ fetch-then์„ ํ†ตํ•ด api๋ฅผ ํ˜ธ์ถœํ•˜์˜€๋Š”๋ฐ fetch-then๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ์ข‹์€ async-await ๋ฌธ๋ฒ•์„ ์ด์šฉํ•ด ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜์˜€๋‹ค.

  • fetch-then
const result = () => {
  return fetch(url).then((res) => res.json());
}
  • async-await
const request = async url => {
  return await fetch(url);
}

 

์ถ”๊ฐ€๋กœ, try-catch๋ฌธ์„ ์‚ฌ์šฉํ•ด ์—๋Ÿฌ ํ•ธ๋“ค๋ง์„ ํ•˜์˜€๋‹ค.

const request = async (url) => {
  try {
    const result = await fetch(url);
    if (result.status === 200) {
      return result.json();
    } else throw REQUEST_ERROR[result.status];
  } catch (err) {
    alert(err.msg);
    return { data: null };
  }
};

 

 

 


 

๐Ÿ‘ฉ‍๐Ÿ’ป ES6, import, export
ES6 module ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. webpack , parcel ๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”. ํ•ด๋‹น ์ฝ”๋“œ ์‹คํ–‰์„ ์œ„ํ•ด์„œ๋Š” http-server ๋ชจ๋“ˆ์„(๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ๋„์šฐ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ) ํ†ตํ•ด index.html ์„ ๋„์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

import/export

<body>	
  <div id="App"></div>
  <script src="src/utils/validator.js"></script>
  <script src="src/api.js"></script>
  <script src="src/ImageInfo.js"></script>
  <script src="src/SearchInput.js"></script>
  <script src="src/DarkModeToggle.js"></script>
  <script src="src/Loading.js"></script>
  <script src="src/KeywordHistory.js"></script>
  <script src="src/SearchResult.js"></script>
  <script src="src/App.js"></script>
  <script src="src/main.js"></script>
</body>

 

import/export๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด์„  script ํƒœ๊ทธ๋กœ index.html์— ํ˜ธ์ถœํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค.

<div id="App"></div>
<script type="module" src="src/main.js"></script>

 

ES6์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋„์ž…๋œ import/export๋ฅผ ์‚ฌ์šฉํ•ด main.js๋‚˜ App.js์— ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋“ค์„ exportํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ index.html์—๋Š” main.js๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.

์ค‘์š”ํ•œ ๊ฑด type="module" ์†์„ฑ์„ ๊ผญ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.

  • main.js
import App from './App.js';

new App(document.querySelector('#App'));
  • App.js
import Loading from './Loading.js';
import DarkModeToggle from './DarkModeToggle.js';
import ImageInfo from './ImageInfo.js';
import SearchInput from './SearchInput.js';
import SearchResult from './SearchResult.js';
import api from './api.js';

class App {
  ...
}

export default App

 

 

 

 


๊ธฐํƒ€ ๋ฆฌํŒฉํ† ๋ง

์ตœ๊ทผ ๊ฒ€์ƒ‰ํ•œ ํ‚ค์›Œ๋“œ๋ฅผ SearchInput ์•„๋ž˜์— ํ‘œ์‹œ๋˜๋„๋ก ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ์˜์—ญ์— ํ‘œ์‹œ๋œ ํŠน์ • ํ‚ค์›Œ๋“œ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๊ทธ ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰์ด ์ผ์–ด๋‚˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.
๋‹จ, ๊ฐ€์žฅ ์ตœ๊ทผ์— ๊ฒ€์ƒ‰ํ•œ 5๊ฐœ์˜ ํ‚ค์›Œ๋“œ๋งŒ ๋…ธ์ถœ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

Set

๊ณ ์œ ํ•œ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ธ Set์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๊ทผ์— ๊ฒ€์ƒ‰ํ•œ 5๊ฐœ์˜ ํ‚ค์›Œ๋“œ์—์„œ ์ค‘๋ณต๋œ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

Array.from(new Set(list))

 

new Set์œผ๋กœ Set ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ธ Array.from์„ ์‚ฌ์šฉํ•ด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

 

 

๋งˆ๋ฌด๋ฆฌ


์‹ค์Šต์„ ์ง„ํ–‰ํ•ด๋ณด๋‹ˆ ์•ž์œผ๋กœ ํ”„๋กœ์ ํŠธ ํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ๊ฐœ๋ฐœํ•ด์•ผ ํ• ์ง€ ๋ฐฉํ–ฅ์ด ์–ด๋А์ •๋„ ์žกํžˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ•์˜์—์„œ ๊ฐ•์‚ฌ๋‹˜์ด ์•Œ๋ ค์ฃผ์‹  ์ฝ”๋“œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ console.log๋ฅผ ์ฐ์–ด๋ณด๋ฉฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ๋“ค์–ด์˜ค๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์งœ๋‹ˆ ์–ด๋””์„œ๋ถ€ํ„ฐ ์ž˜๋ชป๋๋Š”์ง€ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ์— ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.