๐Ÿ‘ท๐Ÿปโ€โ™‚๏ธ

Yarn Berry ์•Œ์•„๋ณด๊ธฐ

๋ถ„๋ฅ˜
Dev Log ๐Ÿ’ป
์ž‘์„ฑ์ž
1 more property

[๋“ค์–ด๊ฐ€๊ธฐ ์ „, ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ]

1) zero-install ๋ฐฉ์‹๊ณผ ๊ทธ๋ฆฌ๊ณ  pnp
2) non-zero-install ๋ฐฉ์‹๊ณผ ๊ทธ๋ฆฌ๊ณ  node_modules

[๋„์ž… ๋ฐฐ๊ฒฝ]

ํ…Œ์ŠคํŠธ๋ฑ…ํฌ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ๊ฐ„ API ๊ด€๋ จ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ํšจ์œจํ™” ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์•ˆ์œผ๋กœ, buf.build ์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” buf ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”. ๊ทธ๋Ÿฐ๋ฐ ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด buf๋Š” yarn classic์— ๋Œ€ํ•œ ์ง€์›์„ ํ•˜์ง€ ์•Š๋Š” ๋ชจ์–‘์ž…๋‹ˆ๋‹ค.
Yarn compatibility Yarnย versions greater thanย v1.10.0ย and less thanย v2ย areย notย supported.
๊ทธ๋ ‡๋‹ค๊ณ  ์ด buf๋ฅผ ๋ฒ„๋ฆฌ๊ธฐ์—๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํšจ์œจํ™”์—์„œ ์˜ค๋Š” ์žฅ์ ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฒˆ ๊ธฐํšŒ์— yarn ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธ ํ•ด์„œ ํ•œ๋ฒˆ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.
buf์— ๋Œ€ํ•ด ์ข€ ๋” ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด โ‡’ ์—ฌ๊ธฐ ํด๋ฆญ
์ž ์ด์ œ ๊ทธ๋Ÿฌ๋ฉด ๋ณธ๊ฒฉ์ ์œผ๋กœ yarn berry๋ฅผ ์•Œ์•„๋ด…์‹œ๋‹ค.
์ฐธ๊ณ ๋กœ yarn berry๋Š” yarn 2.x ๋ฒ„์ „ ํ˜น์€ ๊ทธ ์ด์ƒ ๋ฒ„์ „์˜ yarn์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ„์นญ์ž…๋‹ˆ๋‹ค. yarn 1.x ๋ฒ„์ „์€ yarn classic์ด๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
์ฐธ๊ณ ๋กœ yarn ๊ณต์‹ ์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€๋ฉด, yarn 2์ด์ƒ ๋ฒ„์ „์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋จผ์ € ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. yarn ์ธก์—์„œ๋„ yarn berry์„ ๋ฐ€์–ด์ฃผ๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋„ค์š”.

[์„ค์ •ํ•˜๊ธฐ]

1.
ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค
2.
์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค
yarn set version berry
Plain Text
๋ณต์‚ฌ
์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด root์—์„œ node_modules ๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  ์•„๋ž˜์˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ ํ…๋ฐ์š” 1. .yarn ๋””๋ ‰ํ† ๋ฆฌ 2. .pnp.cjs ํŒŒ์ผ 3. .pnp.loader.mjsํŒŒ์ผ ์ด์— ๋Œ€ํ•ด์„  ์ž ์‹œ ํ›„ ์•„๋ž˜์—์„œ ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค
3.
์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ฒ„์ „ ํ™•์ธ, ๋ฒ„์ „์ด 2.x ์ด์ƒ์ด๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋œ๊ฒ๋‹ˆ๋‹ค.
yarn --version
Plain Text
๋ณต์‚ฌ

[ํŠน์ง• ์•Œ์•„๋ณด๊ธฐ]

