๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Web/JS & TS

์ง€๊ธˆ ๋‹น์žฅ pnpm์œผ๋กœ ๋„˜์–ด๊ฐ€์•ผ ํ•˜๋Š” ์ด์œ 

by LasBe 2024. 4. 10.
๋ฐ˜์‘ํ˜•

๐Ÿ“’ ์ง€๊ธˆ ๋‹น์žฅ pnpm์œผ๋กœ ๋„˜์–ด๊ฐ€์•ผ ํ•˜๋Š” ์ด์œ 


์•ˆ์ „๋นต์ด๋ž€ ์ด์œ ๋กœ ๊ณ„์†ํ•ด์„œ npm์„ ๊ณ ์ง‘ํ•ด ์˜ค๋‹ค ์ตœ๊ทผ์— pnpm์œผ๋กœ ๋„˜์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋งˆ์นœ ์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด "์™œ ์ด์ œ์•ผ ๋„˜์–ด๊ฐ”์„๊นŒ"๋ผ๊ณ  ์ƒ๊ฐ์ด ๋ฉ๋‹ˆ๋‹ค.

์•„์ง npm๊ณผ classic yarn์„ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๋ถ„๋“ค๊ป˜ npm์˜ ๋‹จ์ ๋ถ€ํ„ฐ pnpm์˜ ์žฅ์ , ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ์‚ฌ์šฉ๋ฒ•๊นŒ์ง€ ์ „๋ถ€ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ pnpm์ด๋ž€?

pnpm์€ Performant Node Package Manager์˜ ์•ฝ์ž๋กœ, ๊ธฐ์กด npm์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์ž…๋‹ˆ๋‹ค.

์‚ฌ๋‚ด์—์„œ ๊ธฐ์กด๋ถ€ํ„ฐ npm์„ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ, ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ๋ถ€๊ฐ๋˜๋Š” ๋‹จ์ ๋“ค์— ์˜ํ•ด ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋ณ€๊ฒฝ์„ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์กดํ•˜๋Š” ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ค‘ ๊ณ ๋ฏผ ๋์— pnpm์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋Š”๋ฐ์š”.

pnpm์„ ์„ ํƒํ•œ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ๋‚ฎ์€ ๋Ÿฌ๋‹์ปค๋ธŒ, ์‰ฌ์šด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ์ค€์ˆ˜ํ•œ ์„ฑ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ npm์˜ ๋ฌธ์ œ์ ๊ณผ pnpm์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๊ฐœ์„  ๋˜์—ˆ๋Š”์ง€ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ npm์˜ ๋ฌธ์ œ์ , flat tree

npm์€ node_module ๋‚ด๋ถ€์— ๋˜ ๋‹ค๋ฅธ node_module์ด ์ €์žฅ๋˜๋Š” ๋น„ํšจ์œจ์ ์ธ ์ค‘์ฒฉ๋œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด v3๋ถ€ํ„ฐ flat tree ๊ตฌ์กฐ๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค ํ–ˆ์Šต๋‹ˆ๋‹ค.

flat tree ๊ตฌ์กฐ๋กœ ์„ค์น˜ํ•˜๋Š” npm์€ package.json์— ๋ช…์‹œ๋˜๋Š” ์˜์กด์„ฑ๊ณผ ๊ฐ ํŒจํ‚ค์ง€๋“ค์˜ ์˜์กด์„ฑ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„ ์ฐจ์ง€๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์˜์กด์„ฑ๋“ค์„ 1 depth๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ํ˜ธ์ด์ŠคํŒ…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์—์„œ ๋™์ผํ•œ ์˜์กด์„ฑ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ์ค‘์ฒฉ๋œ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ถˆํŽธํ•จ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”Ž ๋Š๋ฆฌ๋‹ค

ํŒจํ‚ค์ง€๊ฐ€ ๋งŽ์•„ ์งˆ์ˆ˜๋ก ์œ„์™€ ๊ฐ™์ด ์˜์กด์„ฑ์„ ๋ถ„์„ํ•˜๋Š” ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ์˜์กด์„ฑ ํ•ด๊ฒฐ ๊ณผ์ •์—์„œ ๊ฒฐ์ •๋œ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ํŒจํ‚ค์ง€๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์„ค์น˜ํ•  ๋•Œ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜ ์†๋„๊ฐ€ ๊ฝค๋‚˜ ๋Š๋ฆฐ ํŽธ์ž…๋‹ˆ๋‹ค.

