์ ์ฒด ๊ธ (72) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [spotify-api] VINYLIFY : ์คํฌํฐํ์ด apiํ์ฉํ ๊ฒ์ + ์ฌ์ ํ๋ก์ ํธ(n)๊ฒ์ ๊ฒฐ๊ณผ react-infinite-scroll๊ณผ useInfiniteQuery๋ก ๋ฌดํ ์คํฌ๋กค ๊ตฌํํ๊ธฐ ๐ ๋๋์ด 2๋ฌ(?) ์ ๋ ๊ธด ๊ธฐ๊ฐ ๋์ ์งํํ๋ ํ๋ก์ ํธ๊ฐ ์ง์ง ๋์ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๋๋! ๐ฅณ ์ ๋ฆฌํด์ ํ๋ฒ์ ์ฌ๋ฆฌ๋ ค๋ค๊ฐ ์ถํ ๊ธฐ๋ (?)์ผ๋ก ์ค๋ ๋ฐ๋ํ๊ฒ ๋๋ธ react-infinite-scroll+ useInfiniteQuery๋ฌดํ ์คํฌ๋กค ๊ตฌํ์ ๋ํด ๊ธฐ๋กํ๊ธฐ๋ก ํ๋ค.โ ๏ธ ํ๋ก์ ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค ๋ฒ์ ผ- "@tanstack/react-query": "^5.37.1"- "react": "^18.2.0",- "react-infinite-scroll-component": "^6.1.0"๐ ๊นํ๋ธ์์ ๋ ํฌ์งํฐ๋ฆฌ ๊ตฌ๊ฒฝํ๋ฌ ๊ฐ๊ธฐ์ฒซ ์๋์๋๋ ์ข ๋ณต์กํ ๋ฐฉ์์ผ๋ก ๊ตฌํ์ ํ์๋ค."react-intersection-observer" ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํด ๋ฆฌ์คํธ ๋ง์ง๋ง ์์ดํ ์ ref๋ฅผ ์ง์ ํ๊ณ ,์ด ref๊ฐ ๋ทฐํฌํธ์.. ๋์์ธ ์์คํ 101 : ๋์์ธ ์์คํ ์ด๋? ๐ค ๋ชจ๋ ธ๋ ํฌ ํ๋ก์ ํธ ์ธํ ์ ํ๋ฉด์ ๊ณ ๋ฏผํด๋ด์ผ ํ ๋ถ๋ถ ์ค ํ๋์ธ ๋์์ธ ์์คํ ๊ตฌ์ถํ๊ธฐ!๋ณธ๊ฒฉ์ ์ผ๋ก ๋์ ํ๊ธฐ ์ ์ "๋์์ธ ์์คํ ์ด ๋ญ์ง, ์ ํ์ํ ์ง, ๋์ ์ด ํ์ํ ์ง"์ ๋ํด ์ดํด๋ณด์.๋์์ธ ์์คํ ์ด๋At its core, a design system is a set of building blocks and standards that help keep the look and feel of products and experiences consistent. ๋์์ธ ์์คํ ์ด๋ ํ๋ก๋ํธ๊ณผ ๊ฒฝํ์ด ์ฃผ๋ ๋ชจ์ต๊ณผ ๋๋์ด ์ผ์ ํ๋๋ก ๋์์ฃผ๋ ๊ธฐ์ค๊ณผ ๊ธฐ๋ณธ ์ ๋์ ๋ชจ์์ด๋ค.๋ณต์กํ ๋์งํธ ํ๋ก๋ํธ๋ฅผ ๋ง๋๋ ํ์ ์ํด ํต์ผ๋ ์ธ์ด์ ๊ตฌ์กฐํ๋ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ๋ ์ฒญ์ฌ์ง ์ญํ ์ ํ๋ค. ์์ด์ฝ๊ณผ ์๊น์ ์ ์ ์๊ฒ ํน์ ํ.. [turboRepo scss] Cannot find module './mybutton.module.scss' or its corresponding type declarations.ts(2307) ๐ต๏ธ ์ด์scss๋ก ๋ฒํผ ๋ง๋ค์ด๋ณด๊ธฐ ์ค..๋ค์๊ณผ ๊ฐ์ ts ๊ฒฝ๊ณ ๊ฐ ๋ด๋ค. ๋ฌธ์ ๋ ts์ tsx ํ์ฅ์๋ก ๋๋ด์ผ๋ง ๋ชจ๋๋ก ์ธ์ํด์ scss ํ์ฅ์์ ํ์ผ์ ์ธ์ํ์ง ๋ชปํ ๊ฑฐ์๋ค. ๐ ํด๊ฒฐ1. tsconfig.ts ์ ๊ฐ์ ์ต์๋จ ๊ฒฝ๋ก์ typings ํด๋๋ฅผ ๋ง๋ค์ด์ฃผ์.2. typings/ ํด๋ ๋ด์ declarations.d.ts ํ์ผ์ ๋ง๋ค์ด์ฃผ๊ณ ๋ค์์ ์ฝ๋ ์์ฑ.declare module "*.scss" { const content: Record; export default content;} 3. tsconfig.ts ์ typings ํด๋ ์ถ๊ฐํด์ฃผ๊ธฐ{ "extends": "@repo/typescript-config/react-library.json", "compilerOptions": { .. โ๏ธ ๊ฐ์๋๊ณผ ๋ฆฌ์กํธ ํ์ด๋ฒ ๐ฉ๐ป๐ป ์ค๋ ๋ค๋ฃฐ ๋ด์ฉ- ๊ฐ์๋์ด๋? (feat. DOM์ด๋? ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ )- ๊ฐ์๋ ๋ง๋๋ ๊ณผ์ (feat. react fiber, ํ์ด๋ฒ ํธ๋ฆฌ์ ๋๋ธ ๋ฒํผ๋ง)- ๋ฆฌ์กํธ ํ์ด๋ฒ์ ์ฃผ์ํ ์์ฑ๋คDOM ์ด๋? ๊ฐ์๋(virtual DOM)์ด ๋ญ๊น? virtual + DOM์ด๋ผ๋ ๊ฒ์ธ๋ฐ, DOM์ด ๋ญ์ง ์๋ฉด ์๋ฟ์ ๊ฒ ๊ฐ๋ค.DOM์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ๋ด์ฉ์ ๊ทธ๋ ค์ฃผ๊ธฐ ์ํด ํ์ํ ์ ๋ณด๋ฅผ ํธ๋ฆฌ ๋ชจ์์ผ๋ก ๊ตฌ์ฑํด ๋์ ๊ฒ์ด๋ค.DOM์์ฑ ๊ณผ์ ์๋ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์ ํฌํจ๋๋๋ฐ, ์ด ๊ณผ์ ๋ ๊ฐ๋จํ ์ดํด๋ณด์.DOM์ ์นํ์ด์ง์ ์ฝํ ์ธ ์ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์นํ์ด์ง์ ๋ํ ์ธํฐํ์ด์ค๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค. 0. ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ฃผ์๋ฅผ ๋ฐฉ๋ฌธํด H.. ํจํค์ง ๋งค๋์ ( ft. ํจํค์ง ๋งค๋์ ์ ๊ณผ๊ฑฐ, ํ ์ค์ ์ ํ, ๊ทธ๋ฆฌ๊ณ ๋ฏธ๋) ๐ค turborepo๋ก ๋ชจ๋ ธ๋ ํฌ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ ค๊ณ ์ค์น๋ฅผ ํ๊ธฐ ์ํ ํจํค์ง ๋งค๋์ ๋ค ์ค ์ด๋ค ๊ฑธ ์ฌ์ฉํด์ผ ํ๋? ์ด๋ค์ ์ฐจ์ด์ ์ ํ ๊ธฐ์ค์ ๋ญ๊น?๐ ๋๋ง์นจ ํจํค์ง ๋งค๋์ ์ ๋ํด ํ๋ฒ ์ง๊ณ ๋์ด๊ฐ ๋ณด๋ ค๋ค๊ฐ ํ ์ค์ ํจํค์ง ๋งค๋์ ์ ๊ณผ๊ฑฐ, ํ ์ค์ ์ ํ, ๊ทธ๋ฆฌ๊ณ ๋ฏธ๋๋ ์ข์ ๊ธ์ด ์ฌ๋ผ์์ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค. ๐ฉ๐ป๐ป ์ดํด๋ณผ ๋ด์ฉ- ํจํค์ง ๋งค๋์ ๊ฐ ๋ฌด์์ธ์ง- ํจํค์ง ๋งค๋์ ๊ฐ ๋์ํ๋ 3๊ฐ์ง ๋จ๊ณ- npm vs pnpm vs Yarn PnP- ํ ์ค์ Pick ๐ฉ๐ป๐ป ํจํค์ง ๋งค๋์ ๋?๋ชจ๋์์คํ (ESM & CJS)์ ๋ํด์ ๋ค๋ค๋ฏ์ด JS/TS์์๋ require ํน์ import๋ก ์ธ๋ถ์ ๋ชจ๋์ ์ฌ์ฉํ ์ ์๋ค.์ฌ๊ธฐ์ ์ธ๋ถ์ ๋ชจ๋์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐธ์กฐํ๋๋ก ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ด ๋ฐ๋ก๋ฐ๋ก ํจํค์ง ๋งค๋์ ๋ค... ํ ์คใ ฃSLASH 23 - ํผ๋ : ์์์ง๋ ํ์ด์ง ํ ๋ฐฉ์ ๊ด๋ฆฌํ๊ธฐ (TOSH | SLASH 23 - Funnel Pattern : Organizing an overflow of pages at once) โ ๏ธ ์ ์๊ถ ๋ณดํธ๋ฅผ ์ํด ์๋ฃ ๋ฐ ์์๊ฐ ๋์ฒด๋์์ต๋๋ค. ์์ ์ฝ๋๋ Reactโ๏ธ๋ก ์์ฑ๋์์ต๋๋ค.๐ซจ ํต์ ์ฌ ๊ฐ์ ์ ํ๊ธฐ ์ํด์ ์๋์ ๊ฐ์ด ๊ธด ํผ๊ณผ ์ฝ์ ์ด ํฌํจ๋ ํ์ด์ง๋ฅผ ๋ง์ฃผ์น๊ฒ ๋ ๋๊ฐ ์๋ค.์ด๋ ๊ฒ ๋ง์ ํ์ด์ง๋ค์ ๋๋๋๋ ํ๋ฆ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ๋ญ๊น?์ด๋ฒ๊ธ์์๋ ํ ์ค SLASH23์์ ๋ค๋ฃฌ ํผ๋์ ํตํ ๋ถ๊ธฐ์ ์ํ ๊ด๋ฆฌ์ ๋ํด ์ดํด๋ณด์.์๋น์ค๋ฅผ ๊ฐ๋ฐํ ๋ ๋ํ์ ์ธ ํ๋ก ํธ์๋ ํจํด๋ค1. ์์ ๋ชฉ๋ก ํ์ด์ง -> ์์ธ ํ์ด์ง ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๋ธ๋ก๊ทธ๋ ๋ด์ค, To-do ๋ฆฌ์คํธ๋ ์ด ์ ํ์ ํด๋น๋๋ค. 2. ๋จ์ผ ํ์ด์ง ํ์ด์ง ์ด๋ ์์ด ํ ํ๋ฉด ๋ด์์ ์ํธ์์ฉํ ์ ์๊ณ , ์ง๋๋ ๋ฉ์ ์ ์ฑ์ด ์ด ์ ํ์ ํด๋น๋๋ค. 3. ์ค๋ฌธ์กฐ์ฌ ์ฌ๋ฌ ํ์ด์ง๋ค์ ํตํด ์ํ๋ฅผ ์์ง -> ๊ฒฐ๊ณผ ํ์ด์ง๋ก ์ด๋ฃจ.. ๋ชจ๋ ์์คํ ๐ฃ๏ธ import๊ณผ require์ ์ฐจ์ด๋ฅผ ์๊ณ ๊ณ์๋์? ๐ค ๋ ธ๋ ํ๋ก์ ํธ์์๋ require ๋ง์ด ๋ณธ ๊ฑฐ ๊ฐ๊ณ , react์์ import ๋ง์ด ์ผ๋ ๊ฑฐ ๊ฐ์๋ฐ? import๊ณผ require์ ๋ํด ์๊ธฐ ์ํด์๋ ๋ชจ๋ ์์คํ ์ด๋ผ๋ ๊ฒ์ ๋ํด ์์์ผ ํ๋ค.์ค๋์ ๋ชจ๋ ์์คํ ์ด ๋ฌด์์ด๊ณ , ์ด๋ค ๊ฒ๋ค์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ํน์ง๊ณผ ์ฅ๋จ์ ์ ์ดํด๋ณด์.JS ๋ชจ๋ ์์คํ ์ด๋?์์ ์น์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ด๋นํ๊ณ ์ ๊ณตํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ ์ ๋์๋ค.ํ์ง๋ง ์ ์ฐจ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ญํ ์ด ๊ฑฐ๋ํด์ง๊ณ , ๊ธฐ๋ฅ๋ค์ ๋ง๋ค๋ฉด์ ๋ค์์คํ์ด์ค๋ฉฐ dependency๋ฉฐ ๊ด๋ฆฌํ ๊ฒ๋ ๋น๋ก(์ ๋น๋ก๋ ์๋ ์๋?)ํด์ ๋ฐฉ๋ํด์ก๋ค.๋ชจ๋ ์์คํ ์ ์ด๋ ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ด ์ค์ฝํ ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ์์ผ๋ก ๋ฑ์ฅํ๊ฒ ๋์๋ค.J.. โ๏ธ Error boundary ๐ฑ ์ฑ ๊ฐ๋ฐ ๋์ค ์๋ฌ๊ฐ ๋ฐ์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์๋๋ค๋ฉด ๋จธ๋ฆฌ๋ฟ๋ง ์๋๋ผ ์ ์ ์๊ฒ ๋ณด์ฌ์ค ํ๋ฉด๋ ์ํ์๊ฒ ๋ณํ ๊ฑฐ ๊ฐ๋ค.๐ค ๋ฆฌ์กํธ์์๋ ์๋ฌ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํด์ค ์ ์์๊น?๋ฆฌ์กํธ์ Error boundary (legacy)๊ฐ๋ฐ ๋ฌธ์์ ์ํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ฆฌ์กํธ๋ ๋ ๋๋ง ๋์ค์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด UI๋ฅผ ํ๋ฉด์์ ์ ๊ฑฐํ๋ค.์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ ํด๋น UI๋ฅผ Error boundary๋ก ๊ฐ์ธ์ค ์ ์๋ค. ์ฆ, Error boundary๋ ์๋ฌ๊ฐ ๋์ ์ ๊ฑฐ๋ UI๋์ ์ ํ๋ฉด์ fallback UI๋ฅผ ๋ณด์ฌ์ฃผ๋ ํน์ํ ์ปดํฌ๋ํธ๋ค. Error boundary๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ static getDerivedStateFromError๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.static getDerivedStateFromError๋ฅผ ์ ๊ณตํด์ผ ์๋ฌ.. ์ด์ 1 ยทยทยท 5 6 7 8 9 ๋ค์