Pink Bobblehead Bunny TurboRepo์™€ PNPM
 

TurboRepo์™€ PNPM

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

๋ชจ๋…ธ๋ ˆํฌ๋Š” ์ฝ”๋“œ ๊ณต์œ ์™€ ์ผ๊ด€์„ฑ ์ธก๋ฉด์—์„œ ๋ถ„๋ช…ํ•œ ์ด์ ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ดˆ๊ธฐ์—๋Š” '๋А๋ฆฐ ๋นŒ๋“œ ์†๋„'์™€ '๋น„ํšจ์œจ์ ์ธ ์ข…์†์„ฑ ๊ด€๋ฆฌ'๋ผ๋Š” ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ์ ์„ ์•ˆ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด์ œ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. TurboRepo (๋นŒ๋“œ ์‹œ์Šคํ…œ)์™€ PNPM (ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €)์ด๋ผ๋Š” ํ˜์‹ ์ ์ธ ํˆด๋ง(Tooling)์กฐํ•ฉ์ด ๋ชจ๋…ธ๋ ˆํฌ์˜ ๋‹จ์ ์„ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ด์†Œํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ƒˆ๋กœ์šด ํ‘œ์ค€์„ ์ œ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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


TurboRepo ๊ณ ์„ฑ๋Šฅ ๋นŒ๋“œ ์‹œ์Šคํ…œ โœจ

TurboRepo๋Š” Vercel์—์„œ ๊ฐœ๋ฐœํ•œ ๊ณ ์„ฑ๋Šฅ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ, ๋ชจ๋…ธ๋ ˆํฌ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ธ ๋А๋ฆฐ ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ•ต์‹ฌ์€ ๋‘ ๊ฐ€์ง€ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์— ์žˆ์Šต๋‹ˆ๋‹ค.

 ๐Ÿง  ์ฆ๋ถ„ ๋นŒ๋“œ์™€ ์บ์‹ฑ์˜ ๋งˆ๋ฒ•

๊ธฐ์กด CI/CD ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ฌธ์ œ๋Š” ์ž‘์€ ์ฝ”๋“œ ์ˆ˜์ •์—๋„ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๋น„ํšจ์œจ์„ฑ์ด์—ˆ์Šต๋‹ˆ๋‹ค. TurboRepo๋Š” ์ด๋ฅผ ์บ์‹ฑ(Caching) ๊ธฐ์ˆ ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  1. ๋นŒ๋“œ ๊ฒฐ๊ณผ ์บ์‹ฑ: TurboRepo๋Š” ์ด์ „์— ์‹คํ–‰ํ–ˆ๋˜ ๋นŒ๋“œ/ํ…Œ์ŠคํŠธ/๋ฆฐํŠธ ๋“ฑ์˜ ์ž‘์—… ๊ฒฐ๊ณผ๋ฅผ ํ•ด์‹œ(Hash) ๊ธฐ๋ฐ˜์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹คํ–‰: ๋‹ค์Œ ์‹คํ–‰ ์‹œ, ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๋‚˜ ์ข…์†์„ฑ ํŒŒ์ผ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†๋Š” ๊ฒฝ์šฐ (์ฆ‰, ํ•ด์‹œ๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ), ์ž‘์—…์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์บ์‹œ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ฆ‰์‹œ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฆ๋ถ„ ๋นŒ๋“œ (Incremental Builds) ๋•๋ถ„์—, ๊ฐœ๋ฐœ์ž๋Š” ๋กœ์ปฌ์—์„œ๋“  CI ํ™˜๊ฒฝ์—์„œ๋“  ๋ณ€๊ฒฝ๋œ ํ”„๋กœ์ ํŠธ์—๋งŒ ์ง‘์ค‘ํ•˜์—ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ „์ฒด ๋นŒ๋“œ ์‹œ๊ฐ„์ด ํš๊ธฐ์ ์œผ๋กœ ๋‹จ์ถ•๋ฉ๋‹ˆ๋‹ค.

๐ŸŒ ์›๊ฒฉ ์บ์‹ฑ์œผ๋กœ ํŒ€ ์ „์ฒด์˜ ์†๋„ ํ–ฅ์ƒ

