Skip to content

Latest commit

ย 

History

History
193 lines (163 loc) ยท 11.3 KB

04_YARN-berry.md

File metadata and controls

193 lines (163 loc) ยท 11.3 KB

Yarn Berry

node_modules ์—†์ด node๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ธ yarn berry๋ฅผ ์•Œ์•„๋ณด์ž.

1๏ธโƒฃ ์„œ๋ก  1 - ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์˜ ์—ญํ• 

npm, Yarn, pnpm ๋ชจ๋‘ ์—ญํ• ์€ ๋Œ€๋ถ€๋ถ„ ๋™์ผํ•˜๋‹ค.

  • ํŒจํ‚ค์ง€์˜ dependency ๊ด€๋ฆฌ(์ผ๊ด„(Batch) ์„ค์น˜ or ์—…๋ฐ์ดํŠธ)
  • ํŒจํ‚ค์ง€ ์‹ ๋ขฐ์„ฑ & ์†์ƒ๋˜์ง€ ์•Š์Œ์„ ๋ณด์žฅ (๋ณด์•ˆ ๊ฐ์‚ฌ(audit) ์ˆ˜ํ–‰)
  • ๊ธฐ๋Šฅ์— ๋”ฐ๋ฅธ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€์˜ ๊ทธ๋ฃนํ™”
  • ํŒจํ‚ค์ง€ ์••์ถ• ํ•ด์ œ
  • SW repository๋กœ๋ถ€ํ„ฐ ํŒจํ‚ค์ง€ ๊ฒ€์ƒ‰, ๋‹ค์šด๋กœ๋“œ, ์„ค์น˜, ์—…๋ฐ์ดํŠธ ์ˆ˜ํ–‰
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ์“ฐ๊ธฐ
  • ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  • ํŒจํ‚ค์ง€ ๋ฐฐํฌ(publish)

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

1๏ธโƒฃ ์„œ๋ก  2 - ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ข…๋ฅ˜

Language Package Manager Software Repository
Python pip PyPI
PHP Composer Packagist
Node.js npm, Yarn, pnpm npm, Yarn, pnpm
Java Maven, Gradle Maven
Ruby RubyGems, Bundler RubyGems, Bundler

1๏ธโƒฃ ์„œ๋ก  3 - Node.js ํ™˜๊ฒฝ์˜ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋ถ„์„

node.js ํ™˜๊ฒฝ์˜ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ ํฌ๊ฒŒ npm๊ณผ yarn, pnpm์ด ์กด์žฌํ•˜๋ฉฐ,
ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์˜ ๊ธฐ๋Šฅ์€ ๋™์ผํ•˜๋‚˜ ๋‚ด๋ถ€์ ์ธ ์ฐจ์ด์ ์ด ์กด์žฌํ•œ๋‹ค.

  • npm, Yarn : node_modules ํด๋”์— dependency ์„ค์น˜
  • pnpm : ์ค‘์ฒฉ๋œ node_modlues ํด๋”์— dependency๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋… ๋„์ž…
  • Yarn-berry : PnP(Plug'n'Play) ๋ชจ๋“œ (node_modules X)

2๏ธโƒฃ ๋ณธ๋ก  1 - Yarn Berry

Yarn Berry๋Š” Node.js๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด๋‹ค.
Yarn v1(Yarn classic)์—์„œ 2020.01.25 ์ •์‹ ๋ฒ„์ „ Yarn v2(Yarn Berry)๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ,
ํ˜„์žฌ Yarn Berry๋Š” Babel์„ ๋น„๋กฏํ•œ ํฐ ์˜คํ”ˆ์†Œ์Šค ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ๋„ ์ฑ„ํƒ๋˜์–ด ์‚ฌ์šฉ ์ค‘์— ์žˆ๋‹ค.

2๏ธโƒฃ ๋ณธ๋ก  2 - ์™œ Yarn Berry์ธ๊ฐ€?(1) (Feat. NPM์˜ ๋ฌธ์ œ์ )

