๐Ÿง‘โ€๐Ÿ’ป ์งง์€ํ˜ธํก/React

ํ”„๋ก ํŠธ์—”๋“œ ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์ถ• ์‚ฝ์งˆ๊ธฐ (1) - ๋„์ž… ์ด์œ , yarn workspaces, berry

ํ•œ๊ทœ์ง„ 2023. 1. 3. 15:03

๊ณ ์Šค๋ฝ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ธ๋ฒˆ์งธ ์ด์–ด์˜ค๋ฉด์„œ ํšจ์œจ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ณ„์† ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ฒˆ์— ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ, ๋‘๋‘ฅ์„ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ๋ชจ๋…ธ๋ ˆํฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ CICD๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๊ฒƒ๋“ค๊ณผ ์‚ฝ์งˆ์— ๋Œ€ํ•œ ๊ธฐ๋ก์ด๋‹ค.

 

1) ๋„์ž… ์ด์œ , yarn workspaces, berry

2) ๋ชจ๋…ธ๋ ˆํฌ ํ™˜๊ฒฝ ์„ธํŒ… - vite, nextjs, storybook, emotion

3) CI/CD - docker, github actions ์„ธํŒ…

 


 

1. ๋„์ž… ์ด์œ 

์ž‘๋…„์— ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ• ๋•Œ ํ”„๋ก ํŠธ์ชฝ์„ 3๊ฐœ์˜ ๋ ˆํฌ๋กœ ๊ตฌ์„ฑํ–ˆ๋‹ค. ์œ ์ € ํ”„๋ก ํŠธ ์‚ฌ์ดํŠธ, ์–ด๋“œ๋ฏผ ์‚ฌ์ดํŠธ, ๊ทธ๋ฆฌ๊ณ  ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ–ˆ๋‹ค. ์Šคํ† ๋ฆฌ๋ถ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์€ npm ํŒจํ‚ค์ง€๋กœ ๋ฐฐํฌํ•ด์„œ ํ”„๋ก ํŠธ์™€ ์–ด๋“œ๋ฏผ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. ์ด๋Ÿฐ ๋ฉ€ํ‹ฐ๋ ˆํฌ๋Š” ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ๋ฐฉ์‹์ด๋‹ค.

 

์‚ฌ์‹ค ๊ทœ๋ชจ๊ฐ€ ํฌ์ง€ ์•Š๋‹ค๋ณด๋‹ˆ ์ด๋ ‡๋‹คํ•  ๋ถˆํŽธํ•จ๊นŒ์ง„ ์•„๋‹ˆ์ง€๋งŒ ์•„์‰ฌ์›€์€ ์–ด๋Š์ •๋„ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค!

 

์„œ๋น„์Šค ๊ฐ„์— ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์‰ฝ๋‹ค

๊ฐœ๋ฐœ ์ˆœ์„œ๋ฅผ ๊ณ„ํšํ• ๋•Œ ์Šคํ† ๋ฆฌ๋ถ ๋ ˆํฌ์—์„œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋‹ค ๋ฝ‘์•„๋†“๊ณ  ์„œ๋น„์Šค ๊ฐœ๋ฐœ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ๋กœ ํ–ˆ๊ณ , ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ์ง„ํ–‰ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹น์—ฐํžˆ ์ค‘๊ฐ„์— ๊ธฐํš๊ณผ ๋””์ž์ธ์ด ๋ฐ”๋€Œ๊ฒŒ ๋˜๋ฉด์„œ ๊ฐœ๋ฐœ์ค‘์— ๊ณ„์† ๋‹ค๋ฅธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ƒ๊ฒผ๋‹ค. ๊ทธ๋•Œ๋งˆ๋‹ค ์ปดํฌ๋„ŒํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด์–ด์„œ ์ˆ˜์ •ํ•˜๊ณ , ํŒจํ‚ค์ง€ ๋ฐฐํฌ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€, ๋‹ค์‹œ ์„œ๋น„์Šค ๋ ˆํฌ๋กœ ๋Œ์•„์™€์„œ ์˜์กด์„ฑ ๋‹ค์šด๋ฐ›๋Š” ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๋‹ค. ์ƒ๋‹นํžˆ ๊ท€์ฐฎ์•„์„œ ๋‚˜์ค‘์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ํŒจํ‚ค์ง€ ์•ˆ์“ฐ๊ณ  ๊ทธ๋ƒฅ ๊ทธ๋•Œ๊ทธ๋•Œ ๋Œ€์ถฉ ๋งŒ๋“ค์—ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค. '์ค‘๋ณต์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ'์—๋Š” ์ปดํฌ๋„ŒํŠธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฆฌ์•กํŠธ ํ›…, ์œ ํ‹ธํ•จ์ˆ˜, ํƒ€์ž… ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

 