TurboRepo์˜ ์ง„์ •ํ•œ ํž˜์€ ์›๊ฒฉ ์บ์‹ฑ (Remote Caching)์—์„œ ๋‚˜์˜ต๋‹ˆ๋‹ค.

  • ์บ์‹œ ๊ณต์œ : ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ(Vercel Artifacts, AWS S3 ๋“ฑ)์— ์บ์‹œ๋œ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ์—…๋กœ๋“œํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜‘์—… ํšจ์œจ ์ฆ๋Œ€: A ๊ฐœ๋ฐœ์ž๊ฐ€ ํŠน์ • ๋ธŒ๋žœ์น˜์—์„œ ๋นŒ๋“œํ•œ ๊ฒฐ๊ณผ๋ฅผ B ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” CI ํ™˜๊ฒฝ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์‹ ๊ทœ ํŒ€์›์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก ํ•˜๊ฑฐ๋‚˜, ์ƒˆ๋กœ์šด CI ์žก์ด ์‹คํ–‰๋  ๋•Œ ๋ถˆํ•„์š”ํ•œ ์žฌ๋นŒ๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ํŒ€ ์ „์ฒด์˜ ์˜จ๋ณด๋”ฉ ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ ์†๋„๋ฅผ ๋™์‹œ์— ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

๊ฐ„๊ฒฐํ•œ ์„ค์ •: turbo.json

TurboRepo์˜ ์„ค์ •์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ turbo.json ํŒŒ์ผ ํ•˜๋‚˜๋กœ ๋ชจ๋“  [Workspace] ํ”„๋กœ์ ํŠธ์˜ ์‹คํ–‰ ๋ฐฉ์‹์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"], // ์ƒ์œ„ ์ข…์† ํŒจํ‚ค์ง€๋ถ€ํ„ฐ ๋นŒ๋“œ
      "outputs": [".next/**", "dist/**"] // ์บ์‹ฑํ•  ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ ์ง€์ •
    },
    "test": {
      "dependsOn": ["build"],
      "cache": true
    },
    // ...
  }
}

PNPM: ์ข…์†์„ฑ ๊ด€๋ฆฌ์˜ ํ˜์‹ ๊ณผ ๋””์Šคํฌ ๊ณต๊ฐ„ ์ ˆ์•ฝ โœ…

๋ชจ๋…ธ๋ ˆํฌ์˜ ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ณ ์„ฑ๋Šฅ ๋นŒ๋“œ ์‹œ์Šคํ…œ๋งŒํผ์ด๋‚˜ ํšจ์œจ์ ์ธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. PNPM (Performant NPM)์€ Node.js ์ƒํƒœ๊ณ„์—์„œ [์ข…์†์„ฑ ๊ด€๋ฆฌ]์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋ฐ”๊พผ ํ˜์‹ ์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

ํ•˜๋“œ ๋งํฌ์™€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์˜ ์›๋ฆฌ

๊ธฐ์กด NPM์ด๋‚˜ Yarn Classic์€ ๋ชจ๋…ธ๋ ˆํฌ์˜ ๊ฐ ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค node_modules๋ฅผ ์„ค์น˜ํ•˜์—ฌ ํŒจํ‚ค์ง€ ์ค‘๋ณต ์„ค์น˜์™€ ๋””์Šคํฌ ์šฉ๋Ÿ‰ ๋‚ญ๋น„ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. PNPM์€ ์ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  1. ์ฝ˜ํ…์ธ  ์ฃผ์†Œ ์ง€์ • ๊ฐ€๋Šฅ ์ €์žฅ์†Œ: PNPM์€ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ์‹œ์Šคํ…œ์˜ ์ „์—ญ ์ €์žฅ์†Œ์— ๋‹จ ํ•œ ๋ฒˆ๋งŒ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค (ํ•˜๋“œ ๋งํฌ).
  2. ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์—ฐ๊ฒฐ: ๊ฐ ํ”„๋กœ์ ํŠธ์˜ node_modules ํด๋”์—๋Š” ์‹ค์ œ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๋Œ€์‹ , ์ „์—ญ ์ €์žฅ์†Œ์— ์žˆ๋Š” ์›๋ณธ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ (Symlink)๋งŒ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์€ ์ˆ˜์‹ญ ๊ฐœ์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ˆ˜๋ฐฑ MB์— ๋‹ฌํ•˜๋Š” ํŒจํ‚ค์ง€๋“ค์„ ๋‹จ ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์  ๋ณต์‚ฌ๋ณธ๋งŒ ๊ณต์œ ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์„ค์น˜ ์†๋„๊ฐ€ ๋งค์šฐ ๋นจ๋ผ์ง€๊ณ , ๋””์Šคํฌ ๊ณต๊ฐ„์„ ํš๊ธฐ์ ์œผ๋กœ ์ ˆ์•ฝํ•˜์—ฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์พŒ์ ํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

2.2. PNPM Workspace๋ฅผ ํ†ตํ•œ [์ฝ”๋“œ ๊ณต์œ ]