์œ„์™€ ๊ฐ™์ด NPM์€ Node.js๋ฅผ ์„ค์น˜ํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์ด์ง€๋งŒ ๋น„ํšจ์œจ์ ์ด๊ฑฐ๋‚˜, ๊นจ์ ธ ์žˆ๋Š” ๋ถ€๋ถ„์ด ๋งŽ๋‹ค.

โ–ถ๏ธ NPM์˜ ๋ฌธ์ œ์ 

  1. ํŒจํ‚ค์ง€๊ฐ€ ์ค‘๋ณต์œผ๋กœ ์„ค์น˜๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์  ์กด์žฌ

  1. ์˜์กด์„ฑ ๊ฒ€์ƒ‰์˜ ๋น„ํšจ์œจ์„ฑ
    • ๋Š๋ฆฐ I/O ํ˜ธ์ถœ์˜ ๋ฐ˜๋ณต โ†’ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ I/O ํ˜ธ์ถœ์˜ ์‹คํŒจ๋กœ ์ด์–ด์ง„๋‹ค.

  1. ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ๋™์ž‘
    • ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์˜์กด์„ฑ ํ˜ธ์ถœ์˜ ๋ณ€์ˆ˜ ๋ฐœ์ƒ

  1. ๋น„ํšจ์œจ์ ์ธ ์„ค์น˜
    • ๋งค์šฐ ํฐ node_modules์˜ ๊ณต๊ฐ„ ์ฐจ์ง€
    • node_modules๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๊ตฌ์ถ•์„ ์œ„ํ•œ ํฐ ๋น„์šฉ์˜ I/O ์ž‘์—…

  1. ์œ ๋ น ์˜์กด์„ฑ
    • ์ค‘๋ณต๋˜์–ด ์„ค์น˜๋˜๋Š” node_modules๋ฅผ ์•„๋ผ๊ธฐ ์œ„ํ•ด ํ˜ธ์ด์ŠคํŒ… ๊ธฐ๋ฒ• ์‚ฌ์šฉ (NPM, Yarn v1)

    • ์œ„์™€ ๊ฐ™์€ ์˜์กด์„ฑ ํŠธ๋ฆฌ๊ฐ€ ๊ตฌ์ถ•๋˜์–ด ์žˆ๋‹ค๋ฉด, [A (1.0)]๊ณผ [B (1.0)] ํŒจํ‚ค์ง€์˜ ์ค‘๋ณต ์„ค์น˜๋กœ ๋””์Šคํฌ ๊ณต๊ฐ„ ๋‚ญ๋น„
    • NPM๊ณผ Yarn v1์—์„œ ์˜ค๋ฅธ์ชฝ ํŠธ๋ฆฌ์™€ ๊ฐ™์ด ํŠธ๋ฆฌ ๋ชจ์–‘ ๋ณ€๊ฒฝ
    • ํ˜ธ์ด์ŠคํŒ…์— ๋”ฐ๋ผ ์ง์ ‘ ์˜์กดํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ require()ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜„์ƒ : ์œ ๋ น ์˜์กด์„ฑ
    • package.json์˜ ์ˆ˜์ •์— ๋”ฐ๋ผ ์˜์กด์„ฑ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์งˆ ๊ฐ€๋Šฅ์„ฑ โฌ†๏ธ

2๏ธโƒฃ ๋ณธ๋ก  3 - ์™œ Yarn Berry์ธ๊ฐ€?(2)

Yarn Berry๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ NPM์˜ "๊นจ์ ธ ์žˆ๋Š”" ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๊ฐœ์„ ํ•˜๊ณ ์ž
์ ์€ ๊ณต๊ฐ„์˜ ์‚ฌ์šฉ, ํšจ์œจ์ ์ธ ์˜์กด์„ฑ ๊ฒ€์ƒ‰์„ ๋ชฉํ‘œ๋กœ ์ถœ์‹œ๋˜์—ˆ๋‹ค.

โ–ถ๏ธ PnP (Plug'n'Play)

