๐Ÿ“ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ฝ๊ธฐ ๊ฐ€์ด๋“œ src ๋‚ด ํŒŒ์ผ(App.js, api.js) > ํด๋” ๋ณ„ ํŒŒ์ผ ์ˆœ์œผ๋กœ ์ž‘์„ฑํ•˜์˜€์œผ๋ฉฐ, ๊ณตํ†ต์ ์œผ๋กœ ๊ฐœ์„ ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋ถ€๋ถ„์€ ํ•˜๋‹จ์˜ Overview์— ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. AS-IS์™€ TO-BE์˜ ๋ฒˆํ˜ธ๋ฅผ ์ง์ง€์–ด ์ฝ์œผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (์˜ˆ: AS-IS์˜ n๋ฒˆ๊ณผ TO-BE์˜ n๋ฒˆ์ด ํ˜„ ์ฝ”๋“œ์˜ ์ƒํ™ฉ ๋ถ„์„๊ณผ ๊ทธ ์ฝ”๋“œ์˜ ๊ฐœ์„  ์‚ฌํ•ญ!)

<aside> ๐Ÿ’ก โ›” AS-IS : ํ˜„ ์ฝ”๋“œ์˜ ์ƒํ™ฉ ๋ถ„์„ โœ… TO-BE : ๊ฐœ์„  ์‚ฌํ•ญ

</aside>

๐Ÿ“‚ App.js

โ›” AS-IS

  1. App.js ๋‚ด๋ถ€์— Routes ํ•จ์ˆ˜๊ฐ€ ํ•จ๊ป˜ ์กด์žฌํ•˜๊ณ  ์žˆ๋‹ค.
  2. Routes ๋‚ด๋ถ€์— path๋ฅผ string์œผ๋กœ ์ง์ ‘ ์ž…๋ ฅํ•ด ์ฃผ๊ณ  ์žˆ๋‹ค.
  3. useTransition ํ•จ์ˆ˜ ๋งˆ์ง€๋ง‰ ๋งค๊ฐœ๋ณ€์ˆ˜ animated๋ฅผ object๋กœ ์ง์ ‘ ์ž…๋ ฅํ•ด ์ฃผ๊ณ  ์žˆ๋‹ค.

โœ… TO-BE

  1. ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์—๋Š” ํ•˜๋‚˜์˜ ๊ด€์‹ฌ์‚ฌ๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. Routes.js ํŒŒ์ผ์„ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋ถ„๋ฆฌํ•œ๋‹ค.
  2. Routes ๋‚ด๋ถ€์— path๋Š” ์ƒ์ˆ˜๋กœ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์œ ์ง€ ๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค.
  3. animated ์„ค์ •ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ƒ์ˆ˜๋กœ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์œ ์ง€ ๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค.

๐Ÿ“‚ api.js

โ›” AS-IS

  1. base URL์„ string์œผ๋กœ ์ง์ ‘ ์ž…๋ ฅํ•ด ์ฃผ๊ณ  ์žˆ๋‹ค.
  2. ...rest ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ object ์•ˆ์— ๋ฌด์Šจ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.

โœ… TO-BE

  1. base URL์„ ๋ณ„๋„์˜ ์ƒ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•ด ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ•œ๋‹ค.
  2. ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ •๋ณด๋ฅผ ํ• ๋‹นํ•˜์—ฌ ๋ณ€์ˆ˜์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.

๐Ÿ“ components > Books

> ๐Ÿ“‚ Book.js

โ›” AS-IS

  1. volumeInfo์˜ imageLinks.thumbnail์ด ์—†๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ์ง€๊ฐ€ ํ™”๋ฉด์— ์ œ์‹œ๋˜์ง€ ์•Š๋Š”๋‹ค.
  2. "๋” ๋ณด๊ธฐ" ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๊ธฐ์กด Book ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜๋˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค.
  3. Book ์ปดํฌ๋„ŒํŠธ <img> ์—˜๋ฆฌ๋จผํŠธ์˜ alt ๊ฐ’์ด ๋น„์–ด ์žˆ๋‹ค.
  4. jsx ๋‚ด๋ถ€์— ์ธ๋ผ์ธ์œผ๋กœ css๋ฅผ ์Šคํƒ€์ผ๋งํ•˜๊ณ  ์žˆ์–ด ๋งˆํฌ์—… ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.
  5. jsx ๋งˆํฌ์—…์ด ๋Œ€๋ถ€๋ถ„ <div>, <p> ํƒœ๊ทธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์‹œ๋งจํ‹ฑํ•˜์ง€ ๋ชปํ•˜๋‹ค.
  6. ์ฑ… ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋ ˆ์ด์•„์›ƒ์„ ์„ ํƒ ์‹œ, ์ปค์„œ์˜ ๋ชจ์–‘์ด default ๋ชจ์–‘์ด์–ด์„œ ํด๋ฆญํ•˜๋Š” ๋Š๋‚Œ์ด ๋“ค์ง€ ์•Š๋Š”๋‹ค.

โœ… TO-BE

  1. ์ด๋ฏธ์ง€๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ defalutValue๋กœ ๋„ฃ์–ด์ค„ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ์‚ฝ์ž…ํ•ด ์ค€๋‹ค.
  2. React.memo(Book)์„ ์‚ฌ์šฉํ•ด ์คŒ์œผ๋กœ์จ ์„ฑ๋Šฅ ์ตœ์ ํ™”์‹œํ‚จ๋‹ค.
  3. Book ์ปดํฌ๋„ŒํŠธ <img> ์—˜๋ฆฌ๋จผํŠธ์˜ alt ๊ฐ’์— title์„ ์ž…๋ ฅํ•˜์—ฌ ์›น ์ ‘๊ทผ์„ฑ์„ ๋†’์ธ๋‹ค.
  4. css ์Šคํƒ€์ผ๋ง์„ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด ๋ถ„๋ฆฌ์‹œ์ผœ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.
  5. ๊ฐ ์—˜๋ฆฌ๋จผํŠธ ๋ณ„๋กœ ์ ๋‹นํ•œ ํƒœ๊ทธ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๋งจํ‹ฑํ•˜๊ฒŒ ๋งˆํฌ์—…ํ•œ๋‹ค.
  6. css cursor: pointer;๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ ์ปค์„œ ๋ชจ์–‘์„ ํด๋ฆญํ•˜๋Š” hand ๋ชจ์–‘์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

> ๐Ÿ“‚ index.js

โ›” AS-IS

  1. Book ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ defaultClassName์„ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ๋‹ค.
  2. Book ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ item์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ •๋ณด๊นŒ์ง€ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ๋‹ค.

โœ… TO-BE

  1. Book ์ปดํฌ๋„ŒํŠธ๋กœ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ๋Š” props๊ฐ€ styles.item์ด๋ผ๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ƒ์ˆ˜๊ฐ’์ด๋ฉฐ, ์Šคํƒ€์ผ ๊ด€๋ฆฌ๋Š” props๋กœ ๊ตณ์ด ์ „๋‹ฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹Œ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค๊ณ  ํŒ๋‹จ๋œ๋‹ค.
  2. Book ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์ „๋‹ฌ๋ฐ›์•„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํšจ์œจ์ ์ด๋ผ๊ณ  ํŒ๋‹จ๋œ๋‹ค.