ํ”„๋กœ์ ํŠธ ์ „์ฒด์˜ ๋ณ€๊ฒฝ์„ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋‹ค

๊ธฐ์กด์— ์–ด๋“œ๋ฏผ์€ ๋‹ค๋ฅธ ์นœ๊ตฌ๋“ค์—๊ฒŒ ๋งก๊ธฐ๊ณ  ํ”„๋ก ํŠธ๋งŒ ์‹ ๊ฒฝ์จ์„œ ์ž‘์—…ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒˆ ์„œ๋น„์Šค๋ฅผ ๊ธฐํšํ•˜๋ฉด์„œ ์œ ์ € ํŽ˜์ด์ง€๋ณด๋‹ค ์ฃผ ๊ธฐ๋Šฅ์œผ๋กœ ์—ฌ๊ธธ ์ •๋„๋กœ ์–ด๋“œ๋ฏผ ํŽ˜์ด์ง€์˜ ์ค‘์š”์„ฑ์ด ์ปค์กŒ๋‹ค. ๋Œ€์ถฉ antd๋กœ ๋˜์กŒ๋˜ ๋””์ž์ธ์—์„œ ์œ ์ € ํŽ˜์ด์ง€์™€ ์ผ๊ด€๋œ ๋””์ž์ธ์œผ๋กœ ๋‹ค์‹œ ์ž‘์—…ํ–ˆ๋‹ค. ๊ฐ™์ด ํ˜‘์—…ํ•˜๋Š” ์นœ๊ตฌ๋“ค์ด ์ปค๋ฐ‹ํ•œ ์ž‘์—…๋“ค๋„ ๊ฐ™์ด ํŒŒ์•…ํ•˜๊ณ  ๋ฆฌ๋ทฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ–ˆ๋‹ค. ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ํ•˜๋‚˜์˜ ๋ ˆํฌ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ˜‘์—…์—๋„ ํฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 

๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋กœ ํ•œ ๊ณ„๊ธฐ๋Š” ์œ„ ๋‘๊ฐ€์ง€์ด์ง€๋งŒ, ์‚ฌ์‹ค ์›๋ž˜ ๋ชจ๋…ธ๋ ˆํฌ ์‚ฌ์šฉ์˜ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์˜์กด์„ฑ ๊ด€๋ฆฌ์— ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆํฌ์—์„œ ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€๋“ค์„ ๋ฃจํŠธ์—์„œ ํ•œ๋ฒˆ์— ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๊ณ , ๊ด€๋ฆฌ์— ํ›จ์‹  ์šฉ์ดํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ฒ˜์Œ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋ฉด์„œ ์• ๋ฅผ ๋งŽ์ด ๋จน์—ˆ๋‹ค. ์˜์กด์„ฑ๊ณผ ํŒจํ‚ค์ง€๋งค๋‹ˆ์ €์— ๋Œ€ํ•ด ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ๊ณ , ๊ทธ๋งŒํผ ์ด๊ฒƒ์ €๊ฒƒ ์ฐพ์•„๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง๋„ ๋„ˆ๋ฌด ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค.

 

2. Yarn workspaces

๋ชจ๋…ธ๋ ˆํฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ๋กœ yarn workspaces๋ฅผ ์„ ํƒํ–ˆ๋‹ค. ์šฐ๋ฆฌ๋‚˜๋ผ์—์„œ ๊ฐ€์žฅ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋งŽ๊ณ  ๋ฌธ์„œ๋„ ์ž˜๋˜์–ด ์žˆ์–ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. workspace๋ผ๋Š” ๊ฒƒ์„ ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋Œ€๋กœ ์„ค๋ช…ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค!

 