PNPM์€ [Workspace] ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ชจ๋…ธ๋ ˆํฌ ๋‚ด๋ถ€์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งค์šฐ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

  1. pnpm-workspace.yaml: ๋ฃจํŠธ ํด๋”์—์„œ ๋ชจ๋“  ์•ฑ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํด๋”๋ฅผ ์ •์˜ํ•˜์—ฌ PNPM์ด ์ด๋ฅผ ํ•˜๋‚˜์˜ [Workspace]๋กœ ์ธ์‹ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
    # pnpm-workspace.yaml
    packages:
      - 'apps/*'       # ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •์˜
      - 'libs/*'       # ๋ชจ๋“  ๋‚ด๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ •์˜
    
  2. ๋กœ์ปฌ ํŒจํ‚ค์ง€ ์ฐธ์กฐ: ์•ฑ ํ”„๋กœ์ ํŠธ์˜ package.json์—์„œ ๋‚ด๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: @my-org/ui)๋ฅผ workspace:* ๋ฒ„์ „์œผ๋กœ ์ •์˜ํ•˜๋ฉด, PNPM์ด ์ด๋ฅผ ๋กœ์ปฌ์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ฆ‰์‹œ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ˆ˜์ • ์‹œ ๋ณ„๋„์˜ ๋ฐฐํฌ ๊ณผ์ • ์—†์ด, ์•ฑ์—์„œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฆ‰์‹œ ๋ฐ˜์˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ ๊ณต์œ ์˜ ํŽธ๋ฆฌ์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.


TurboRepo + PNPM ์‹œ๋„ˆ์ง€: ๋ชจ๋…ธ๋ ˆํฌ์˜ ์™„์„ฑ ๐Ÿ› ๏ธ

TurboRepo์™€ PNPM์˜ ์กฐํ•ฉ์€ ๋‹จ์ˆœํ•œ ํ•ฉ์ด ์•„๋‹Œ, ์„œ๋กœ์˜ ์•ฝ์ ์„ ๋ณด์™„ํ•˜๋ฉฐ ๋ชจ๋…ธ๋ ˆํฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์™„์„ฑํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์‹œ๋„ˆ์ง€๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํˆด ์—ญํ•  ๋ชจ๋…ธ๋ ˆํฌ ๊ฐœ์„  ํšจ๊ณผ
PNPM ํšจ์œจ์ ์ธ ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ฐ ์ข…์†์„ฑ ๊ด€๋ฆฌ ๋น ๋ฅธ ์„ค์น˜ ์†๋„, ๋””์Šคํฌ ๊ณต๊ฐ„ ์ ˆ์•ฝ
TurboRepo ๊ณ ์„ฑ๋Šฅ ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ฐ ์บ์‹ฑ ํš๊ธฐ์ ์ธ ๋นŒ๋“œ/ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„ ๋‹จ์ถ•

์ด ์กฐํ•ฉ์„ ํ†ตํ•ด ์–ป๋Š” ์‹ค์งˆ์ ์ธ ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์˜ ๊ฐ„์†Œํ™”: PNPM์ด ๋ชจ๋“  ์ข…์†์„ฑ์„ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๋ฉฐ ๊น”๋”ํ•œ node_modules ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  2. ์‹ ์†ํ•œ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„: ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ TurboRepo ์บ์‹œ๋ฅผ ํ†ตํ•ด ์ˆ˜์ •๋œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋นŒ๋“œ/ํ…Œ์ŠคํŠธ๋งŒ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜์—ฌ ๊ฐœ๋ฐœ ํšจ์œจ์„ ๋†’์ž…๋‹ˆ๋‹ค.
  3. ํšจ์œจ์ ์ธ CI/CD ํŒŒ์ดํ”„๋ผ์ธ: CI/CD์—์„œ ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด, ๋ณต์žกํ•œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ์‹œ๊ฐ„์„ ๋ช‡ ๋ถ„ ๋‹จ์œ„๋กœ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์—ฌ๋Ÿฌ๋ถ„์˜ ํŒ€์€ ์ด ๋‘ ํˆด ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ๋จผ์ € ๋„์ž…ํ•ด ๋ณด์…จ๋‚˜์š”? PNPM์˜ ์„ค์น˜ ์†๋„์™€ TurboRepo์˜ ์บ์‹ฑ ๊ธฐ๋Šฅ ์ค‘, ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ํฐ ํšจ์šฉ์„ ๋А๊ผˆ๋˜ ๋ถ€๋ถ„์€ ๋ฌด์—‡์ด์—ˆ๋Š”์ง€ ๋Œ“๊ธ€๋กœ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•ด ์ฃผ์„ธ์š”!