node_modules ํด๋”์˜ ํŠน์ • ํŒจํ‚ค์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•  ๊ฒฝ์šฐ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ํ•ด๋‹น ํŒจํ‚ค์ง€ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋‹ค.

  1. Node๊ฐ€ ํŒจํ‚ค์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์ž˜ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์—ญํ• ์ด ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์˜ ์ผ์ด๋ผ๋Š” ์ƒ๊ฐ๊ณผ
  2. ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ node_modules ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๊ทธ์น˜์ง€ ์•Š๊ณ ,
    ย ย ย ย ๋ณด๋‹ค ๊ทผ๋ณธ์ ์ด๋ฉฐ ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•œ ๊ฒฐ๊ณผ
    ย ย ย ย Plug'n'Play๊ฐ€ ํƒ„์ƒํ–ˆ๋‹ค.

Yarn Berry์—์„œ๋Š” node_modules๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹  ์˜์กด์„ฑ lookup ํŒŒ์ผ์ธ .pnp.cjs๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

  • .pnp.cjs ํŒŒ์ผ์˜ ํฌํ•จ ๋‚ด์šฉ
    • ๊ด€๋ จ๋œ ํŒจํ‚ค์ง€ ์ด๋ฆ„
    • ํŒจํ‚ค์ง€ ๋ฒ„์ „
    • ๋””์Šคํฌ์—์„œ์˜ ์œ„์น˜
    • ์˜์กด์„ฑ ๋ฆฌ์ŠคํŠธ
    • etc.

  • Plug'n'Play ์ผœ๊ธฐ NPM์—์„œ ์ตœ์‹  ๋ฒ„์ „์˜ Yarn์„ ๋‚ด๋ ค๋ฐ›์€ ๋’ค, ๋ฒ„์ „์„ Berry๋กœ ์„ค์น˜ํ•ด Yarn Berry๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
$ npm install -g yarn
$ cd ../path/to/some-package
$ yarn set version berry

Yarn Berry๋Š” ํ•˜์œ„ํ˜ธํ™˜์„ ์œ„ํ•ด ํŒจํ‚ค์ง€ ๋‹จ์œ„๋กœ๋งŒ ์˜์กด์„ฑ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
node_modules๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” Yarn Berry๋Š” ์˜์กด์„ฑ ์ •๋ณด๋ฅผ .yarn/cache ํด๋”์— ์ €์žฅํ•œ๋‹ค.
.pnp.cjs ํŒŒ์ผ์— ์˜์กด์„ฑ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๊ฐ€ ๊ธฐ๋ก๋˜๋ฉฐ, ํ•ด๋‹น ํŒŒ์ผ์„ ํ†ตํ•ด Disk I/O ์—†์ด ์–ด๋–ค ํŒจํ‚ค์ง€๊ฐ€ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š”์ง€,
๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์–ด๋””์— ์œ„์น˜ํ•˜๋Š”์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

Yarn์€ Node.js์—์„œ ์ œ๊ณตํ•˜๋Š” require()๋ฌธ์˜ ๋™์ž‘์„ ๋ฎ์–ด์”€์œผ๋กœ์จ ํšจ์œจ์ ์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  • PnP API๋ฅผ ์ด์šฉํ•ด ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ์„ ๊ฒฝ์šฐ : yarn node๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉ (node ๋ช…๋ น์–ด X)

Node.js ์•ฑ์„ ์‹คํ–‰ ์‹œ package.json์˜ scripts์— ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋“ฑ๋กํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
Yarn์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด PnP๋กœ ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

๋˜ํ•œ Zip ์•„์นด์ด๋ธŒ๋กœ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ,
์—†๋Š” ์˜์กด์„ฑ์ด๋‚˜ ๋” ์ด์ƒ ํ•„์š”์—†๋Š” ์˜์กด์„ฑ์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
๋˜ํ•œ Zip ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ์ฒดํฌ์„ฌ๊ณผ ๋น„๊ตํ•ด ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ ์—ฌ๋ถ€๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