โ”œโ”€โ”€ apps
โ”‚   โ”œโ”€โ”€ admin # ์–ด๋“œ๋ฏผ ์„œ๋น„์Šค. react + vite
โ”‚   โ””โ”€โ”€ ticket # ํ‹ฐ์ผ“ ์„œ๋น„์Šค. nextjs
โ””โ”€โ”€ shared
    โ”œโ”€โ”€ ui # ๊ณต์œ  ์ปดํฌ๋„ŒํŠธ, theme. react + storybook
    โ””โ”€โ”€ utils # ์œ ํ‹ธ ํ•จ์ˆ˜, ๊ณต์šฉ ํ›…, ํƒ€์ž… ๋“ฑ. react

ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์„ ๋•Œ, shared ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒจํ‚ค์ง€๋“ค์€ apps์— ์žˆ๋Š” ์„œ๋น„์Šค๋กœ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰ ๊ฐ™์€ '์ž‘์—…๊ณต๊ฐ„'์•ˆ์— ์žˆ๊ณ , ui์™€ utils๊ฐ€ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ํŒจํ‚ค์ง€๋“ค๋„ ํ•จ๊ป˜ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉ๋œ๋‹ค. yarn berry์—์„œ๋Š” ์ด๋Ÿฐ ๊ธฐ๋Šฅ์„ yarn workspaces๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

 

// ./package.json
{
  "name": "dudoong-front",
  "packageManager": "yarn@3.3.0",
  "private": true,
  "workspaces": {
    "packages": [
      "apps/*",
      "shared/*"
    ]
  },
  // ...
}

๋ฃจํŠธ์˜ package.json์—์„œ ์ด๋ ‡๊ฒŒ workspace๋ฅผ ๋ช…์‹œํ•ด์ค€๋‹ค. apps์— ์žˆ๋Š” ๋ชจ๋“  ํŒจํ‚ค์ง€์™€ shared์— ์žˆ๋Š” ๋ชจ๋“  ํŒจํ‚ค์ง€๋“ค์ด workspace ์•ˆ์— ๋“ค์–ด๊ฐ€์žˆ๋‹ค.

 

// shared/ui/package.json
{
  "name": "@dudoong/ui",
  "main": "src/index.ts",
  "types": "src/index.ts",
  //...

}

// apps/admin/package.json
{
  "name": "admin",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "dependencies": {
    "@dudoong/ui": "workspace:shared/ui",
    "@dudoong/utils": "workspace:shared/utils",
    // ...
  }
  //...
}

๊ทธ๋ฆฌ๊ณ  shared ๋ ˆํฌ์™€ apps ๋ ˆํฌ์˜ package.json์—์„œ dependencies์— ๋ช…์‹œ๋ฅผ ํ•จ์œผ๋กœ์„œ workspace๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

yarn install์„ ํ•˜๋ฉด ๋ฃจํŠธ์˜ package.json์—์„œ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์˜ package.json์— ๋ช…์‹œ๋œ ์˜์กด์„ฑ๊นŒ์ง€ ํ•œ๋ฒˆ์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ํ•˜์œ„ ํŒจํ‚ค์ง€๋“ค์— ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋“ค์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค. ๋ฃจํŠธ์˜ node_modules๋กœ ํ˜ธ์ด์ŠคํŒ…๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

https://classic.yarnpkg.com/blog/2018/02/15/nohoist/

์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒจํ‚ค์ง€๋ฅผ ์“ฐ๋“ฏ์ด ๋ชจ๋…ธ๋ ˆํฌ ์•ˆ์˜ ํŒจํ‚ค์ง€๋“ค์„ dependencies๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒŒ ๊ต‰์žฅํžˆ ํŽธํ•˜๊ณ  ๋ง˜์— ๋“ ๋‹ค. ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋กœ ๋ฐฐํฌํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทธ๋Ÿด ํ•„์š”๊นŒ์ง€ ์—†์„๋•Œ์—๋Š” ๋”ฑ ์ ๋‹นํ•œ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์ž์„ธํ•œ ์„ธํŒ…์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์œผ๋กœ ๋‚˜๋ˆ ์„œ ๊ธฐ๋กํ•  ์˜ˆ์ •.

 

3. Yarn Berry

