node_modules
์์ด node
๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ธ yarn berry
๋ฅผ ์์๋ณด์.
- ์ฌ์ ์ง์ ์ ๋ฆฌ ๊ณต๊ฐ: ํจํค์ง ๋งค๋์ ๋ ๋ฌด์์ธ๊ฐ?
npm, Yarn, pnpm ๋ชจ๋ ์ญํ ์ ๋๋ถ๋ถ ๋์ผํ๋ค.
- ํจํค์ง์ dependency ๊ด๋ฆฌ(์ผ๊ด(Batch) ์ค์น or ์ ๋ฐ์ดํธ)
- ํจํค์ง ์ ๋ขฐ์ฑ & ์์๋์ง ์์์ ๋ณด์ฅ (๋ณด์ ๊ฐ์ฌ(audit) ์ํ)
- ๊ธฐ๋ฅ์ ๋ฐ๋ฅธ ์ฌ๋ฌ ํจํค์ง์ ๊ทธ๋ฃนํ
- ํจํค์ง ์์ถ ํด์
- SW repository๋ก๋ถํฐ ํจํค์ง ๊ฒ์, ๋ค์ด๋ก๋, ์ค์น, ์ ๋ฐ์ดํธ ์ํ
- ๋ฉํ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ์ฐ๊ธฐ
- ์คํฌ๋ฆฝํธ ์คํ
- ํจํค์ง ๋ฐฐํฌ(publish)
๋ฐ๋ผ์ ์ค์น ์๋, ์คํ ๋ฆฌ์ง ์ฌ์ฉ๋, ๊ธฐ์กด ์ํฌํ๋ก์ฐ์ ๊ฒฐํฉ๋๋ ๋ฐฉ์ ๋ฑ์ ๊ณ ๋ คํด ํจํค์ง ๋งค๋์ ๋ฅผ ๊ฒฐ์ ํ๋ค.
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 |
node.js ํ๊ฒฝ์ ํจํค์ง ๋งค๋์ ๋ก ํฌ๊ฒ npm๊ณผ yarn, pnpm์ด ์กด์ฌํ๋ฉฐ,
ํจํค์ง ๋งค๋์ ์ ๊ธฐ๋ฅ์ ๋์ผํ๋ ๋ด๋ถ์ ์ธ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค.
npm
,Yarn
:node_modules
ํด๋์ dependency ์ค์นpnpm
: ์ค์ฒฉ๋node_modlues
ํด๋์ dependency๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ ๊ฐ์ ํ๊ธฐ ์ํ ๊ฐ๋ ๋์Yarn-berry
:PnP
(Plug'n'Play) ๋ชจ๋ (node_modules
X)
Yarn Berry
๋ Node.js
๋ฅผ ์ํ ์๋ก์ด ํจํค์ง ๊ด๋ฆฌ ์์คํ
์ด๋ค.
Yarn v1
(Yarn classic
)์์ 2020.01.25 ์ ์ ๋ฒ์ Yarn v2
(Yarn Berry
)๊ฐ ์ถ์๋์์ผ๋ฉฐ,
ํ์ฌ Yarn Berry
๋ Babel
์ ๋น๋กฏํ ํฐ ์คํ์์ค ๋ ํฌ์งํ ๋ฆฌ์์๋ ์ฑํ๋์ด ์ฌ์ฉ ์ค์ ์๋ค.
์์ ๊ฐ์ด NPM
์ Node.js
๋ฅผ ์ค์นํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ํจํค์ง ๋งค๋์ ์ด์ง๋ง ๋นํจ์จ์ ์ด๊ฑฐ๋, ๊นจ์ ธ ์๋ ๋ถ๋ถ์ด ๋ง๋ค.
- ํจํค์ง๊ฐ ์ค๋ณต์ผ๋ก ์ค์น๋ ์ ์๋ค๋ ๋จ์ ์กด์ฌ
- ์์กด์ฑ ๊ฒ์์ ๋นํจ์จ์ฑ
- ๋๋ฆฐ I/O ํธ์ถ์ ๋ฐ๋ณต โ ๊ฒฝ์ฐ์ ๋ฐ๋ผ I/O ํธ์ถ์ ์คํจ๋ก ์ด์ด์ง๋ค.
- ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋์
- ์์ ๋๋ ํ ๋ฆฌ ํ๊ฒฝ์ ๋ฐ๋ผ ์์กด์ฑ ํธ์ถ์ ๋ณ์ ๋ฐ์
- ๋นํจ์จ์ ์ธ ์ค์น
- ๋งค์ฐ ํฐ
node_modules
์ ๊ณต๊ฐ ์ฐจ์ง node_modules
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ๊ตฌ์ถ์ ์ํ ํฐ ๋น์ฉ์ I/O ์์
- ๋งค์ฐ ํฐ
- ์ ๋ น ์์กด์ฑ
- ์ค๋ณต๋์ด ์ค์น๋๋
node_modules
๋ฅผ ์๋ผ๊ธฐ ์ํด ํธ์ด์คํ ๊ธฐ๋ฒ ์ฌ์ฉ (NPM, Yarn v1)
- ์์ ๊ฐ์ ์์กด์ฑ ํธ๋ฆฌ๊ฐ ๊ตฌ์ถ๋์ด ์๋ค๋ฉด, [A (1.0)]๊ณผ [B (1.0)] ํจํค์ง์ ์ค๋ณต ์ค์น๋ก ๋์คํฌ ๊ณต๊ฐ ๋ญ๋น
- NPM๊ณผ Yarn v1์์ ์ค๋ฅธ์ชฝ ํธ๋ฆฌ์ ๊ฐ์ด ํธ๋ฆฌ ๋ชจ์ ๋ณ๊ฒฝ
- ํธ์ด์คํ
์ ๋ฐ๋ผ ์ง์ ์์กดํ๊ณ ์์ง ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ
require()
ํ ์ ์๋ ํ์ : ์ ๋ น ์์กด์ฑ package.json
์ ์์ ์ ๋ฐ๋ผ ์์กด์ฑ ๊ด๋ฆฌ ์์คํ ์ด ํผ๋์ค๋ฌ์์ง ๊ฐ๋ฅ์ฑ โฌ๏ธ
- ์ค๋ณต๋์ด ์ค์น๋๋
Yarn Berry
๋ ์์์ ์ธ๊ธํ NPM
์ "๊นจ์ ธ ์๋" ํจํค์ง ๊ด๋ฆฌ ์์คํ
์ ๊ฐ์ ํ๊ณ ์
์ ์ ๊ณต๊ฐ์ ์ฌ์ฉ, ํจ์จ์ ์ธ ์์กด์ฑ ๊ฒ์์ ๋ชฉํ๋ก ์ถ์๋์๋ค.
node_modules
ํด๋์ ํน์ ํจํค์ง๋ฅผ ๊ฒ์ํ ๊ฒฝ์ฐ ๋ชจ๋ ํจํค์ง๋ฅผ ์ํํ๋ฉฐ ํด๋น ํจํค์ง ์กด์ฌ ์ฌ๋ถ๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค.
Node
๊ฐ ํจํค์ง๋ฅผ ๊ฒ์ํ ๋ ์ ์ฐพ์ ์ ์๋๋ก ๋์์ฃผ๋ ์ญํ ์ด ํจํค์ง ๋งค๋์ ์ ์ผ์ด๋ผ๋ ์๊ฐ๊ณผ- ํจํค์ง ๋งค๋์ ๊ฐ
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 ํ์ผ์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ฒดํฌ์ฌ๊ณผ ๋น๊ตํด ์ฝ๊ฒ ๋ณ๊ฒฝ ์ฌ๋ถ๋ฅผ ๊ฐ์งํ ์ ์๋ค.
- ์์กด์ฑ ๊ฒ์
- ์์กด์ฑ ๊ฒ์ ์ ๋ ์ด์
node_modules
ํด๋์ ์ํ๊ฐ ํ์ ์๋ค. .pnp.cjs
ํ์ผ์ด ์ ๊ณตํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด ์์กด์ฑ์ ์์น๋ฅผ ๋ฐ๋ก ์ฐพ๋๋ค.require()
์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ํฌ๊ฒ ๋จ์ถ๋๋ค.
- ์์กด์ฑ ๊ฒ์ ์ ๋ ์ด์
- ์ฌํ ๊ฐ๋ฅ์ฑ
- ํจํค์ง์ ๋ชจ๋ ์์กด์ฑ์ด
.pnp.cjs
ํ์ผ์ ์ด์ฉํด ๊ด๋ฆฌ๋๊ธฐ์ ๋ ์ด์ ์ธ๋ถ ํ๊ฒฝ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
- ํจํค์ง์ ๋ชจ๋ ์์กด์ฑ์ด
- ์์กด์ฑ์ ์ค์นํ ๋
- ์ค์น๋ฅผ ์ํ
node_modules
๋๋ ํ ๋ฆฌ ์์ฑ์ด ํ์์๋ค. zero-install
์ฌ์ฉ ์ ๋๋ถ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ ํ์ ์์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.- ๊ฐ์ ๋ฒ์ ์ ํจํค์ง๊ฐ ์ฌ๋ฌ๋ฒ ๋ณต์ฌ๋ ํ์๊ฐ ์๊ธฐ์ ์ค์น ์๊ฐ์ ๊ทน๋จ์ ์ผ๋ก ๋จ์ถํ ์ ์๋ค.
- ์ค์น๋ฅผ ์ํ
- ์๊ฒฉํ ์์กด์ฑ ๊ด๋ฆฌ
node_modules
์ ๊ฐ์ด ์์กด์ฑ์ ๋์ด์ฌ๋ฆฌ์ง ์๋๋ค.- ๊ฐ ํจํค์ง๊ฐ ์์ ์ด
package.json
์ ๊ธฐ์ ํ๋ ์์กด์ฑ์๋ง ์ ๊ทผํ ์ ์๋ค. - ์๊ธฐ์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ์ผ์ผํค๋ ์ ๋ น ์์กด์ฑ ํ์์ ๋ง์ ์ ์๋ค.
- ์์กด์ฑ ๊ฒ์ฆ
Yarn PnP
์์ Zipํ์ผ์ ์ด์ฉํด ํจํค์ง๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก ์์กด์ฑ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ค.- ์์กด์ฑ์ด ์๋ชป๋์์ ๋ ์ฝ๊ฒ ๋ฐ๋ก์ก์ ์ ์๋ค.
- 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
- ์ฌ์ ํ PnP๋ฅผ ์ง์ํ์ง ์๋ ํจํค์ง ์กด์ฌ
- ํ๋ก์ ํธ์ PnP๋ฅผ ์ง์ํ์ง ์๋ ํจํค์ง๊ฐ ํ๋๋ผ๋ ์กด์ฌํ๋ค๋ฉด PnP ๋ฐฉ์์ผ์ง๋ผ๋
node_modules
๊ฐ ๋ฐ๋ผ์จ๋ค.- PnP๋ฅผ ์ง์ํ์ง ์๋ ํจํค์ง๊ฐ ์์ ๊ฒฝ์ฐ,
- sol 1) ๋ฒ์ ์ฌ๋ฆฌ๊ธฐ
- sol 2) ๋ค๋ฅธ ํจํค์ง๋ก ์ด์ ํ๊ธฐ
- sol 3) PnP๋ฅผ ์ง์ํ๋๋ก ๊ธฐ์ฌํ๊ธฐ
- PnP๋ฅผ ์ง์ํ์ง ์๋ ํจํค์ง๊ฐ ์์ ๊ฒฝ์ฐ,
- ๊ฐ ๋ชจ๋์ด PnP๋ก ์ฌ์ฉ๋ ์ ์๊ธฐ ์ํด์๋ PnP ๋ฐฉ์์ ๋ง๊ฒ ์์กด์ฑ ๊ด๋ฆฌ๊ฐ strictํ๊ฒ ์
ํ
๋์ด์ผ ํ๋ค.
- PnP loose ๋ชจ๋๋ฅผ ํตํด ๋ช ์์ ์ผ๋ก ์๊ตฌํ๋ ๋ํ๋์๋ฅผ ์๊ตฌํ์ง ์๋๋ก ํ ์ ์๋ค.
// .yarnrc.yml pnpMode: loose
- ํ๋ก์ ํธ์ PnP๋ฅผ ์ง์ํ์ง ์๋ ํจํค์ง๊ฐ ํ๋๋ผ๋ ์กด์ฌํ๋ค๋ฉด PnP ๋ฐฉ์์ผ์ง๋ผ๋
์ฐ์ PnP๋ฅผ ์ ์ฉํด ๊ธฐ์กด npm
์ node_modules
๋๋ ํ ๋ฆฌ์ ์ค์น๊ฐ ํ์ ์์ด
ํจํค์ง ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์๋ค๋ ์ ์ด ๊ฐ์ฅ ํฐ ๋งค๋ ฅ์ด๋ผ๊ณ ์๊ฐํ์๋ค.
๋งค๋ฒ npm
๋๋ yarn
์ผ๋ก ํจํค์ง ํ๊ฒฝ์ ์
ํ
ํ๋ฉด git ์์์ clone์ ๋ฐ์ ์ ์ฅ์์ ์ฝ๋๋ฅผ ์ฌ์ฉํ ๋
npm install
๋ฐ yarn install
๋ช
๋ น์ด๋ฅผ ํตํด ์์กด์ฑ์ ๊ด๋ฆฌํด์ฃผ์์ด์ผ ํ๋๋ฐ,
๊ณต๊ฐ ์ฐจ์ง ๋ฐ ์ค์น์ ๋ฒ๊ฑฐ๋ก์์ด ํด์๋์๋ค๋ ์ ์ด ์ ๋ง ์ ์ตํ๋ค๊ณ ํ๋จ๋๋ค.
Yarn Berry
๋ฅผ ์์ง ์ ๋๋ก ๋ ํ๋ก์ ํธ์ ๋์
ํด๋ณด์ง ์์๊ธฐ์, ๊ด๋ จ๋ ๋จ์ ์ ๊ตฌ๊ธ๋ง์ผ๋ก ์ฐพ์ ์ ๋ฐ์ ์์๋๋ฐ
๋๋ถ๋ถ์ ๋จ์ ํน์ ํธ๋ฌ๋ธ์ํ
์ ์์ง PnP๋ฅผ ์ง์ํ์ง ์๋ ํจํค์ง ๋๋ PnP-dependency์ ๊ด๋ จ๋ ๋ถ๋ถ์ด์๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ์ง์ ํ๋ก์ ํธ๋ฅผ ํตํด ๊ฒช์ด๋ณด๋ ๊ฒ์ด ์ด๋ค ๋ฐฉ๋ฒ ๋ณด๋ค๋ ์ ์ดํดํ ์ ์์ผ๋ฆฌ๋ผ๋ ์๊ฐ์ด ๋ค์๊ณ ,
๋น ๋ฅด๊ฒ Yarn Berry
์
ํ
์ ํด๋ณธ ๋ค PnP๋ฅผ ์ ์ฉํด ๋ณธ ํจํค์ง ๋งค๋์ ์ ํ๊ฒฝ์ ํผ๋ถ๋ก ๋๊ปด๋ณด๊ณ ์ ํ๋ค.
- node_modules๋ก๋ถํฐ ์ฐ๋ฆฌ๋ฅผ ๊ตฌ์ํด ์ค Yarn Berry
- yarn berry๋ก React.js ํ๋ก์ ํธ ์์ํ๊ธฐ
- Yarn Berry๋ฅผ ์ฌ์ฉํด๋ณด์
- yarn berry์ ์ด์
- ํจํค์ง ๊ด๋ฆฌ์ Yarn berry ์์๋ณด๊ธฐ
- Yarn Berry, ๊ตณ์ด ๋์ ํด์ผ ํ ๊น?
- ์๋ฐ์คํฌ๋ฆฝํธ ์์กด์ฑ ์ง์ฅ
- [Yarn berry] pnp(Plug And Play), Zero Install์ ์ํ Dependency ๋ฌธ์ ํด๊ฒฐํ๊ธฐ