๐ฉ๐ป๐ป dev (42) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Sass] ์ฃผ์(Comments) ์์ํ๊ธฐ์ ์์โ๏ธ ํด๋น ๊ธ์ .scss ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค!.scss์ .sass ํ์ฅ์์ ๋ฐ๋ผ ์ฃผ์์ด ๋์ํ๋ ๋ฐฉ์์๋ ์ฐจ์ด๊ฐ ์์ง๋ง ๊ณตํต์ ์ผ๋ก /**/๋ก ์์ฑ๋๋ ์ฃผ์์ css๋ก ์ปดํ์ผ๋๋ค๋ ์ , // ๋ก ์์ฑ๋ ์ฃผ์์ ์ปดํ์ผ ๋์ง ์๋๋ค๋ ์ ์ ๋์ผํฉ๋๋ค!๋์์ธ ์์คํ ์ ๋ง๋ค๋ฉด์ scss ์ฌ์ฉ๋ ์ตํ๋ ์ค์ด๋ค.์ฌ๋ฌ ์๋ฃ๋ค์ ์ฐธ๊ณ ํ๋ ๋์ค ์ฃผ์ ์คํ์ผ์ด ์กฐ๊ธ์ฉ ๋ฌ๋๋ค.์ด๋ค ๊ฒฝ์ฐ์๋ ์ด๋ค ๊ฑธ ์ฐ๋ ์ง ๊ถ๊ธํด์ ์ด๋ฒ ํฌ์คํ ์์ ๋ค๋ค๋ณด๊ธฐ๋ก ํ๋ค.Scss์์์ ์ฃผ์scss์์ ์ฌ์ฉํ๋ ์ฃผ์์ js์์ ๋์ํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํ๋ค. // ๋ก ์์ํ๋ single-line comment(ํ ์ค ์ฃผ์)๋ค์ css์์๋ silent comment๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋๋ฐ, ์ด๋ ํ css๋ ๋ง๋ค์ง ์๊ธฐ ๋๋ฌธ์ด๋ค./**/๋ก.. [react-hydration-error] Hydration failed because the server rendered didn't match the client [์ด์ ๊ธ : ๋์์ธ ์์คํ ์ด ๋ญ์ง ์๊ณ ์ถ๋ค๋ฉด ๐ ] 2024.07.11 - [๐ฉ๐ป๐ป dev] - ๋์์ธ ์์คํ 101 : ๋์์ธ ์์คํ ์ด๋?๐ฉ๐ป๐ง scss + next monorepo ๋์์ธ ์์คํ ์ ๋์ ํ๋ ์ค์ด๋ค.๋คํฌ๋ชจ๋๋ฅผ ์ถ๊ฐํด์ฃผ๊ธฐ ์ํด์ ์ฝ๋๋ฅผ ์ถ๊ฐํด ์คฌ๋๋ฐ ์๋ก๊ณ ์นจ์ ํ ๋๋ง๋ค "Hydration failed because the server rendered didn't match the client"์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.๋ค์์ ๊ฐ์ ์ค์๋ฅผ ํด๋ ํค๋งค์ง ์๊ณ , ํน์๋ ๋์ฒ๋ผ ํค๋งค๊ณ ๊ณ์ ๋ถ๋ค์ ์ํด ์กฐ๊ธ์ด๋ ๋์์ด ๋ ๊น ๊ธฐ๋ก์ ๋จ๊ฒจ๋๊ณ ์ ํ๋ค.์๋ฌ๋ ์ ๋ฐ์ํ ๊ฑด์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์ดํด๋ณด์! ๐ต๏ธ ๋ฌธ์ ์์ธ ์ฐพ๊ธฐ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด next์ ์์ฃผ ์น์ ํ๊ฒ ์์ธ์ผ ์.. [ turborepo ์ค์ ] storybook Chromatic CLI ์ผ๋ก ๋ฐฐํฌํ๋ ๋ฒ ๐ฉ๐ป๐ป ํ ์คํธ๋ก ํด๋ฆญํ๋ฉด ๋ฒํผ์์ด ๋ฐ๋๋ ์ปดํฌ๋ํธ๋ฅผ storybook์ผ๋ก ๋ง๋ค๊ณ , chromatic CLI๋ก ๋ฐฐํฌํด ๋ณด์.๐งพ ํด๋น ํ๋ก์ ํธ ์ค์ ์ ๋ค์์ ๋ฒ์ ๋ค์ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค.โ pnpm 9.0.0 โ node >= 20โ next 14.2.4โ react ^18โ chormatic ^11.5.5โ storybook ^8.2.2[์ด์ ๊ธ] 2024.07.11 - [๐ฉ๐ป๐ป dev] - [turboRepo scss] Cannot find module './mybutton.module.scss' or its corresponding type declarations.ts(2307) [turboRepo scss] Cannot find module './mybutton.module.scss.. [spotify-api] VINYLIFY : ์คํฌํฐํ์ด apiํ์ฉํ ๊ฒ์ + ์ฌ์ ํ๋ก์ ํธ(n+1) vercel ๋ฐฐํฌ vite.config.ts ์ ์ฉ ์๋๋ ๋ฌธ์ ์ด์ ๊ธ : 2024.07.12 - [๐ฉ๐ป๐ป dev] - [spotify-api] VINYLIFY : ์คํฌํฐํ์ด apiํ์ฉํ ๊ฒ์ + ์ฌ์ ํ๋ก์ ํธ(n) ๊ฒ์ ๊ฒฐ๊ณผ react-infinite-scroll๊ณผ useInfiniteQuery๋ก ๋ฌดํ ์คํฌ๋กค ๊ตฌํํ๊ธฐ [spotify-api] VINYLIFY : ์คํฌํฐํ์ด apiํ์ฉํ ๊ฒ์ + ์ฌ์ ํ๋ก์ ํธ(n)๊ฒ์ ๊ฒฐ๊ณผ react-infinite-scroll๊ณผ useI๐ ๋๋์ด 2๋ฌ(?) ์ ๋ ๊ธด ๊ธฐ๊ฐ ๋์ ์งํํ๋ ํ๋ก์ ํธ๊ฐ ์ง์ง ๋์ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๋๋! ๐ฅณ ์ ๋ฆฌํด์ ํ๋ฒ์ ์ฌ๋ฆฌ๋ ค๋ค๊ฐ ์ถํ ๊ธฐ๋ (?)์ผ๋ก ์ค๋ ๋ฐ๋ํ๊ฒ ๋๋ธ react-infinite-scroll+ useInfiniteQuery๋ฌดpyotato-dev.tistory.com ๐ฅณ ๋๋์ด.. Parsing error: ESLint was configured to run on `<tsconfigRootDir>/xxx` using `parserOptions.project`: /yyy/tsconfig.lint.json However, that TSConfig does not include this file ๋ชจ๋ ธ๋ ํฌ ๋ ํฌ์งํฐ๋ฆฌ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค..github.huskyapps ใด storybook ใด webpackages ใด design-system ใด .turbo ใด dist ใด node_modules ใด src ใด turbo ใด typings ใด eslintrc.cjs ใด package.json ใด tsconfig.json ใด tsconfig.lint.json ใด eslint-config ใด typescript-configpackage.jsonpnpm-lock.yaml.npmrc// ...์๋ต ๋ชจ๋ ธ๋ ํฌ๋ก ํ์ผ์ ๊ตฌ์ฑํ๊ณ ์์๊ณ , hu.. [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. ๋์์ธ ์์คํ ์ด๋ ํ๋ก๋ํธ๊ณผ ๊ฒฝํ์ด ์ฃผ๋ ๋ชจ์ต๊ณผ ๋๋์ด ์ผ์ ํ๋๋ก ๋์์ฃผ๋ ๊ธฐ์ค๊ณผ ๊ธฐ๋ณธ ์ ๋์ ๋ชจ์์ด๋ค.๋ณต์กํ ๋์งํธ ํ๋ก๋ํธ๋ฅผ ๋ง๋๋ ํ์ ์ํด ํต์ผ๋ ์ธ์ด์ ๊ตฌ์กฐํ๋ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ๋ ์ฒญ์ฌ์ง ์ญํ ์ ํ๋ค. ์์ด์ฝ๊ณผ ์๊น์ ์ ์ ์๊ฒ ํน์ ํ.. ํจํค์ง ๋งค๋์ ( ft. ํจํค์ง ๋งค๋์ ์ ๊ณผ๊ฑฐ, ํ ์ค์ ์ ํ, ๊ทธ๋ฆฌ๊ณ ๋ฏธ๋) ๐ค turborepo๋ก ๋ชจ๋ ธ๋ ํฌ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ ค๊ณ ์ค์น๋ฅผ ํ๊ธฐ ์ํ ํจํค์ง ๋งค๋์ ๋ค ์ค ์ด๋ค ๊ฑธ ์ฌ์ฉํด์ผ ํ๋? ์ด๋ค์ ์ฐจ์ด์ ์ ํ ๊ธฐ์ค์ ๋ญ๊น?๐ ๋๋ง์นจ ํจํค์ง ๋งค๋์ ์ ๋ํด ํ๋ฒ ์ง๊ณ ๋์ด๊ฐ ๋ณด๋ ค๋ค๊ฐ ํ ์ค์ ํจํค์ง ๋งค๋์ ์ ๊ณผ๊ฑฐ, ํ ์ค์ ์ ํ, ๊ทธ๋ฆฌ๊ณ ๋ฏธ๋๋ ์ข์ ๊ธ์ด ์ฌ๋ผ์์ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค. ๐ฉ๐ป๐ป ์ดํด๋ณผ ๋ด์ฉ- ํจํค์ง ๋งค๋์ ๊ฐ ๋ฌด์์ธ์ง- ํจํค์ง ๋งค๋์ ๊ฐ ๋์ํ๋ 3๊ฐ์ง ๋จ๊ณ- npm vs pnpm vs Yarn PnP- ํ ์ค์ Pick ๐ฉ๐ป๐ป ํจํค์ง ๋งค๋์ ๋?๋ชจ๋์์คํ (ESM & CJS)์ ๋ํด์ ๋ค๋ค๋ฏ์ด JS/TS์์๋ require ํน์ import๋ก ์ธ๋ถ์ ๋ชจ๋์ ์ฌ์ฉํ ์ ์๋ค.์ฌ๊ธฐ์ ์ธ๋ถ์ ๋ชจ๋์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐธ์กฐํ๋๋ก ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ด ๋ฐ๋ก๋ฐ๋ก ํจํค์ง ๋งค๋์ ๋ค... ์ด์ 1 2 3 4 5 6 ๋ค์