yarn workspaces๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ yarn berry์˜ pnp๋ชจ๋“œ๋ฅผ ์ฒ˜์Œ ๋„์ž…ํ•ด๋ณด๋ ค๊ณ  ํ–ˆ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ์ž˜ ์•ˆ๋๋‹ค. tsconfig๋ฌธ์ œ์ธ์ง€ ๋ญ”์ง€ ๋ชจ๋“ˆ๋“ค์˜ ๊ฒฝ๋กœ๋ฅผ ์ œ๋Œ€๋กœ ๋ชป์ฐพ์•„์™”๋‹ค. ์ผ๋ฐ˜ craํ™˜๊ฒฝ๊ณผ ํ„ฐ๋ณด๋ ˆํฌ ํ™˜๊ฒฝ์—์„œ ๋˜‘๊ฐ™์ด yarn berry ์„ค์ •์„ ํ•ด๋ดค์„๋• ๋ฌธ์ œ ์—†์ด ์ž˜ ์ž‘๋™ํ•œ๊ฒƒ์„ ๋ณด์•„์„œ, ๋‚ด ํ”„๋กœ์ ํŠธ์˜ tsconfig ๊ฐ™์€ ์„ค์ • ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๊ฑฐ์˜ ์ดํ‹€์ •๋„๋ฅผ ๋ถ™์žก๊ณ  ์žˆ์—ˆ๋Š”๋ฐ๋„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ด์„œ ์ผ๋‹จ pnp๋ชจ๋“œ๋Š” ์ œ์™ธํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. pnp๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋„ ๋ช‡ ์žˆ๊ณ  next13์—์„œ pnp๋กœ ์ธํ•œ ์ด์Šˆ๊ฐ€ ๋งŽ์ด ์ƒ๊ฒผ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์–ด์„œ ์˜คํžˆ๋ ค ๋ง˜ํŽธํžˆ node_module๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ.

 

node_modules๋กœ๋ถ€ํ„ฐ ์šฐ๋ฆฌ๋ฅผ ๊ตฌ์›ํ•ด ์ค„ Yarn Berry ํ† ์Šค์˜ ๊ฐœ์ฉŒ๋Š” ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ. ์š”์•ฝํ•˜์ž๋ฉด ๋ณต์žกํ•˜๊ณ  ๋น„ํšจ์œจ์ ์ธ node_modules ๋Œ€์‹  .yarn/cache์— zipํŒŒ์ผ์˜ ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ณ , .pnp.cjs์— ํ•ด๋‹น ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ €์žฅํ•œ๋‹ค.

 

yarn set version berry
yarn install

yarn์˜ ๋ฒ„์ „์„ berry๋กœ ์„ค์ •ํ•˜๊ณ  installํ•˜๋ฉด yarnrc.yml ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

 

yarn dlx @yarnpkg/sdks vscode

ํƒ€์ž… ๋ชจ๋“ˆ์˜ ๊ฒฝ๋กœ๋ฅผ node_modules๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์—์„œ ์ฐพ์•„์•ผ ํ•œ๋‹ค. vscode๋ฅผ ์‚ฌ์šฉํ• ๋•Œ๋Š” ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ๋‹ค๋ฅธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ sdk๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. pnp๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™์„ ์•ˆํ•ด์„œ ์ € sdk๋งŒ ์ˆ˜๋ฐฑ๋ฒˆ์€ ์„ค์น˜ํ•ด๋ดค๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

์ด๋ ‡๊ฒŒ 1๋„ ๋˜๋Š”๊ฒŒ ์—†์—ˆ๋‹ค

 

// .yarnrc.yml
plugins:
  - path: .yarn/plugins/@yarnpkg/plugin-typescript.cjs
    spec: '@yarnpkg/plugin-typescript'

yarnPath: .yarn/releases/yarn-3.3.0.cjs
nodeLinker: node-modules

nodeLinker๊ฐ€ ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ pnp๋ชจ๋“œ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ˆ˜๋งŽ์€ ์‹œ๋„ ๋์— node-modules๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค.

 


 

๋‹ค์Œ ๊ธ€์€ ์ „์ฒด์ ์ธ ๋ชจ๋…ธ๋ ˆํฌ ํ™˜๊ฒฝ ๊ตฌ์ถ•๊ณผ ์‚ฝ์งˆ๊ธฐ๋กœ ๋Œ์•„์˜ค๊ฒ ์Šด๋‹ค.