์ž ์ด์ œ ์ƒˆ๋กœ์šด yarn์˜ ํŠน์ง•์„ ์‚ดํŽด๋ณด์ฃ 
yarn berry๋Š” zero install ๋ฐฉ์‹๊ณผ non zero install ๋ฐฉ์‹์ด๋ผ๋Š” 2๊ฐ€์ง€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
1.
์ „์ž๋Š” yarn berry๊ฐ€ ์ง€์›ํ•˜๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ง• ๋ฐฉ์‹์ด๊ณ ,
2.
ํ›„์ž์˜ ๊ฒฝ์šฐ ๊ธฐ์กด์˜ node_modules๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์˜ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. yarn classic๋ฐฉ์‹๊ณผ ๋‹ค๋ฅธ ์ ์€, ๊ธฐ์กด ๋ฐฉ์‹์ด node_modules์— ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ์ง์ ‘ ์ˆœํšŒํ•ด์„œ, ํŒจํ‚ค์ง€ ์˜์กด์„ฑ์„ ํŒŒ์•…ํ•˜๋Š” ๊ตฌ์กฐ์˜€๋‹ค๋ฉด, yarn v2 ๋ถ€ํ„ฐ๋Š” .yarn ๋””๋ ‰ํ† ๋ฆฌ์— zipํ˜•ํƒœ๋กœ ์ €์žฅ๋œ ํŒจํ‚ค์ง€๋“ค์ด node_modules์˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด, ์˜์กด์„ฑ ์ •๋ณด๋งŒ ์ฐธ์กฐํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
apollo server๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ๊ฒฐ๊ณผ ๊ธฐ์กด์˜ yarn classic์—์„œ 50์ดˆ ์ด์ƒ ๊ฑธ๋ฆฌ๋˜ ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ๊ฐ€ 1๋ฒˆ์˜ pnp + zero-install ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ 3์ดˆ๊ฐ€ ๊ฑธ๋ ธ๊ณ , 2๋ฒˆ์˜ node_modules + non-zero-install ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ 7์ดˆ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ํด๋ก ํ•ด์„œ ํŒจํ‚ค์ง€๋ฅผ ์ƒˆ๋กœ ๋‹ค์šด๋ฐ›์•„์•ผํ•  ๋•Œ๋‚˜, ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ๋ฅผ ํ•  ๋•Œ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด, ๋ณด๋‹ค ํšจ์œจ์ ์ด๊ฒ ์ฃ 
๊ทธ๋ ‡๋‹ค๊ณ  pnp ๋ฐฉ์‹์ด ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ๋” ์ข‹๋‹ค๊ณ  ๋งํ•  ์ˆœ ์—†์Šต๋‹ˆ๋‹ค ํŒจํ‚ค์ง€์™€์˜ ํ˜ธํ™˜์„ฑ ์—ฌ๋ถ€์— ๋”ฐ๋ผ, node_modules ๋ฐฉ์‹์„ ์ฑ„ํƒํ•ด์•ผํ•  ๋•Œ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ yarn์—์„œ๋„ pnp๋ฐฉ์‹์—๋„ ๋‹จ์ ์ด ์žˆ์œผ๋‹ˆ, node_modules ๋ฐฉ์‹์˜ ํŒจํ‚ค์ง€๋งค๋‹ˆ์ง• ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ง€์›์„ ์ค‘๋‹จํ•  ์˜ˆ์ •์ด ์—†๋‹ค๊ณ  ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

[zero-install ๊ณผ non-zero-install]

