๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป 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๋กœ ์™ธ๋ถ€์˜ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.์—ฌ๊ธฐ์„œ ์™ธ๋ถ€์˜ ๋ชจ๋“ˆ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฐธ์กฐํ•˜๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ”๋กœ๋ฐ”๋กœ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋‹ค...