๐Ÿš€ 2025๋…„์˜ pnpm

2025๋…„์€ pnpm์—๊ฒŒ ๋ณ€ํ™”์˜ ํ•ด์˜€์Šต๋‹ˆ๋‹ค. ์ €ํฌ๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์˜ ๋ณด์•ˆ ๋ชจ๋ธ์„ ์žฌ์ •์˜ํ•˜๋Š” ๋ฐ ์ฃผ๋ ฅํ–ˆ์ง€๋งŒ, ์„ฑ๋Šฅ๊ณผ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์—์„œ๋„ ์ƒ๋‹นํ•œ ๊ฐœ์„ ์„ ์ด๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์ „์—ญ ๊ฐ€์ƒ ์Šคํ† ์–ด ๋„์ž…๊นŒ์ง€, 2025๋…„์— ์ถœ์‹œ๋œ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๋Œ์•„๋ด…๋‹ˆ๋‹ค.

์‚ฌ์šฉ#

๋‹ค์šด๋กœ๋“œ ํ†ต๊ณ„์— ๋”ฐ๋ฅด๋ฉด pnpm์€ 2024๋…„๋ณด๋‹ค 2๋ฐฐ ๋” ๋งŽ์ด ๋‹ค์šด๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

ํ™ˆํŽ˜์ด์ง€ ๋ฆฌ๋””์ž์ธ#

ํ™ˆํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ๋””์ž์ธ๋œ ๊ฒƒ์„ ๋ˆˆ์น˜์ฑ„์…จ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค! ์ด๋ฒˆ ๋ฆฌ๋””์ž์ธ์€ ์ €ํฌ์˜ ๊ฐ€์žฅ ์ฃผ์š”ํ•œ ํ›„์›์‚ฌ์ธ Bit.cloud ๋•๋ถ„์— ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ํ™ˆํŽ˜์ด์ง€๋Š” Bit ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ, ์ž‘์—…์˜ ์ƒ๋‹น ๋ถ€๋ถ„์€ Bit์˜ AI ์—์ด์ „ํŠธ์ธ Hope AI๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ €ํฌ๋งŒ์˜ ๋””์ž์ธ ์‹œ์Šคํ…œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ณด

์ €๋Š” Bit์—์„œ ์ข…์†์„ฑ ๊ด€๋ฆฌ ์—…๋ฌด๋ฅผ ํ’€ํƒ€์ž„์œผ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ Bit๋Š” ์„ค์น˜์— pnpm์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

JSNation ๋ฐœํ‘œ#

์˜ฌํ•ด๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ํฐ ์ด์ •ํ‘œ๊ฐ€ ๋œ ํ•ด์˜€์Šต๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ๊ตญ์ œ ์ฝ˜ํผ๋Ÿฐ์Šค์—์„œ ์ฒ˜์Œ์œผ๋กœ ํ˜„์žฅ ๋ฐœํ‘œ๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ 6์›” ์•”์Šคํ…Œ๋ฅด๋‹ด์—์„œ ์—ด๋ฆฐ JSNation์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฉ‹์ง„ ๊ธฐํšŒ๋ฅผ ์ฃผ์‹  JSNation ํŒ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ pnpm์ด ์–ผ๋งˆ๋‚˜ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‚ฌ๋žŒ์ด ์—…๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๊ณ  ๊ธฐ๋ถ„ ์ข‹๊ฒŒ ๋†€๋ž์Šต๋‹ˆ๋‹ค!

์ œ ๋ฐœํ‘œ ์ฃผ์ œ๋Š” ๊ตฌ์„ฑ ์ข…์†์„ฑ์˜€์œผ๋ฉฐ, ๋…นํ™”๋ณธ์€ ์—ฌ๊ธฐ์—์„œ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ#

์ด์ œ 2025๋…„ ๋™์•ˆ pnpm v10์—์„œ ์ถœ์‹œ๋œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋ณด์•ˆ#