์œ„์—์„œ yarn berry๋Š” 2๊ฐ€์ง€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ ํ–ˆ๋Š”๋ฐ์š”, ์ด๋ฒˆ์—๋Š” ์ด 2๊ฐ€์ง€์— ๋Œ€ํ•ด์„œ ์ข€๋” ๊นŠ๊ฒŒ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด 2๊ฐ€์ง€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ๋ถ„์„ ๋ช…ํ™•ํžˆ ํ•ด์•ผ ์ž‘์—…์‹œ ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฐฉ์‹์˜ ์„ค์ •๋ฒ•๊ณผ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ๋‹ค์†Œ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .
์ž ๊ทธ๋Ÿฌ๋ฉด ์ด ์‚ฌํ•ญ์„ ์—ผ๋‘ ํ•ด๋‘๊ณ  ๊ณ„์† ๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.
1.
zero-install๊ณผ non-zero-install ๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ yarn ๋ช…๋ น์–ด ์ž…๋ ฅ ์‹œ, root์— .yarn ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
2.
ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ง•์„ pnp + zero-install ๋ฐฉ์‹์œผ๋กœ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ”„๋กœ์ ํŠธ root์˜ .yarnrc.yml์— ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.
## .yarnrc.yml nodeLinker: 'pnp'
Markdown
๋ณต์‚ฌ
์œ„์™€ ๊ฐ™์ด ์„ค์ • ํ›„, yarn install์„ ํ•˜๋ฉด, node_modules ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ node_modules ํด๋”๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  root์— .pnp.cjs ํŒŒ์ผ๊ณผ .pnp.loader.mjs ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ๋“ค์—๋Š” .yarn/cache ์— ์žˆ๋Š” ํŒจํ‚ค์ง€ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•œ ์˜์กด์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์Šต๋‹ˆ๋‹ค .yarn/cache์— zip ํ˜•ํƒœ๋กœ ๋“ค์–ด์žˆ๋Š” ํŒจํ‚ค์ง€ ํŒŒ์ผ๋“ค์€ ์ด ํŒŒ์ผ๋“ค์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
3.
ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ง•์„ node_modules + non-zero-install ๋ฐฉ์‹์œผ๋กœ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด .yarnrc.yml์— ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
## .yarnrc.yml nodeLinker: 'node-modules'
Markdown
๋ณต์‚ฌ
์œ„์™€ ๊ฐ™์ด ์„ค์ • ํ›„, yarn install์„ ํ•˜๋ฉด, .pnp.cjs์™€ .pnp.loader.mjs๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋‘ ํŒŒ์ผ์ด ์‚ฌ๋ผ์ง€๊ณ , root์— node_modules ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. .yarn ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
.yarn/cache์— zip ํ˜•ํƒœ๋กœ ๋“ค์–ด์žˆ๋Š” ํŒจํ‚ค์ง€ ํŒŒ์ผ๋“ค์€ node_modules๋ฅผ ์ฐธ์กฐํ•˜์—ฌ, ์ž์‹ ๋“ค์˜ ์˜์กด์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค.
yarn berry๋ถ€ํ„ฐ๋Š” yarn์ด ์ฐธ์กฐํ•  ์„ค์ •ํŒŒ์ผ์„ .npmrc ๋‚˜ .yarnrc ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ .yarnrc.yml ์— ์ž‘์„ฑํ•˜์—ฌ ํ”„๋กœ์ ํŠธ root์— ๋†“์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ๋ช…์„ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ฉ๋‹ˆ๋‹ค

[๋งˆ์น˜๋ฉฐ]

yarn berry์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ์€ ์ด์ •๋„๋ฉด ์ถฉ๋ถ„ํ•  ๋“ฏ ์‹ถ์Šต๋‹ˆ๋‹ค. yarn berry์˜ ์ž‘๋™๋ฐฉ์‹์— ๋Œ€ํ•ด ๋ณด๋‹ค ๊นŠ์ด ์žˆ๊ฒŒ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์˜ ๊ธ€์ด ๋„์›€์ด ๋ ๊ฒ๋‹ˆ๋‹ค :)
๊ณ ์›์ง„ Software Engineer
์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ฆ๊ฑฐ์›€์œผ๋กœ ์—ฌ๊ธฐ๊นŒ์ง€ ์™”๊ณ , ์ด์ œ๋Š” ์œ ์ €์—๊ฒŒ ํšจ์ต์„ ์ฃผ๋Š” ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.