๐Ÿ”Ž ์šฉ๋Ÿ‰ ์ฐจ์ง€

์˜์กด์„ฑ์ด ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๊ฐœ๋ณ„์ ์œผ๋กœ ์„ค์น˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ“ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋„ 500mb๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฒ„๋ฆฌ๊ณ  ์–ด๋Š ์ •๋„ ๊ทœ๋ชจ๊ฐ€ ๊ฐ–์ถฐ์ง„ ํ”„๋กœ์ ํŠธ๋ฉด ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ ๋‹จ์œ„๋ฅผ ํ›Œ์ฉ ๋›ฐ์–ด๋„˜๊ธฐ ์ผ์‘ค์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธํ•œ๋‹ค๊ณ  ํ”„๋กœ์ ํŠธ ๋ช‡๊ฐœ ์ƒ์„ฑํ•˜๋‹ค ๋ณด๋ฉด ๋””์Šคํฌ ์šฉ๋Ÿ‰์€ ์–ด๋Š์ƒˆ ํฌํ™” ์ง์ „์ž…๋‹ˆ๋‹ค.

๐Ÿ”Ž ์œ ๋ น ์˜์กด์„ฑ

๋ชจ๋“  ์˜์กด์„ฑ์„ ๋Œ์–ด์˜ฌ๋ ค ์„ค์น˜ํ•˜๋Š” ๋ฐฉ์‹ ๋•Œ๋ฌธ์— ์ง์ ‘์ ์œผ๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š์€ ํŒจํ‚ค์ง€๋ฅผ ์ฐธ์กฐํ•  ์œ„ํ—˜์ด ํ•ญ์ƒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ pnpm์ด ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•

pnpm์€ ํŒจํ‚ค์ง€๋ฅผ ์ „์—ญ pnpm store์— ์„ค์น˜ํ•˜๊ณ ,
์‹ฌ๋ณผ๋ง ๋งํฌ์™€ ํ•˜๋“œ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ์˜ ์ค‘์ฒฉ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋””๋ฐ”์ด์Šค์— ์ €์žฅ๋œ ์ „์—ญ pnpm store

pnpm install ์‹œ ์ „์—ญ store์— ํŒจํ‚ค์ง€๋“ค์ด ํ•ด์‹œ ๊ฐ’์œผ๋กœ ์ €์žฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

node_modules/.pnpm ์—๋Š” ์ „์—ญ์œผ๋กœ ํ•˜๋“œ ๋งํฌ๊ฐ€ ๊ฑธ๋ฆฐ 1 depth ํ˜•ํƒœ ๋ชจ๋“  ์˜์กด์„ฑ๋“ค์ด ์กด์žฌํ•˜๊ณ ,
node_modules ์•„๋ž˜ ์˜์กด์„ฑ๋“ค์€ ์ตœ์ข…์ ์œผ๋กœ .pnpm์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ๊ฑธ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

node_modules/.pnpm

$ ls -li ./node_modules

์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•˜๋ฉฐ ๊ธฐ์กด npm์˜ ๋ฌธ์ œ์ ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”Ž ๋น ๋ฅด๋‹ค

ํŒจํ‚ค์ง€ ๋ณ„ ์„ค์น˜ ์ˆœ์„œ๋ฅผ ๊ณ„์‚ฐํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ์— ๋ณ‘๋ ฌ๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ๋ชฐ์•„์„œ ์„ค์น˜ํ•œ ํ›„ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ ํŠธ๋ฆฌ์™€ ๋˜‘๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋งํฌ๋งŒ ๊ฑธ์–ด์ฃผ๋Š” ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ต‰์žฅํžˆ ๋น ๋ฆ…๋‹ˆ๋‹ค.

๐Ÿ”Ž ์šฉ๋Ÿ‰ ์ ˆ๊ฐ