์˜ฌํ•ด ๊ฐ€์žฅ ํฐ ๋ณ€ํ™”๋Š” pnpm์ด "๊ธฐ๋ณธ ๋ณด์•ˆ"์œผ๋กœ ์ „ํ™˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ pnpm v10.0์—์„œ๋Š” ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์‹ ๋ขฐํ•˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜๋ช… ์ฃผ๊ธฐ ์Šคํฌ๋ฆฝํŠธ ์ฐจ๋‹จ(v10.0)#

์ˆ˜๋…„๊ฐ„ pnpm install์€ ์ „์ฒด ์ข…์†์„ฑ ํŠธ๋ฆฌ๊ฐ€ ์ž„์˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์‹ ๋ขฐํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ v10์—์„œ๋Š” ์ด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. pnpm์€ ๋” ์ด์ƒ ๊ธฐ๋ณธ์ ์œผ๋กœ preinstall ๋˜๋Š” postinstall ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ด‘๋ฒ”์œ„ํ•œ ๊ณต๊ธ‰๋ง ๊ณต๊ฒฉ ๋ฒกํ„ฐ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ด ์ œ์–ด๋ฅผ ์„ธ๋ถ„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด v10.26์—์„œ allowBuilds๋ฅผ ๋„์ž…ํ•˜์—ฌ, ์ด์ „์˜ onlyBuiltDependencies๋ฅผ ๋” ์œ ์—ฐํ•œ ๊ตฌ์„ฑ์œผ๋กœ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค:

allowBuilds:
  esbuild: true
  # ํŠน์ • ๋ฒ„์ „๋งŒ ํ—ˆ์šฉ
  nx@21.6.4: true

์‹ฌ์ธต ๋ฐฉ์–ด(v10.16 & v10.21)#

์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฉˆ์ถ”์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•…์„ฑ ํŒจํ‚ค์ง€๊ฐ€ ๋””์Šคํฌ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ์žก์•„๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ๊ฒน์˜ ๋ฐฉ์–ด ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค:

  • minimumReleaseAge: "์ œ๋กœ๋ฐ์ด" ๋ฆด๋ฆฌ์Šค(์˜ˆ: ๊ฒŒ์‹œ๋œ ์ง€ 24์‹œ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์€ ํŒจํ‚ค์ง€)๋ฅผ ์ฐจ๋‹จํ•˜์—ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์•…์„ฑ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹ ๊ณ ํ•  ์‹œ๊ฐ„์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.
  • trustPolicy: no-downgrade: ์ด์ „ ๋ฒ„์ „๋ณด๋‹ค ์ถœ์ฒ˜ ์ฆ๋ช…์ด ์•ฝํ•œ ์—…๋ฐ์ดํŠธ(์˜ˆ: CI/CD ๊ฒ€์ฆ ์—†์ด ๊ฒŒ์‹œ๋œ ๋ฒ„์ „)์˜ ์„ค์น˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • blockExoticSubdeps: ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ข…์†์„ฑ์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค์˜ ์ „์ด ์ข…์†์„ฑ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ „์—ญ ๊ฐ€์ƒ ์Šคํ† ์–ด(v10.12)#

์ดˆ์ฐฝ๊ธฐ pnpm์˜ ํ˜์‹  ์ค‘ ํ•˜๋‚˜๋Š” ํŒŒ์ผ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์—ฌ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•˜๋Š” ์ฝ˜ํ…์ธ  ์ฃผ์†Œ ์ง€์ • ์Šคํ† ์–ด์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ v10.12์—์„œ๋Š” **์ „์—ญ ๊ฐ€์ƒ ์Šคํ† ์–ด**๋กœ ์ด๋ฅผ ํ•œ ๋‹จ๊ณ„ ๋” ๋ฐœ์ „์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

์ด์ „์—๋Š” ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ์ž์ฒด node_modules ๊ตฌ์กฐ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ enableGlobalVirtualStore: true๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด pnpm์ด ๋””์Šคํฌ์˜ ์ค‘์•™ ์œ„์น˜์—์„œ ํ”„๋กœ์ ํŠธ๋กœ ์ข…์†์„ฑ์„ ์ง์ ‘ ๋งํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:

  1. ๋Œ€๊ทœ๋ชจ ๋””์Šคํฌ ์ ˆ์•ฝ: ๋™์ผํ•œ ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๊ฐ€ ํ”„๋กœ์ ํŠธ ๊ฐ„์— ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.
  2. ๋” ๋น ๋ฅธ ์„ค์น˜: react@19๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ 10๊ฐœ ์žˆ์–ด๋„ pnpm์€ ์ด๋ฅผ ์ „์—ญ์ ์œผ๋กœ ํ•œ ๋ฒˆ๋งŒ ๋งํฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ JSR ์ง€์›(v10.9)#

