์ต๊ทผ Storybook v8์ ๋์ ํ๋๋ฐ, ๊ณ์ preset์ ์ฐพ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ํด๊ฒฐ์ ํ๋ฌดํ ๋งํผ ๋จ์ํ์ง๋ง, ์์ธ์ ์ฐพ์๊ฐ๋ ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด ๋ณด์๋ค.
๋ฌธ์ ์ํฉ
์์ ๊ฒฝ๋ก
packages/design-system/
โโโ .storybook/
โโโ preset.js # ์ฌ๊ธฐ์ ์๋ ํ์ผ์ ์ฐพ์์ผ ํจ์ค์ ํ์ ๊ฒฝ๋ก
project-root/
โโโ node_modules/@storybook/core/ # ์ฌ๊ธฐ์ ์คํ๋์ด
โโโ ??? # ๋ฃจํธ์์ preset์ ์ฐพ์ผ๋ ค๊ณ ์๋๋ถ๋ช ํ design-system ์ํฌ์คํ์ด์ค ์์ ์๋ preset์ ์ฝ์ด์ผ ํ๋๋ฐ, Storybook์ ๋ฃจํธ์์๋ง ์ฐพ์ผ๋ ค ํ๋ค. ์ด๋ค ์ด์ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง ๊ฐ์ด ์ ์กํ์ ์ผ๋จ ์์กด์ฑ์ ํ์ธํด ๋ณด์๋ค.
โ storybook@npm:8.6.14
โ โโ @storybook/core@npm:8.6.14 (via npm:8.6.14)
โ
โโ storybook@npm:8.6.14 [a_id]
โโ @storybook/core@npm:8.6.14 [b_id] (via npm:8.6.14 [b_id])์ ๋ฒ์ ์ด ๋ ๊ฐ๋ ๋์ฌ๊น..? ๊ถ๊ธํด์ ธ์ ์ฐพ์๋ดค๋๋ฐ Yarn Berry๋ peerDependencies๋ฅผ ์ถฉ์กฑํ๋ ์ปจํ ์คํธ๊ฐ ๋ค๋ฅด๋ฉด ๊ฐ์ ๋ฒ์ ์ด๋ผ๋ virtual package๋ก ๋ถ๋ฆฌํ๊ธฐ ๋๋ฌธ์, @storybook/core@8.6.14๊ฐ ๋ ์ค๋ก ๋ณด์ธ๋ค.
- [a_id], [b_id] ๊ฐ์ ๊ฑด Yarn์ด ๋ถ์ด๋ virtual package ID๋ค.
- ์ค์ ๋์คํฌ์๋ ํ๋๋ง ์ค์น๋๋ค.
- Yarn์ด ์์ ํ๊ฒ ์์กด์ฑ์ ๊ฒฉ๋ฆฌํ๊ธฐ ์ํด ๋ ผ๋ฆฌ์ ์ผ๋ก๋ง ๋ถ๋ฆฌํ๋ ๊ฒ.
๊ทธ๋ผ ์ ๊ตณ์ด ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌํ ๊น?
- ํฌํ ์์กด์ฑ ๋ฐฉ์ง: ์ ์ธํ์ง ์์ ํจํค์ง๋ฅผ ๋ชฐ๋ ๊ฐ์ ธ๋ค ์ฐ๋ ๋ฌธ์ ์ฐจ๋จ
- peerDependencies ์์ ์ฑ ํ๋ณด: React 17๊ณผ React 18์ฒ๋ผ context๋ง๋ค peer ์๊ตฌ๊ฐ ๋ค๋ฅผ ์ ์์
- ๋ฒ์ ์ถฉ๋ ๋๋น: ๋์ค์ ์ผ๋ถ ์ํฌ์คํ์ด์ค๊ฐ 8.7.0์ ์๊ตฌํ๋๋ผ๋ ์ถฉ๋ ์์ด ๊ณต์กด ๊ฐ๋ฅ
๊ฐ์ ๋ฒ์ ์ด ๋ ๋ฒ ๋์จ ์ด์ ๋ ์ค์ ์ด์์ ์ง์ ์ ์ธ ์๊ด์ ์์์ง๋ง, ์ฐพ๋ ๊ณผ์ ์์ Yarn์ virtual package ๊ฐ๋ ์ ๋ค์ ์๊ฒ ๋์๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ฌด ํ๋ฌดํ๋๋ฐ ์บ์๋ฅผ ๋ ๋ฆฌ๊ณ ๋ค์ ์ค์น๋ฅผ ํด์ ํด๊ฒฐํ์๋ค...
( ++ ์ฝ์งํ๋ค๊ฐ ๋ฌธ๋ ์์ ํ์ฌ ํ์๋ถ๋ค๊ณผ ์์ฃผ ์ฃผ๊ณ ๋ฐ๋ 'ํน์ ์บ์ ๋ ๋ ค๋ณด์ จ์ด์?' ๊ฐ ์๊ฐ๋์ ํ๋๋ ํด๊ฒฐ๋๋ค.)
ํด๊ฒฐ ํ์ ์ฐพ์ ๋์ ๋น์ทํ ๊ด๋ จ GitHub ์ด์ ์ฝ๋ฉํธ์๋ ๊ฐ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์ธ๊ธ๋์ด ์์๋ค.