๊ฐ™์€ ํŒจํ‚ค์ง€๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ์ „์—ญ์— ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—„์ฒญ๋‚œ ์šฉ๋Ÿ‰ ์ ˆ๊ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”Ž ์™„๋ฒฝํ•œ ์˜์กด์„ฑ ํŠธ๋ฆฌ

pnpm์€ ํŠน์ • ํŒจํ‚ค์ง€๋ฅผ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉํ•ด๋„ ํ•˜๋‚˜๋งŒ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ๊ฑฑ์ •์ด ์—†์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์˜์กด์„ฑ ํŠธ๋ฆฌ๊ฐ€ ์™„๋ฒฝํ•œ ์ค‘์ฒฉ ๊ตฌ์กฐ๋กœ ์ด๋ค„์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ์ง์ ‘์ ์œผ๋กœ ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ์œ ๋ น ์˜์กด์„ฑ ํ˜„์ƒ์„ ๋ง๋”ํžˆ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ์‚ฝ์งˆ

ํŒจํ‚ค์ง€๋Š” ์ „์—ญ์œผ๋กœ ์ €์žฅ๋˜๋‹ˆ node_modules๋Š” ์šฉ๋Ÿ‰์ด ์—†๊ฒ ์ง€?

๋ผ๋Š” ์šฐ์—ฐํ•œ ํ˜ธ๊ธฐ์‹ฌ์— node_modules ํด๋”๋ฅผ ํ™•์ธํ•˜๋‹ˆ ์ด๊ฒŒ ์›ฌ๊ฑธ, ๋ช‡๋ฐฑ ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ์˜ ์šฉ๋Ÿ‰์ด ์žกํ˜€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ „์—ญ pnpm store๋ฅผ ํ™•์ธํ•ด ๋ณด๋‹ˆ ๋น„์Šทํ•œ ์šฉ๋Ÿ‰์ด ์žกํ˜€์žˆ์—ˆ๊ณ  ํด๋”์™€ ํŒŒ์ผ๋ช…์€ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํžˆ ์–ด๋–ค ํŒจํ‚ค์ง€์ธ์ง€ ํ™•์ธ๋„ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์„œ๋ถ€ํ„ฐ ๋ฐ˜๋‚˜์ ˆ ์‚ฝ์งˆ ๋์— ์•Œ์•„๋‚ธ ๊ฒฐ๊ณผ๋ฅผ ๋จผ์ € ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด ์ „์—ญ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๊ฐ€์ง„ ์˜๋ฌธ์  ๋‘ ๊ฐ€์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์†Œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”Ž ์™œ node_modules ์šฉ๋Ÿ‰์ด ์žกํžˆ์ง€?

์ด๊ฑด ๊ทธ๋ƒฅ ์ œ๊ฐ€ ํ•˜๋“œ ๋งํฌ์™€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ •ํ™•ํžˆ ๋ชฐ๋ผ์„œ ์ƒ๊ธด ๋ฌธ์ œ ์—ˆ์Šต๋‹ˆ๋‹ค.

  • ํ•˜๋“œ ๋งํฌ
    • ํŒŒ์ผ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋™์ผํ•œ ํŒŒ์ผ ๋‚ด์šฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ํŒŒ์ผ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด ๋‘ ๊ฐœ์˜ ํ•˜๋“œ ๋งํฌ๊ฐ€ ์žˆ์„ ๋•Œ, ํ•˜๋‚˜์˜ ํ•˜๋“œ ๋งํฌ๋ฅผ ์‚ญ์ œํ•ด๋„ ์›๋ณธ ํŒŒ์ผ์€ ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋“  ํ•˜๋“œ ๋งํฌ๊ฐ€ ์‚ญ์ œ๋  ๋•Œ๊นŒ์ง€ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
    • pnpm store์— ์ €์žฅ๋œ ํŒจํ‚ค์ง€๋‚˜, node_modules/.pnpm์— ์ €์žฅ๋œ ํŒจํ‚ค์ง€๋‚˜ ๋™์ผํ•œ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์–ด๋””์„œ๋‚˜ ๋™์ผํ•œ ์šฉ๋Ÿ‰์„ ํ‘œ์‹œํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” ์ฐธ์กฐํ•˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋งŒํผ์˜ ์šฉ๋Ÿ‰์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ฌ๋ณผ๋ฆญ ๋งํฌ (์†Œํ”„ํŠธ ๋งํฌ)
    • ํŠน์ • ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
    • ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋Š” ์›๋ณธ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์›๋ณธ ํŒŒ์ผ์ด ์ด๋™๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋ฉด ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • ์œˆ๋„์šฐ์˜ ๋ฐ”๋กœ ๊ฐ€๊ธฐ ํŒŒ์ผ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”Ž pnpm store์™€ ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ์˜ ํ•˜๋“œ ๋งํฌ๋Š” ์ •๋ง ๊ฐ™์€๊ฐ€?

ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ํ•˜๋“œ๋งํฌ๊ฐ€ ์žˆ์„ ๋•Œ ๋™์ผํ•œ ํŒŒ์ผ์ธ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด inode๋ฅผ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • inode
    inode๋Š” ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(๊ถŒํ•œ, ์†Œ์œ ์ž, ํŒŒ์ผ ์‚ฌ์ด์ฆˆ ๋“ฑ)์™€ ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
    ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ์ด inode ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ์ผ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
    ํŒŒ์ผ ์ด๋ฆ„์€ ์‚ฌ์šฉ์ž๊ฐ€ inode์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ ˆ์ด๋ธ”์ด๋ฉฐ, ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ผ ๋ฐ์ดํ„ฐ์˜ ์ฒซ ๋ฒˆ์งธ ํ•˜๋“œ ๋งํฌ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.
