๐ŸŒ ๋ฐฐํฌ

https://realtimesearch.netlify.app/

โš™ ์‹คํ–‰ ๋ฐฉ๋ฒ•


  1. ํ”„๋กœ์ ํŠธ ๋‚ด๋ ค๋ฐ›๊ธฐ: git clone https://github.com/Minsoek96/Real-time-search.git ./
  2. ํŒจํ‚ค์ง€ ์„ค์น˜: npm install
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰: npm start (๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜์–ด ํ™ˆํŽ˜์ด์ง€๋กœ ์ด๋™)

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์„ค๋ช…


  • src/api: API ์š”์ฒญ ๊ด€๋ จ ๊ด€๋ฆฌ
  • src/context: Context ๊ด€๋ จ ๊ด€๋ฆฌ
  • src/hooks: ์ปค์Šคํ…€ ํ›… ๊ด€๋ฆฌ
  • src/pages: ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์ปดํฌ๋„ŒํŠธ ๊ด€๋ฆฌ
  • src/reducer: ์ƒํƒœ ๋ณ€ํ™” ๊ด€๋ฆฌ

๐Ÿ”จ๊ตฌํ˜„ ์‚ฌํ•ญ


์บ์‹ฑ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• :

  • ์บ์‹ฑ์€ AXIOS ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์š”์ฒญ์‹œ getCache Storage (key ) ๋ฐ˜ํ™˜ ๊ฐ’์ด ์žˆ์œผ๋ฉด ์š”์ฒญ์ค‘์ง€๋ฅผ ์œ„ํ•ด Error์— ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์‘๋‹ต์‹œ ์‘๋‹ต๊ฐ’ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉด setCacheStorage (key, data, etime) ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • Error๋ฅผ ์‘๋‹ตํ•œ ๊ฒฝ์šฐ์— ์บ์‰ฌ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š”๊ฒฝ์šฐ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

API ํ˜ธ์ถœ ์ตœ์ ํ™” ์ „๋žต :

  • ๋””๋ฐ”์šด์‹ฑ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • useDebounce ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ถ”๊ฐ€ ์ž…๋ ฅ์ด ์—†์„ ๊ฒฝ์šฐ์—๋งŒ API๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ํƒ€์ดํ•‘ํ•˜๋Š” ๋™์•ˆ์—๋Š” API ํ˜ธ์ถœ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ํƒ€์ดํ•‘์ด ๋ฉˆ์ถ˜ ํ›„ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์— API ํ˜ธ์ถœ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ‚ค๋ณด๋“œ ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„ :

  • **useKeyNavigation**๋ผ๋Š” ์ปค์Šคํ…€ ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ "ArrowUp"๊ณผ "ArrowDown" ํ‚ค ์ž…๋ ฅ์„ ๊ฐ์ง€ํ•˜๊ณ , ํ˜„์žฌ ์„ ํƒ๋œ ๊ฒ€์ƒ‰์–ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํ‚ค๋ณด๋“œ๋กœ ๊ฒ€์ƒ‰์–ด ๋ชฉ๋ก์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์•„์ดํ…œ ๋ฐ”๋‹ฅ์ด ์•„๋‹ˆ๋ผ๋ฉด โ€œArrowDownโ€ ์ธ๋ฐ์Šค - 1
  • ์•„์ดํ…œ์ด -1 ๋ณด๋‹ค ํฌ๋ฉด โ€œArrowUpโ€ ์ธ๋ฑ์Šค + 1
  • Enter callback