์ƒˆ๋กœ์šด JSR ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ jsr: ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ JSR์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

pnpm add jsr:@std/collections

์ด๋Š” package.json์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งคํ•‘๋˜๋ฉฐ, npm ์ข…์†์„ฑ๊ณผ ํ•จ๊ป˜ JSR ํŒจํ‚ค์ง€ ๊ณ ์œ ์˜ ํ•ด์„ ๊ทœ์น™์„ ๋งค๋„๋Ÿฝ๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์ข…์†์„ฑ(v10.0)#

๋ชจ๋…ธ๋ ˆํฌ์™€ ๋ณต์žกํ•œ ์„ค์ •์„ ์œ„ํ•ด **๊ตฌ์„ฑ ์ข…์†์„ฑ**์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ›…, ํŒจ์น˜, ๋นŒ๋“œ ๊ถŒํ•œ๊ณผ ๊ฐ™์€ pnpm ๊ตฌ์„ฑ์„ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๊ณต์œ ํ•˜๊ณ  ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์ข…์†์„ฑ์€ ์ฃผ ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๊ฐ€ ํ•ด์„๋˜๊ธฐ ์ „์— node_modules/.pnpm-config์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ์—์„œ .pnpmfile.cjs ํ›…์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.
  • ํŒจ์น˜ ํŒŒ์ผ์„ patchedDependencies์šฉ์œผ๋กœ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ํ—ˆ์šฉ๋œ ํŒจํ‚ค์ง€์˜ ๊ณต์œ  ๋ชฉ๋ก์„ allowBuilds์šฉ์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
pnpm-workspace.yaml
configDependencies:
  pnpm-plugin-my-company: "1.0.0+sha512-..."

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

์ž๋™ JavaScript ๋Ÿฐํƒ€์ž„ ๊ด€๋ฆฌ(v10.14 & v10.21)#

์ €ํฌ๋Š” ๊ฝค ์˜ค๋ž˜์ „๋ถ€ํ„ฐ Node.js ๋Ÿฐํƒ€์ž„ ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•ด ์™”์Šต๋‹ˆ๋‹ค. 2025๋…„์—๋Š” ์ด๋ฅผ ํ™•์žฅํ•˜์—ฌ Deno์™€ Bun ๊ฐ™์€ ๋‹ค๋ฅธ ๋Ÿฐํƒ€์ž„๋„ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ devEngines.runtime์„ ํ†ตํ•ด package.json์— ํ•„์š”ํ•œ ๋Ÿฐํƒ€์ž„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

package.json
{
  "devEngines": {
    "runtime": {
      "name": "node",
      "version": "24.6.0"
    }
  }
}

pnpm์€ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๊ทธ ํŠน์ • ๋ฒ„์ „์˜ ๋Ÿฐํƒ€์ž„์„ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ์จ "์ œ ์ปดํ“จํ„ฐ์—์„œ๋Š” ์ž˜ ๋˜๋Š”๋ฐ์š”"๋Š” ์˜›๋ง์ด ๋ฉ๋‹ˆ๋‹ค. ํŒ€์› ๋ชจ๋‘๊ฐ€ pnpm์ด ์ „์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์™„์ „ํžˆ ๋™์ผํ•œ ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์•ž์œผ๋กœ์˜ ๊ณ„ํš#

์ €ํฌ๋Š” ์ด๋ฏธ pnpm v11.0 ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์—๋Š” ๋ˆˆ์— ๋„๋Š” ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์—ญ ๊ฐ€์ƒ ์Šคํ† ์–ด๋Š” ์•„์ง ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„ ๋ฉ”์ด์ € ๋ฆด๋ฆฌ์Šค์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ๋ˆ„๋ฝ๋œ ๊ธฐ๋Šฅ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.