2๏ธโƒฃ ๋ณธ๋ก  4 - Yarn PnP ๋„์ž…์˜ ์ด์ 

  1. ์˜์กด์„ฑ ๊ฒ€์ƒ‰
    • ์˜์กด์„ฑ ๊ฒ€์ƒ‰ ์‹œ ๋” ์ด์ƒ node_modules ํด๋”์˜ ์ˆœํšŒ๊ฐ€ ํ•„์š” ์—†๋‹ค.
    • .pnp.cjsํŒŒ์ผ์ด ์ œ๊ณตํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด ์˜์กด์„ฑ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๋กœ ์ฐพ๋Š”๋‹ค.
    • require()์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ๋‹จ์ถ•๋œ๋‹ค.

  1. ์žฌํ˜„ ๊ฐ€๋Šฅ์„ฑ
    • ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ์˜์กด์„ฑ์ด .pnp.cjs ํŒŒ์ผ์„ ์ด์šฉํ•ด ๊ด€๋ฆฌ๋˜๊ธฐ์— ๋” ์ด์ƒ ์™ธ๋ถ€ ํ™˜๊ฒฝ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

  1. ์˜์กด์„ฑ์„ ์„ค์น˜ํ•  ๋•Œ
    • ์„ค์น˜๋ฅผ ์œ„ํ•œ node_modules ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ์ด ํ•„์š”์—†๋‹ค.
    • zero-install ์‚ฌ์šฉ ์‹œ ๋Œ€๋ถ€๋ถ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•  ํ•„์š” ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๊ฐ™์€ ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณต์‚ฌ๋  ํ•„์š”๊ฐ€ ์—†๊ธฐ์— ์„ค์น˜ ์‹œ๊ฐ„์„ ๊ทน๋‹จ์ ์œผ๋กœ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์—„๊ฒฉํ•œ ์˜์กด์„ฑ ๊ด€๋ฆฌ
    • node_modules์™€ ๊ฐ™์ด ์˜์กด์„ฑ์„ ๋Œ์–ด์˜ฌ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
    • ๊ฐ ํŒจํ‚ค์ง€๊ฐ€ ์ž์‹ ์ด package.json์— ๊ธฐ์ˆ ํ•˜๋Š” ์˜์กด์„ฑ์—๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ๋ฒ„๊ทธ๋ฅผ ์ผ์œผํ‚ค๋Š” ์œ ๋ น ์˜์กด์„ฑ ํ˜„์ƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

  1. ์˜์กด์„ฑ ๊ฒ€์ฆ
    • Yarn PnP์—์„œ ZipํŒŒ์ผ์„ ์ด์šฉํ•ด ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์˜์กด์„ฑ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.
    • ์˜์กด์„ฑ์ด ์ž˜๋ชป๋˜์—ˆ์„ ๋•Œ ์‰ฝ๊ฒŒ ๋ฐ”๋กœ์žก์„ ์ˆ˜ ์žˆ๋‹ค.

  1. Zero-Install
    • Zero-Install : Yarn Berry์—์„œ ์˜์กด์„ฑ์„ ๋ฒ„์ „ ๊ด€๋ฆฌ์— ํฌํ•จํ•˜๋Š” ๊ฒƒ
    • Yarn PnP๋Š” ์˜์กด์„ฑ์„ ์••์ถ• ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์˜์กด์„ฑ ์šฉ๋Ÿ‰์ด ์ž‘๋‹ค.
    • Git์œผ๋กœ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์ƒˆ๋กœ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ฑฐ๋‚˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋ฐ”๊ฟ€ ๊ฒฝ์šฐ์—๋„ Yarn install์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
      • ๋„คํŠธ์›Œํฌ๊ฐ€ ๋Š์–ด์ง„ ๊ณณ์—์„œ ์˜คํ”„๋ผ์ธ ์บ์‹œ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
      • CI์—์„œ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Zero-Install ์‚ฌ์šฉ ์‹œ .gitignore ํŒŒ์ผ ์„ค์ •
    .yarn/*
    !.yarn/cache
    !.yarn/patches
    !.yarn/plugins
    !.yarn/releases
    !.yarn/sdks
    !.yarn/versions
    

2๏ธโƒฃ ๋ณธ๋ก  5 - Yarn Berry์˜ ๋‹จ์ 

  1. ์—ฌ์ „ํžˆ PnP๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€ ์กด์žฌ
    • ํ”„๋กœ์ ํŠธ์— PnP๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•œ๋‹ค๋ฉด PnP ๋ฐฉ์‹์ผ์ง€๋ผ๋„ node_modules๊ฐ€ ๋”ฐ๋ผ์˜จ๋‹ค.
      • PnP๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ,
        • sol 1) ๋ฒ„์ „ ์˜ฌ๋ฆฌ๊ธฐ
        • sol 2) ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋กœ ์ด์ „ํ•˜๊ธฐ
        • sol 3) PnP๋ฅผ ์ง€์›ํ•˜๋„๋ก ๊ธฐ์—ฌํ•˜๊ธฐ
    • ๊ฐ ๋ชจ๋“ˆ์ด PnP๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ธฐ ์œ„ํ•ด์„œ๋Š” PnP ๋ฐฉ์‹์— ๋งž๊ฒŒ ์˜์กด์„ฑ ๊ด€๋ฆฌ๊ฐ€ strictํ•˜๊ฒŒ ์…‹ํŒ…๋˜์–ด์•ผ ํ•œ๋‹ค.
      • PnP loose ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ๋ช…์‹œ์ ์œผ๋กœ ์š”๊ตฌํ•˜๋Š” ๋””ํŽœ๋˜์‹œ๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
      // .yarnrc.yml
      
      pnpMode: loose

3๏ธโƒฃ ๊ฒฐ๋ก  - Yarn Berry ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋ถ„์„ ํ›„ ํ•„์ž์˜ ๊ฒฌํ•ด

์šฐ์„  PnP๋ฅผ ์ ์šฉํ•ด ๊ธฐ์กด npm์˜ node_modules๋””๋ ‰ํ† ๋ฆฌ์˜ ์„ค์น˜๊ฐ€ ํ•„์š” ์—†์ด
ํŒจํ‚ค์ง€ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ํฐ ๋งค๋ ฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€๋‹ค.
๋งค๋ฒˆ npm ๋˜๋Š” yarn์œผ๋กœ ํŒจํ‚ค์ง€ ํ™˜๊ฒฝ์„ ์…‹ํŒ…ํ•˜๋ฉด git ์ƒ์—์„œ clone์„ ๋ฐ›์•„ ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ
npm install ๋ฐ yarn install๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•ด์ฃผ์—ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ,
๊ณต๊ฐ„ ์ฐจ์ง€ ๋ฐ ์„ค์น˜์˜ ๋ฒˆ๊ฑฐ๋กœ์›€์ด ํ•ด์†Œ๋˜์—ˆ๋‹ค๋Š” ์ ์ด ์ •๋ง ์œ ์ตํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋œ๋‹ค.

Yarn Berry๋ฅผ ์•„์ง ์ œ๋Œ€๋กœ ๋œ ํ”„๋กœ์ ํŠธ์— ๋„์ž…ํ•ด๋ณด์ง€ ์•Š์•˜๊ธฐ์—, ๊ด€๋ จ๋œ ๋‹จ์ ์„ ๊ตฌ๊ธ€๋ง์œผ๋กœ ์ฐพ์„ ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋Š”๋ฐ
๋Œ€๋ถ€๋ถ„์˜ ๋‹จ์  ํ˜น์€ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์€ ์•„์ง PnP๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€ ๋˜๋Š” PnP-dependency์™€ ๊ด€๋ จ๋œ ๋ถ€๋ถ„์ด์—ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์€ ์ง์ ‘ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๊ฒช์–ด๋ณด๋Š” ๊ฒƒ์ด ์–ด๋–ค ๋ฐฉ๋ฒ• ๋ณด๋‹ค๋„ ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฆฌ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ ,
๋น ๋ฅด๊ฒŒ Yarn Berry ์…‹ํŒ…์„ ํ•ด๋ณธ ๋’ค PnP๋ฅผ ์ ์šฉํ•ด ๋ณธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์˜ ํ™˜๊ฒฝ์„ ํ”ผ๋ถ€๋กœ ๋Š๊ปด๋ณด๊ณ ์ž ํ•œ๋‹ค.

๐Ÿ“Œ ์ž๋ฃŒ ์ถœ์ฒ˜ & ํ•จ๊ป˜ ๋ณด๋ฉด ์ข‹์„ ์ž๋ฃŒ