+++ yarn ํธ์ด์คํ ์ ๋ํด์๋ ์ถ๊ฐ์ ์ผ๋ก ์ ๋ฆฌํด ๋ณด์๋ค.
Yarn Workspaces์ ํต์ฌ: ํธ์ด์คํ
Yarn Workspaces๋ ๋ชจ๋ ธ๋ ํฌ์์ ์ฌ๋ฌ ํ๋ก์ ํธ๊ฐ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ์์กด์ฑ์ ๋ฃจํธ node_modules๋ก ๋์ด์ฌ๋ฆฐ๋ค.
monorepo/
โโโ node_modules/ # ๋ชจ๋ ์์กด์ฑ์ด ์ฌ๊ธฐ๋ก ํธ์ด์คํ
โ โโโ react/
โ โโโ lodash/
โ โโโ @storybook/core/
โโโ yarn.lock # ์ ์ฒด ์์กด์ฑ ์ ๊ธ
โโโ package.json
โโโ packages/
โโโ design-system/
โ โโโ package.json # react, @storybook/core ์ ์ธ
โโโ web-app/
โโโ package.json # react, lodash ์ ์ธํธ์ด์คํ ์ ์ด์
- ์ค๋ณต ์ค์น ๋ฐฉ์ง โ ๋์คํฌ ๊ณต๊ฐ ์ ์ฝ
- ์ค์น ์๊ฐ ๋จ์ถ
- ์ ์ฒด ๋ชจ๋ ธ๋ ํฌ์ ์์กด์ฑ ์ผ๊ด์ฑ ๋ณด์ฅ
yarn.lock์ ์ญํ
- ๋ฃจํธ์๋ง ์์ฑ๋๋ฉฐ, ๋ชจ๋ ์ํฌ์คํ์ด์ค ์์กด์ฑ์ ํตํฉ ๊ด๋ฆฌ
- ๋ฒ์ ์ถฉ๋ ๋ฐฉ์ง
- CI/CD ํ๊ฒฝ์์ ๋์ผํ ์์กด์ฑ ํธ๋ฆฌ ๋ณด์ฅ
nohoist vs nmHoistingLimits
ํน์ ํจํค์ง๋ ํธ์ด์คํ ๋๋ฉด ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋๋ฐ, Yarn์ ์ด๋ฅผ ์ ์ดํ ์ ์๋ ์ต์ ์ ์ ๊ณตํ๋ค.
1. Yarn Classic(v1) โ nohoist
{
"workspaces": {
"packages": ["packages/*"],
"nohoist": [
"**/react-native",
"**/react-native/**"
]
}
}2. Yarn Berry(v2+) โ. yarnrc.yml
nmHoistingLimits: workspacesnohoist์ nmHoistingLimits๋ ๊ฐ์ ๊ฐ๋ ์ ๋ค๋ฅธ ๋ฒ์ ์ต์ ์ด๋ค. v1์ธ์ง v2+์ธ์ง ํ์ธํ๊ณ ๋ง๋ ์ค์ ์ ์ฌ์ฉํด์ผ ํ๋ค.
ํธ๋ฌ๋ธ์ํ ์ฒดํฌ๋ฆฌ์คํธ
--> ๋น์ทํ ๋ฌธ์ ๊ฐ ๋ค์ ์๊ฒผ์ ๋ ๋น ๋ฅด๊ฒ ์ ๊ฒํ ์ ์๋๋ก ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ์ ๋ฆฌํด ๋์๋ค.
- ์บ์ ์ ๋ฆฌ๋ถํฐ
- yarn cache clean yarn install
- yarn.lock ์ํ ํ์ธ (ํ์์ ์ญ์ ํ ์ฌ์์ฑ)
- ์ํฌ์คํ์ด์ค ๊ตฌ์กฐ ํ์ธ โ yarn workspaces info
- ํธ์ด์คํ ๋์ ํ์ธ
- ์์กด์ฑ ๊ทธ๋ํ ๋ถ์ โ yarn why [ํจํค์ง๋ช ]
https://yarnpkg.com/advanced/lexicon#virtual-package
https://www.docs4dev.com/docs/yarn/berry/advanced/architecture.html?utm_source=chatgpt.com
'๐ WIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| @property (1) | 2025.10.18 |
|---|---|
| i18next-parser ์ฌ์ฉํด์ ๋ฒ์ญ ํ๋ก์ธ์ค ๊ฐ์ ํ๊ธฐ (2) | 2025.09.20 |
| Tailwind v4 ๋ง์ด๊ทธ๋ ์ด์ : Dynamic spacing utilities (0) | 2025.08.24 |
| ๋ฃจํธ ๋จ์ผ ์ค์น vs ์ํฌ์คํ์ด์ค ์ค์น (3) | 2025.08.17 |
| ์ด๋ฏธ์ง ์๋ํฐ ๋ง๋ค๊ธฐ-1 (2) | 2025.08.10 |