๊ธฐ์กด์ ํธ์ด์คํ ๋ฐฉ์๊ณผ pnpm์ ์์กด์ฑ ํธ๋ฆฌ ์ ์ง ๋ฐฉ์

pnpm์ Performant NPM, ์ฆ ๋์ ์ฑ๋ฅ์ ๋ด๋ npm์ด๋ผ๋ ์๋ฏธ์ด๋ค.
npm์ ๊ณต์์ ์ผ๋ก ‘์ค์ฌ์ด ์ฝ์๊ฐ ์๋๋ค(npm is not an acronym)’๋ผ๊ณ ํ์ง๋ง ๋๊ตฌ์๊ฒ๋ Node Package Manager๋ผ๊ณ ํ๋ฉด ์ฝ๊ฒ ์ค๋ช ์ด ๋๋ค…
ํ์ฌ ํ๋ก์ ํธ์์๋ npm โ yarn โ yarn berry๋ฅผ ๊ฑฐ์ณ ํ์ฌ๋ pnpm์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, ํน์ฑ์ ๋ฎ์ ๋ ธ๋ ๋ฒ์ ์ ์ง๊ฐ ํ์ํ ๊ณณ๋ง npm์ ์ฌ์ฉํ๊ณ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ค๋ฅธ ํจํค์ง ๋งค๋์ ์ ๋น๊ตํด pnpm์ ํน์ง์ ๋จผ์ ์ดํด๋ณด์.
ํน์ง | pnpm | npm / yarn |
---|---|---|
์๋ | ๋น ๋ฆ(๋ณ๋ ฌ ์ฒ๋ฆฌ) | ๋ค์ ๋๋ฆผ |
ํจ์จ์ฑ | ์ข์(๊ธ๋ก๋ฒ ์บ์ฑ, ๋งํฌ ์ฌ์ฉ) | ๋ฎ์(์ค๋ณต ์ ์ฅ ๊ฐ๋ฅ์ฑ) |
ํธํ์ฑ | npm ํธํ | Node.js ๊ธฐ๋ณธ |
์์กด์ฑ ๊ด๋ฆฌ | ์๊ฒฉํจ(์ถฉ๋ ๋ฐฉ์ง ์ฅ์ ) | ๋์จํจ |
๋ชจ๋ ธ๋ ํฌ ์ง์ | ์ํฌ์คํ์ด์ค ์ง์ | yarn ์ผ๋ถ ์ง์ |
pnpm์ ์์กด์ฑ ๊ด๋ฆฌ ๋ฐฉ์์ ๊ธฐ์กด์ ํธ์ด์คํ (hoisting) ๋ฐฉ์์ ์ฌ์ฉํ๋ ํจํค์ง ๋งค๋์ ์ ์ฐจ๋ณํ๋๋ค. ํธ์ด์คํ ๋ฐฉ์๊ณผ pnpm ๊ณ ์ ์ ์์กด์ฑ ํธ๋ฆฌ ์ ์ง ๋ฐฉ์์ ๋น๊ตํด๋ณด์.
ํธ์ด์คํ ๋ฐฉ์
์ ํต์ ์ธ ํจํค์ง ๋งค๋์ (npm, yarn)์์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ผ๋ก, ์์กด์ฑ์ ํ๋ก์ ํธ ๋ฃจํธ์ node_modules ๋๋ ํ ๋ฆฌ๋ก ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ชจ๋ ์์กด์ฑ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ์ค์นํ์ฌ, ํ์ ํจํค์ง์์ ํด๋น ์์กด์ฑ์ ๋ง์น ๋ฃจํธ์ ์ค์น๋ ๊ฒ์ฒ๋ผ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ค.
ํธ์ด์คํ ๋ฐฉ์์ ์ฅ์
1. ๊ฐ๋จํ ์ ๊ทผ : ๋ชจ๋ ํจํค์ง๊ฐ ๊ฐ์ ๋๋ ํ ๋ฆฌ์ ์ค์น๋๋ฏ๋ก, ์์กด์ฑ์ ์ฐพ๋ ๋ฐ ๊ฐ๋จํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค.
2. ์ค๋ณต ์ ๊ฑฐ : ์ค๋ณต๋ ์์กด์ฑ์ ์์๋ก ๋์ด์ฌ๋ ค ๋์คํฌ ์ฌ์ฉ๋์ด ์ค์ด๋ ๋ค.
ํธ์ด์คํ ๋ฐฉ์์ ๋จ์
1. ์์กด์ฑ ์ถฉ๋ : ์๋ก ๋ค๋ฅธ ํจํค์ง๊ฐ ๋์ผํ ์ด๋ฆ์ ์์กด์ฑ์ ์๋ก ๋ค๋ฅธ ๋ฒ์ ์ผ๋ก ์๊ตฌํ ๋, ํ๋์ ๋ฒ์ ๋ง ์ค์น๋๋ฏ๋ก ์ถฉ๋ ๋ฐ์ ๊ฐ๋ฅ์ฑ ์กด์ฌํ๋ค.
2. ์์กด์ฑ ์จ๊น ๋ฌธ์ : ํ์ ํจํค์ง๊ฐ ์๋ฌต์ ์ผ๋ก ๋ฃจํธ์ ์๋ ์์กด์ฑ์ ์ ๊ทผํ๊ฒ ๋์ด, ์์กด์ฑ์ ๋ช ์ํ์ง ์๊ณ ์ฌ์ฉํ ์ํ์ด ์๋ค.
๋ฐ๋ผ์ ํจํค์ง๊ฐ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
pnpm ๊ณ ์ ์ ์์กด์ฑ ํธ๋ฆฌ ์ ์ง ๋ฐฉ์
pnpm์ ์์กด์ฑ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ, ๊ฐ ํจํค์ง์ ์์กด์ฑ ํธ๋ฆฌ๋ฅผ ์ ์งํ๋ค. ๋ํ โflatโ ๊ตฌ์กฐ ๋์ ํ๋ ๋งํฌ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ, ์์กด์ฑ์ด ์ค์น๋ ์์น๋ฅผ ์ฐธ์กฐ๋ง ํ๋ค.
์๋ ๋ฐฉ์
.pnpm ๋๋ ํ ๋ฆฌ
๋ชจ๋ ์์กด์ฑ์ ๋ฃจํธ์ node_modules ๋๋ ํ ๋ฆฌ ๋ด๋ถ .pnpm ๋๋ ํ ๋ฆฌ์ ์ค์น๋๋ค. ์ค๋ณต๋ ์์กด์ฑ์ ๋จ์ผ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๊ณ , ํ์ํ ์์น์์ ํด๋น ํ์ผ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์์ฑํ๋ค.
๋ ๋ฆฝ์ ์์กด์ฑ ํธ๋ฆฌ
๊ฐ ํจํค์ง๋ ์์ ๋ง์ node_modules๋ฅผ ๊ฐ์ง๊ณ , ํ์ํ ์์กด์ฑ์ .pnpm์์ ์ฐธ์กฐํ๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ค.
project/
โโโ node_modules/
โ ย โโโ package-a/
โ ย โ ย โโโ node_modules/
โ ย โ ย ย ย โโโ dependency-a@1.0.0 -> .pnpm/dependency-a@1.0.0
โ ย โโโ package-b/
โ ย โ ย โโโ node_modules/
โ ย โ ย ย ย โโโ dependency-a@2.0.0 -> .pnpm/dependency-a@2.0.0
๋ฐ๋ผ์ package-a์ package-b๋ ์๋ก ๋ค๋ฅธ ๋ฒ์ ์ dependency-a๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
pnpm ๋ฐฉ์์ ์ฅ์
1. ์์กด์ฑ ์ถฉ๋ ๋ฐฉ์ง : ๊ฐ ํจํค์ง๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์์กด์ฑ์ ๊ด๋ฆฌํ๋ฏ๋ก, ์๋ก ๋ค๋ฅธ ๋ฒ์ ์ ์์กด์ฑ์ ๋ฌธ์ ์์ด ์ฌ์ฉํ ์ ์๋ค.
2. ๋น ๋ฅธ ์ค์น : ๋์ผํ ์์กด์ฑ์ ์ค๋ณต ๋ค์ด๋ก๋ํ์ง ์๊ณ , ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํตํด ์ฐธ์กฐํ๋ฏ๋ก ์๋๊ฐ ๋น ๋ฅด๋ค.
3. ๋์คํฌ ๊ณต๊ฐ ์ ์ฝ : .pnpm ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ์์กด์ฑ์ ๊ณต์ ์ ์ฅํ๋ฏ๋ก ์ค๋ณต ์ค์น๋ฅผ ๋ฐฉ์งํ๋ค.
4. ๋ช ์์ ์์กด์ฑ ์ฌ์ฉ : ํจํค์ง๋ ๋ฐ๋์ ์์ ์ด ๋ช ์์ ์ผ๋ก ์ ์ธํ ์์กด์ฑ๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ฃจํธ์ ์ค์น๋ ์์กด์ฑ์ ์๋ฌต์ ์ผ๋ก ์์กดํ์ง ์๋๋ค.
pnpm ๋ฐฉ์์ ๋จ์
1. ๋ณต์กํ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ : ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์ผ๋ฐ์ ์ธ ๋ฐฉ์๋ณด๋ค ๋ณต์กํด ๋ณด์ผ ์ ์๋ค.
2. ํธํ์ฑ ๋ฌธ์ : ์ผ๋ถ ์ค๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์คํฌ๋ฆฝํธ๊ฐ node_modules ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ ๋ฐฉ์์ผ๋ก ๋์ํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
pnpm์ ์์กด์ฑ ๊ด๋ฆฌ ๋ฐฉ์์ ์์กด์ฑ ์ถฉ๋ ๋ฐฉ์ง, ๋์คํฌ ๊ณต๊ฐ ์ ์ฝ, ๋ช ์์ ์์กด์ฑ ๊ด๋ฆฌ์ ๊ฐ์ ์ ๊ฐ์ง๊ณ ์๋ค. ํนํ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ๊ฐ ํจํค์ง์ ๋ ๋ฆฝ์ ์์กด์ฑ์ ๊ด๋ฆฌ์ ๋งค์ฐ ์ ์ฉํ๋ค.