$ ls -i <์œ„์น˜>

์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์ „์—ญ ์Šคํ† ์–ด๋ฅผ ์‚ดํŽด๋ณด๋ฉด 8์ž๋ฆฌ inode๋“ค์ด ์ซ™ ํŽผ์ณ์ง‘๋‹ˆ๋‹ค.

์ €๋Š” ์—ฌ๊ธฐ ์žˆ๋Š” inode ์ •๋ณด๋ฅผ ํ”„๋กœ์ ํŠธ node_modules์—์„œ find ๋ช…๋ น์–ด์™€ inode๋ฅผ ์ฐพ๋Š” ์˜ต์…˜์ธ -inum์œผ๋กœ ์ฐพ์œผ๋ฉด ๋‹น์—ฐํžˆ ๋‚˜์˜ฌ ์ค„ ์•Œ๊ณ  ๊ฒ€์ƒ‰ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค.

$ find . -inum <inode ๋ฒˆํ˜ธ>

๊ทธ๋Ÿฐ๋ฐ ์•„๋ฌด๋ฆฌ ์Šคํ† ์–ด ๋‚ด๋ถ€ ํด๋” inode์™€ ๋‚ด๋ถ€ ํŒŒ์ผ inode๋กœ ๊ฒ€์ƒ‰์„ ํ•ด๋„ node_modules์—์„œ ๋™์ผํ•œ inode๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํฌ๊ธฐํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ํŒŒ์ผ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ํ•˜๋“œ ๋งํฌ๋ผ๋Š” ๊ฐ€์ •ํ•˜์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹คํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. pnpm store ์‚ญ์ œ, node_modules ์กด์žฌ
  2. pnpm store ์กด์žฌ, node_modules ์‚ญ์ œ
  3. pnpm store ์กด์žฌ, node_modules ์—†๋Š” ์ƒํƒœ์—์„œ install๋กœ ์ถ”๊ฐ€

๊ฒฐ๊ณผ๋Š” ์„ฑ๊ณต์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋‘ ํ•˜๋“œ ๋งํฌ๊ฐ€ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋‹ค๋ฉด ํฐ ํญ์œผ๋กœ ์šฉ๋Ÿ‰์ด ๋Š˜์—ˆ๋‹ค ์ค„์—ˆ๋‹ค ํ•ด์•ผ๊ฒ ์ง€๋งŒ, ๋ชจ๋“  ๊ฒฝ์šฐ์—์„œ ๊ทผ์†Œํ•œ ํญ์œผ๋กœ ์šฉ๋Ÿ‰์ด ๋ณ€๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์™„๋ฒฝํžˆ inode๊ฐ€ ๊ฐ™๋‹ค๋Š” ๊ฑธ ์ฆ๋ช…ํ•˜์ง€ ๋ชปํ•ด ์ฐ์ฐํ•˜์ง€๋งŒ ๊ทธ๋ž˜๋„ ์‹คํ—˜์œผ๋กœ ์–ด๋Š ์ •๋„ ํ•ด์†Œ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ™•์ธ ๋ฐฉ๋ฒ•์„ ์•„์‹œ๋Š” ๋ถ„์€ ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ pnpm ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

