/search-movies

Search Movie App with TypeScript & React

Primary LanguageTypeScript

๐ŸŽฌ Search Movie App

๐Ÿ™Œ ์„œ๋น„์Šค ์†Œ๊ฐœ

์›ํ•˜๋Š” ์˜ํ™”๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , ๋‚˜๋งŒ์˜ ์ฆ๊ฒจ์ฐพ๊ธฐ์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.

๐Ÿš€ ๋ฐฐํฌ

Netlify Status

๐Ÿ”ง ๊ธฐ์ˆ  ์Šคํƒ

  • Typescript
  • React, React router, Recoil
  • react-intersection-observer
  • axios
  • lodash, storejs, classnames
  • SCSS, CSS Modules

โœจ ๊ตฌํ˜„ ๊ธฐ๋Šฅ

  • Recoil ํ†ตํ•œ ์ƒํƒœ๊ด€๋ฆฌ
  • Infinite Scroll ๊ตฌํ˜„
  • axios ๋กœ API ํ†ต์‹  ๊ตฌํ˜„
  • lodash ๋กœ ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
  • classnames ๋กœ ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ ์ •์˜
  • eslint, prettier, stylelint ์ ์šฉ
  • mediaQuery ๋กœ ๋ฐ˜์‘ํ˜• ์›น ๊ตฌํ˜„

๐Ÿ’ก ๊ตฌํ˜„ ์ƒ์„ธ

Infinite Scroll ๊ตฌํ˜„

  • ํ˜„์žฌ ํŽ˜์ด์ง€๊ฐ€ ์ „์ฒด ํŽ˜์ด์ง€๋ณด๋‹ค ์ ์„ ๊ฒฝ์šฐ, ์Šคํฌ๋กค ์‹œ ์ž๋™์œผ๋กœ ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ, scrollIntoView() ๋ฅผ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • useParams ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ๊ฒ€์ƒ‰์–ด์™€ ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ฆ๊ฒจ ์ฐพ๊ธฐ ๋“ฑ๋ก ๋ฐ ์ƒํƒœ ์œ ์ง€

  • ๋ฆฌ์ŠคํŠธ ๋ชฉ๋ก์˜ ์˜ํ™”๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ๋“ฑ๋ก ๋ฐ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฆ๊ฒจ์ฐพ๊ธฐ ์ƒํƒœ๋Š” ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ๋˜์–ด ์œ ์ง€๋˜๋ฉฐ, ๊ฒ€์ƒ‰ ์‹œ ์ฆ๊ฒจ์ฐพ๊ธฐ ๋“ฑ๋ก ์œ ๋ฌด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Favorites ํŽ˜์ด์ง€์—์„œ ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ชฉ๋ก์„ ํ™•์ธ ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—๋Ÿฌ ํ•ธ๋“ค๋ง

  • ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์ง„์ž…ํ•˜๋Š” ๊ฒฝ์šฐ 404 ํŽ˜์ด์ง€(NotFound)๋ฅผ ๋„์›๋‹ˆ๋‹ค.
  • lodash ๋ฅผ ํ†ตํ•ด ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • Poster ์ด๋ฏธ์ง€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ๋Œ€์ฒด ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๐Ÿ“ธ ๊ตฌํ˜„ ๊ฒฐ๊ณผ

ํ™ˆ
๋ฌดํ•œ ์Šคํฌ๋กค ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€/ํ•ด์ œ