๐Ÿ”Ž pnpm ์„ค์น˜

$ npm i -g pnpm

node ๋ฒ„์ „์— ๋”ฐ๋ฅธ pnpm ์„ค์น˜ ๊ฐ€๋Šฅ ๋ฒ„์ „์€ ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๐Ÿ”Ž pnpm import

$ pnpm import

pnpm import๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ข…์†์„ฑ์„ pnpm ํฌ๋งท์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ package.json์„ ์ธ์‹ํ•ด ์˜์กด์„ฑ์„ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค.

๊ณผ์ •์„ ๋งˆ์น˜๋ฉด ์œ„์™€ ๊ฐ™์ด lock ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”Ž ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € lock ํŒŒ์ผ ์‚ญ์ œํ•˜๊ธฐ

package-lock.json์ด๋‚˜ yarn.lock ๊ฐ™์ด ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์— ์˜ํ•ด ์ƒ์„ฑ๋œ lock ํŒŒ์ผ์„ ์‚ญ์ œํ•ด ์ค๋‹ˆ๋‹ค.

๐Ÿ”Ž pnpm์œผ๋กœ ํŒจํ‚ค์ง€ ์„ค์น˜ ๊ฐ•์ œํ•˜๊ธฐ

// package.json
{
    "scripts": {
        "preinstall": "npx only-allow pnpm"
    }
}

preinstall ์Šคํฌ๋ฆฝํŠธ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

only-allow๋ผ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pnpm์— ์˜ํ•ด ํŒจํ‚ค์ง€๋“ค์ด ์„ค์น˜๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”Ž node_modules ํด๋” ์‚ญ์ œํ•˜๊ธฐ

๊ธฐ์กด ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ ์„ค์น˜ํ•œ node_modules ํด๋”๋ฅผ ์‚ญ์ œํ•ด ์ค๋‹ˆ๋‹ค.

๐Ÿ”Ž ํŒจํ‚ค์ง€ ์žฌ์„ค์น˜

$ pnpm install

์ด์ œ ์„ค์น˜ํ•˜๊ณ  ๋‚˜๋ฉด ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์™€ ํ•˜๋“œ ๋งํฌ๊ฐ€ ๊ฑธ๋ฆฐ node_modules๊ฐ€ ์™„์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค.

์ž˜ ์„ค์น˜๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด ์˜์กด์„ฑ์— ์œ„์™€ ๊ฐ™์€ ํ™”์‚ดํ‘œ ํ‘œ์‹œ๋กœ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ๊ฑธ๋ ธ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ pnpm ๊ธฐ๋ณธ ๋ช…๋ น์–ด

  1. pnpm install
    ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
    npm install๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, pnpm์€ ๊ณต์œ  ํŒจํ‚ค์ง€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.
  2. pnpm add [package]
    ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค
    npm install [package]์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, pnpm์€ ๊ณต์œ  ํŒจํ‚ค์ง€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  3. pnpm remove [package]
    ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  4. pnpm update
    ์ข…์†์„ฑ์„ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  5. pnpm list
    ํ”„๋กœ์ ํŠธ์— ์„ค์น˜๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  6. pnpm [script]
    package.json ํŒŒ์ผ์˜ scripts ์„น์…˜์—์„œ ์ง€์ •๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  7. pnpm link
    ๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœ ์ค‘์ธ ํŒจํ‚ค์ง€๋ฅผ ํ”„๋กœ์ ํŠธ์— ๋งํฌํ•ฉ๋‹ˆ๋‹ค.
  8. pnpm unlink
    ๋กœ์ปฌ ํŒจํ‚ค์ง€์˜ ๋งํฌ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  9. pnpm publish
    ํŒจํ‚ค์ง€๋ฅผ npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


์˜คํ”ˆ ์ฑ„ํŒ