๐Ÿ“šbook/npm Deep Dive

[npm Deep Dive] ์‹ค์ œ ์‚ฌ๊ณ  ์‚ฌ๋ก€๋กœ ์•Œ์•„๋ณด๋Š” ์œ ์˜์  ๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ

ํ‚ํ‚์ž‰ 2025. 6. 23. 18:02


์œ„ํ‚ค๋ถ์Šค์˜ npm Deep Dive ์™„๋… ์ฑŒ๋ฆฐ์ง€ 1์ผ์ฐจ! ์ถœํŒ ์†Œ์‹ ๋ณด์ž๋งˆ์ž ๋„ˆ๋ฌด ๊ฐ–๊ณ  ์‹ถ์—ˆ๋˜ ์ฑ…์ธ๋ฐ, ๋น„์‹ธ๊ณ  ์ € ๋‘๊บผ์šด๊ฑธ ์–ธ์ œ ๋‹ค๋ณด๋‚˜ ํ•ด์„œ ๋ง์„ค์ด๋˜ ์ฐจ์— ์ฑŒ๋ฆฐ์ง€์— ์ฐธ์—ฌํ•˜๋ฉด ์™„๋…ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์‹ถ์–ด์„œ ์‹ ์ฒญํ–ˆ๋‹ค.

 

์˜ค๋Š˜์˜ Mission

- 1.1 npm์˜ ์ •์˜์™€ ์—ญ์‚ฌ (~p.20)
- 1.2 ์œ ์˜์  ๋ฒ„์ „์ด๋ž€? (~p.52)



๐Ÿ‘‰๋‚˜์—๊ฒŒ npm์ด๋ž€

๋จผ์ € ์ฑ…์„ ์ฝ๊ธฐ์ „์— ๋‚˜์—๊ฒŒ npm์€ ์–ด๋–ค ์กด์žฌ์ผ๊นŒ ์ƒ๊ฐํ•ด๋ณด์•˜๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•œ์ง€ 2๋…„ ์ •๋„๊ฐ€ ๋˜์—ˆ๊ณ , ์ง€๊ธˆ๊นŒ์ง€ ๋ฌด์ˆ˜ํ•˜๊ฒŒ ๋งŽ์€ npm install, npm start, npm run dev๋ฅผ ์ณ์™”์ง€๋งŒ ๊ทธ๋ƒฅ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ, ๊ทธ์ •๋„๋กœ๋งŒ ์ธ์‹ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. npm์ด๋“  pnpm์ด๋“  yarn์ด๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด ๋‹น์—ฐํžˆ ์“ฐ๋Š” ๊ฒƒ. ๋„ˆ๋ฌด ์ต์ˆ™ํ•˜๊ณ  ๋‹น์—ฐํ•ด์„œ ๋” ์•Œ์•„๋ณผ ํ•„์š”์„ฑ์„ ๋А๋ผ์ง€ ๋ชปํ–ˆ๋‹ค.

 

npm ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์˜๋ฌธ, ๋ณด๋‹ค๋„ ๊ฐœ ๊นŠ์€ ๋นก์นจ์„ ๋А๋‚€ ๊ฒƒ์€ express๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ๋ถ€ํ„ฐ์˜€๋‹ค. commonJS, ESModule...๋‹จ์ˆœํ•œ import, require ๊ตฌ๋ฌธ๋“ค์ด ์˜ค๋ฅ˜์˜ ์›์ธ์ด ๋˜์—ˆ๊ณ , ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๋งˆ๋‹ค ๋ชจ๋“ˆ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”๊ฑธ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋‹ˆ ๋‚ด๊ฐ€ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ, ๋‚˜์•„๊ฐ€ npm์— ๋Œ€ํ•ด ์•„๋Š”๊ฒŒ ์—†๊ตฌ๋‚˜ ๊นจ๋‹ฌ์•˜๋‹ค. package.json๋งŒ ๋‘์‹œ๊ฐ„ ์ˆ˜์ •ํ•˜๋‹ค๋ณด๋‹ˆ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ๊ณผ npm์— ๋Œ€ํ•œ ๋ณธ๊ฒฉ์ ์ธ ๊ด€์‹ฌ์ด ์ƒ๊ฒผ๊ณ , ๋‹น์—ฐํ•˜๊ฒŒ ์—ฌ๊ฒจ์กŒ๋˜ npm์ด๋ผ๋Š” ๊ฒƒ์ด ๋‚ด๊ฐ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผ ํ•  ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ๋กœ ๋‹ค๊ฐ€์˜จ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์นจ, ๊ด€์‹ฌ์ด ๋ง‰ ํ”ผ์–ด๋‚˜๋˜ ์ฐจ์— npm deep dive๊ฐ€ ์ถœ์‹œ๋จ destiny

 

์‚ฌ์กฑ์ด ๋งŽ์•˜์ง€๋งŒ ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด ๋‚˜์—๊ฒŒ npm์€ ๊ทธ๋ƒฅ npm์ด๋‹ค. ์กด์žฌ ์ž์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋‹น์—ฐํ•ด์„œ ๊ตณ์ด ๋ญ˜ ๋” ์•Œ๊ณ ์ž ํ•  ํ•„์š”๋„ ์—†์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ ๊ธฐํšŒ๋ฅผ ํ†ตํ•ด, ๋‹น์—ฐํ•จ์„ ์ดํ•ด์˜ ์˜์—ญ์œผ๋กœ ํ™•์žฅํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ œ๋Œ€๋กœ ๊ณต๋ถ€ํ•ด์„œ ๋ชจ๋“ˆ ๋”ฐ์œ„์—๊ฒŒ ์ง€์ง€ ์•Š๋Š” ์‚ฌ๋žŒ์ด ๋ ๊ฑฐ์•ผ..

 

๐Ÿ“ฆnpm 

npm์€ ์ „ ์„ธ๊ณ„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด์ž CLI ๋„๊ตฌ

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

 

npm์€ node package manager๋‹ค? 

์ง€๋‚˜๊ฐ€๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ๋ถ™์žก๊ณ  npm์ด ๋ญ”์ง€ ์•„์„ธ์š”? ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ๋Œ€๋ถ€๋ถ„ node package manager์ด๋ผ๊ณ  ํ•  ๊ฒƒ์ด๋‹ค. ๋‚˜๋„ ์˜ค๋Š˜ ์ด ์ฑ…์„ ์ฝ๊ธฐ ์ „์—๋Š” node package manager์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ธํ„ฐ๋„ท์— npm์„ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ์ž๋ฃŒ๋‚˜ ๋ธ”๋กœ๊ทธ์—์„œ๋„ node package manager์ด๋ผ๊ณ  ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง„์‹ค์€ ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค.

 

npm์€ ๋ณธ๋ž˜ pm๋ผ๋Š” bash ์œ ํ‹ธ์—์„œ ์ถœ๋ฐœํ•œ ํ”„๋กœ์ ํŠธ์ด๋‹ค. pm์€ pkgmakeinst(package make install)๋ผ๋Š” bash ํ•จ์ˆ˜์˜ ์ถ•์•ฝ์–ด์ด๊ณ , ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

 npm์€ ์ด๋ฅผ ๊ณ„์Šนํ•œ ๋„๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ตณ์ด ์•ฝ์–ด๋กœ ๋ณด์ž๋ฉด "node pm"๋˜๋Š” "new pm" ์ •๋„์˜ ์˜๋ฏธ๋กœ ์“ฐ์ผ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ณต์‹์ ์œผ๋กœ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์„ค๋ช…ํ•œ๋‹ค.

 

npm ์ด๋ฆ„์— ๋Œ€ํ•œ ๊ณต์‹ Q&A

Q: "npm"์€ "Node package Manager"์˜ ์•ฝ์ž์ธ๊ฐ€์š”?
A: ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ npm์€ "Node Package Manager"์˜ ์•ฝ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค "npm is not an acronym(npm์€ ์•ฝ์ž๊ฐ€ ์•„๋‹ˆ๋‹ค)"์ด๋ผ๋Š” ์žฌ๊ท€์  ๋ฐฑํฌ๋กœ๋‹˜(bacronym, ์‚ฌํ›„์ ์œผ๋กœ ๋ถ™ํžŒ ์•ฝ์ž)์—์„œ ๋‚˜์˜จ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ninaa๋ผ๋ฉด ์ง„์งœ ์•ฝ์ž๊ฐ€ ๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

npm์˜ ์ „์‹ ์€ pm์ด๋ผ๋Š” bash ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜€๋Š”๋ฐ, ์ด๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” pkgmakeinst๋ผ๋Š” bash ํ•จ์ˆ˜์˜ ์ถ•์•ฝํ˜• ์ด๋ฆ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ npm์„ ์–ต์ง€๋กœ ์•ฝ์ž๋กœ ๋ณธ๋‹ค๋ฉด, "node pm"๋˜๋Š” "new pm" ์ •๋„๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ฆ‰, ์ด๋ฆ„ ์ž์ฒด๋Š” ์˜๋ฏธ ์—†๋Š” ๋ฌธ์ž์—ด๋กœ ๋ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๊ณต์‹์˜ ์ž…์žฅ์ธ ๊ฒƒ ๊ฐ™๋‹ค. 

 

 

npm์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

npm์€ ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ ์„ค์น˜ ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ณ  ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

  • ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ฐ ๊ด€๋ฆฌ: package.json์˜ dependencies์™€ devDependencies์— ์„ ์–ธ๋œ ํŒจํ‚ค์ง€๋ฅผ node_modules์— ์„ค์ง€ํ•˜์—ฌ Node.js ๊ธฐ๋ฐ˜ ํŒจํ‚ค์ง€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. 
  • ํŒจํ‚ค์ง€ ๋ฐฐํฌ ๋ฐ ๊ณต์œ : npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒจํ‚ค์ง€๋ฅผ ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋˜ ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰: package.json์˜ scripts ํ•„๋“œ๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ cli๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํŒจํ‚ค์ง€ ์ •๋ณด ํ™•์ธ: npmjs.com ์‚ฌ์ดํŠธ์—์„œ ํŒจํ‚ค์ง€์˜ ๊ฐœ์š”, ์‹ค์ œ ์ฝ”๋“œ, ์˜์กด์„ฑ, ๋‹ค์šด๋กœ๋“œ ์ˆ˜ ๋“ฑ ์ „๋ฐ˜์ ์ธ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โญ์œ ์˜์  ๋ฒ„์ „ 

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

 

ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž…์žฅ์—์„œ ์„ ํƒ์ง€๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ด๋‹ค.

  • โœ…์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ์˜์กด์„ฑ์„ ๊ณ ์ •
  • ๐Ÿ”ํ•ญ์ƒ ์ตœ์‹  ํŒจํ‚ค์ง€๋กœ ์—…๋ฐ์ดํŠธ

ํ•˜์ง€๋งŒ ์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹ ๋ชจ๋‘ ๋‹จ์ ์ด ์žˆ๋‹ค. 

์˜์กด์„ฑ์„ ๊ณ ์ •ํ•˜๋ฉด, ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์€ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์˜คํ”ˆ์†Œ์Šค์˜ ๋ฐœ์ „์„ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ breaking change๋‚˜ ๋น„ํšจ์œจ์ ์ธ ์œ ์ง€๋ณด์ˆ˜ ์ž‘์—…์— ์‹œ๊ฐ„๊ณผ ์—๋„ˆ์ง€๋ฅผ ์Ÿ์•„์•ผ ํ•œ๋‹ค. 

 

๐Ÿ’ก์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ทœ์น™์ด ๋ฐ”๋กœ, ์œ ์˜์  ๋ฒ„์ „์ด๋‹ค. 

sementic versioning, semVer: ์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„์ „์ด ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋„๋ก ๊ตฌ์„ฑํ•˜๋Š” ํ‘œ์ค€

์œ ์˜์  ๋ฒ„์ „์˜ ๋ชฉ์ ์€ ๋ฒ„์ „๋งŒ ๋ณด๊ณ ๋„ ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ๋Š”์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์œ ์˜์  ๋ฒ„์ „์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

์ฃผ, ๋ถ€, ์ˆ˜(Major, Minor, Patch)
  • ์ฃผ: ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” API ๋ณ€๊ฒฝ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
  • ๋ถ€: ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์ง€๋งŒ, ๊ธฐ์กด๊ณผ ํ˜ธํ™˜๋˜๋Š” ๊ฒฝ์šฐ
  • ์ˆ˜: ๋ฒ„๊ทธ ์ˆ˜์ •์ฒ˜๋Ÿผ, ๊ธฐ๋Šฅ์—๋Š” ์˜ํ–ฅ์ด ์—†๊ณ  ํ˜ธํ™˜์„ฑ๋„ ์œ ์ง€๋˜๋Š” ๊ฒฝ์šฐ

๋ฒ„์ „์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์•ฝ์†ํ•˜์—ฌ, ๋ฒ„์ „ ์ˆซ์ž๋งŒ ๋ณด์•„๋„ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ์‹œ ์˜ˆ์ƒ๋˜๋Š” ์œ„ํ—˜๋„๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์œ ์˜์  ๋ฒ„์ „์˜ ๊ตฌ์ฒด์  ๋ช…์„ธ

https://semver.org/

 

Semantic Versioning 2.0.0

Semantic Versioning spec and website

semver.org

 

1. ๊ณต๊ฐœ API ์„ ์–ธ

์œ ์˜์  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋Š” ๊ณต๊ฐœ API๋ฅผ ๋ฐ˜๋“œ์‹œ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค. ์ด API๋Š” ์ฝ”๋“œ์— ์ •์˜๋  ์ˆ˜๋„ ์žˆ๊ณ , ์˜ค์ง ๋ฌธ์„œ์ƒ์œผ๋กœ ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์–ด๋–ค ๋ฐฉ์‹์ด๋“  API๋Š” ์ •ํ™•ํ•˜๊ณ  ํฌ๊ด„์ ์ด์–ด์•ผ ํ•œ๋‹ค.

 

 

2. ๋ฒ„์ „ ํ˜•์‹

์ผ๋ฐ˜ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋Š” ๋ฐ˜๋“œ์‹œ ์ฃผ.๋ถ€.์ˆ˜ (X.Y.Z) ํ˜•์‹์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฉฐ, X, Y, Z๋Š” 0 ์ด์ƒ์˜ ์ •์ˆ˜์ด๋‹ค. ์ˆซ์ž์—๋Š” ์„ ํ–‰ 0์ด ์žˆ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์€ ์ˆ˜์น˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ: 1.9.0 → 1.10.0 → 1.11.0

 

 

3. ๋ฒ„์ „ ๋ถˆ๋ณ€์„ฑ

์ผ๋‹จ ๋ฒ„์ „์ด ๋ฆด๋ฆฌ์Šค๋˜๋ฉด, ํ•ด๋‹น ๋ฒ„์ „์˜ ๋‚ด์šฉ์€ ์ ˆ๋Œ€ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค.๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ฐ˜๋“œ์‹œ ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ๋ฆด๋ฆฌ์Šค
ํ•ด์•ผ ํ•œ๋‹ค.

 

4. ์ดˆ๊ธฐ ๊ฐœ๋ฐœ (์ฃผ ๋ฒ„์ „ 0)

0.y.z ํ˜•ํƒœ์˜ ๋ฒ„์ „์€ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ๋‹จ๊ณ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์–ธ์ œ๋“ ์ง€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.๊ณต๊ฐœ API๋Š” ์•ˆ์ •์ ์ด์ง€ ์•Š๋‹ค๊ณ  ๊ฐ„์ฃผํ•ด์•ผ ํ•œ๋‹ค.

 

5. ๊ณต๊ฐœ API ์ •์˜ ๊ธฐ์ค€์ 

๋ฒ„์ „ 1.0.0์€ ๊ณต๊ฐœ API๊ฐ€ ์ •์˜๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ ์ดํ›„์˜ ๋ฒ„์ „ ์ฆ๋ถ„์€ API์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.

 

6. ์ˆ˜ ๋ฒ„์ „ ์ฆ๊ฐ€ ์กฐ๊ฑด

์ˆ˜ ๋ฒ„์ „ (x.y.Z, ๋‹จ x > 0)์€ ๋‹ค์Œ์˜ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ์ฆ๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค:
- API์™€ ํ˜ธํ™˜๋˜๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ.์—ฌ๊ธฐ์„œ ๋ฒ„๊ทธ ์ˆ˜์ •์ด๋ž€ ์ž˜๋ชป๋œ ๋™์ž‘์„ ๊ณ ์น˜๋Š” ๋‚ด๋ถ€ ๋ณ€๊ฒฝ์„ ์˜๋ฏธํ•œ๋‹ค.

 

7. ๋ถ€ ๋ฒ„์ „ ์ฆ๊ฐ€ ์กฐ๊ฑด

๋ถ€ ๋ฒ„์ „ (x.Y.z, ๋‹จ x > 0)์€ ๋‹ค์Œ์˜ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ์ฆ๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค:
- API์— ํ˜ธํ™˜๋˜๋Š” ๊ธฐ๋Šฅ์ด ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ
- ๊ณต๊ฐœ API์˜ ์ผ๋ถ€๊ฐ€ deprecated(์‚ฌ์šฉ ์ค‘๋‹จ ์˜ˆ์ •) ์œผ๋กœ ํ‘œ์‹œ๋œ ๊ฒฝ์šฐ

๋‹ค์Œ์˜ ๊ฒฝ์šฐ์—๋Š” ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค(MAY):
- ๋‚ด๋ถ€ ์ฝ”๋“œ์— ์˜๋ฏธ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋‚˜ ๊ฐœ์„ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ

๋ถ€ ๋ฒ„์ „ ์ฆ๊ฐ€ ์‹œ ์ˆ˜ ๋ฒ„์ „์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค.

 

8. ์ฃผ ๋ฒ„์ „ ์ฆ๊ฐ€ ์กฐ๊ฑด

์ฃผ ๋ฒ„์ „ (X.y.z, ๋‹จ X > 0)์€ ๋‹ค์Œ์˜ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ์ฆ๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค:
- API์— ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ

๋˜ํ•œ ๋‹ค์Œ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค:
- ๋ถ€ ๋ฐ ์ˆ˜ ์ˆ˜์ค€์˜ ๋ณ€๊ฒฝ

์ฃผ ๋ฒ„์ „ ์ฆ๊ฐ€ ์‹œ ๋ถ€์™€ ์ˆ˜ ๋ฒ„์ „์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค.

 

 

9. ํ”„๋ฆฌ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „

ํ”„๋ฆฌ๋ฆด๋ฆฌ์Šค(pre-release) ๋ฒ„์ „์€ ์ˆ˜ ๋ฒ„์ „ ๋’ค์— ํ•˜์ดํ”ˆ(-) ์„ ๋ถ™์ด๊ณ , ์ (.)์œผ๋กœ ๊ตฌ๋ถ„๋œ ์‹๋ณ„์ž ์‹œํ€€์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ‘œํ˜„ํ•œ๋‹ค.
์ด ์‹๋ณ„์ž๋Š” ASCII ์˜์ˆซ์ž ๋ฐ ํ•˜์ดํ”ˆ([0-9A-Za-z-])๋งŒ ํฌํ•จํ•ด์•ผ ํ•˜๋ฉฐ, ๋น„์–ด ์žˆ์„ ์ˆ˜ ์—†๋‹ค. ์ˆซ์ž ์‹๋ณ„์ž๋Š” ์„ ํ–‰ 0์„ ํฌํ•จํ•  ์ˆ˜ ์—†๋‹ค. ํ”„๋ฆฌ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „์€ ์ผ๋ฐ˜ ๋ฒ„์ „๋ณด๋‹ค ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋Š” ํ•ด๋‹น ๋ฒ„์ „์ด ๋ถˆ์•ˆ์ •ํ•˜๋ฉฐ, ์ผ๋ฐ˜ ๋ฒ„์ „์ด ๋ณด์žฅํ•˜๋Š” ํ˜ธํ™˜์„ฑ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์˜ˆ์‹œ:1.0.0-alpha,1.0.0-alpha.11.0.0-0.3.71.0.0-x.7.z.921.0.0-x-y-z.--

 

 

10. ๋นŒ๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

๋นŒ๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์ˆ˜ ๋˜๋Š” ํ”„๋ฆฌ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „ ๋’ค์— ํ”Œ๋Ÿฌ์Šค ๊ธฐํ˜ธ(+) ์™€ ์ (.)์œผ๋กœ ๊ตฌ๋ถ„๋œ ์‹๋ณ„์ž ์‹œํ€€์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹๋ณ„์ž๋Š” ASCII ์˜์ˆซ์ž ๋ฐ ํ•˜์ดํ”ˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋น„์–ด ์žˆ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ๋นŒ๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋ฒ„์ „ ์šฐ์„ ์ˆœ์œ„ ๊ณ„์‚ฐ์—์„œ ๋ฌด์‹œ๋œ๋‹ค. ์ฆ‰, ๋นŒ๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ๋‹ค๋ฅธ ๋‘ ๋ฒ„์ „์€ ๋™์ผํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค.

์˜ˆ์‹œ: 1.0.0-alpha+001, 1.0.0+20130313144700, 1.0.0-beta+exp.sha.5114f851.0.0+21AF26D3----117B344092BD

 

11. ์šฐ์„ ์ˆœ์œ„ ๊ทœ์น™

๋ฒ„์ „ ๊ฐ„์˜ ์šฐ์„ ์ˆœ์œ„(Precedence) ๋Š” ์ •๋ ฌ ๊ธฐ์ค€์— ๋”ฐ๋ผ ๋น„๊ต๋œ๋‹ค.์šฐ์„ ์ˆœ์œ„ ๊ณ„์‚ฐ ์‹œ ๋ฒ„์ „์€ ๋‹ค์Œ ์ˆœ์„œ๋กœ ๋ถ„ํ•ดํ•˜์—ฌ ๋น„๊ตํ•œ๋‹ค:์ฃผ → ๋ถ€ → ์ˆ˜ → ํ”„๋ฆฌ๋ฆด๋ฆฌ์Šค๋นŒ๋“œ

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋น„๊ต ๋Œ€์ƒ์ด ์•„๋‹ˆ๋‹ค.
- ์ฃผ, ๋ถ€, ์ˆ˜๋Š” ํ•ญ์ƒ ์ˆซ์ž์ ์œผ๋กœ ๋น„๊ตํ•œ๋‹ค. ์˜ˆ์‹œ:1.0.0 < 2.0.0 < 2.1.0 < 2.1.1
- ์ฃผ, ๋ถ€, ์ˆ˜๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ, ํ”„๋ฆฌ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „์€ ์ผ๋ฐ˜ ๋ฒ„์ „๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ๋‹ค.์˜ˆ์‹œ:1.0.0-alpha < 1.0.0
- ๋™์ผํ•œ ์ฃผ, ๋ถ€, ์ˆ˜ ๋ฒ„์ „์˜ ๋‘ ํ”„๋ฆฌ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „์€ ์‹๋ณ„์ž๋ฅผ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋น„๊ตํ•˜์—ฌ ์ฒซ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๋ถ€๋ถ„์—์„œ ์ˆœ์„œ๋ฅผ ์ •ํ•œ๋‹ค.
   - ๋ชจ๋‘ ์ˆซ์ž์ธ ๊ฒฝ์šฐ: ์ˆซ์ž์ ์œผ๋กœ ๋น„๊ต
   - ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ: ASCII ์‚ฌ์ „์ˆœ ๋น„๊ต
   - ์ˆซ์ž ์‹๋ณ„์ž๋Š” ๋ฌธ์ž ์‹๋ณ„์ž๋ณด๋‹ค ํ•ญ์ƒ ๋‚ฎ๋‹ค
   - ์•ž์˜ ์‹๋ณ„์ž๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฒฝ์šฐ, ์‹๋ณ„์ž ๊ฐœ์ˆ˜๊ฐ€ ๋” ๋งŽ์€ ์ชฝ์ด ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„

์˜ˆ์‹œ:1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0

 

 

์œ ์˜์  ๋ฒ„์ „์„ ์ •ํ™•ํ•˜๊ฒŒ ๋งค์นญํ•˜๋Š” ์ •๊ทœ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ ๋ณดํ†ต์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ •๊ทœํ‘œํ˜„์‹์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹จ semver ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$

 

๐Ÿ’ก์œ ์˜์  ๋ฒ„์ „์€ ๋ช…์„ธ์ด์ž ๊ทœ์น™์ด์ง€๋งŒ, ์ด๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๊ธฐ์ˆ ์  ์žฅ์น˜๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ๋”ฐ๋ฅผ์ง€ ์—ฌ๋ถ€๋Š” ์ „์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž์˜ ํŒ๋‹จ๊ณผ ์ฑ…์ž„์— ๋‹ฌ๋ ค ์žˆ๋‹ค.

 

์œ ์˜์  ๋ฒ„์ „ ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž

npm์—์„œ ์˜์กด์„ฑ ๋ฒ„์ „ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„์ „ ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž๋“ค์ด๋‹ค. package.json์˜ depedencies์•ˆ์—์„œ ๋ฒ„์ „์„ ์ง€์ •ํ•  ๋•Œ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค. ์•ž์œผ๋กœ ์“ธ ์œ ์˜์  ๋ฒ„์ „ ์‚ฌ๊ณ ์‚ฌ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ๋„ ํ•„์ˆ˜์ ์ธ ์—ฐ์‚ฐ์ž๋“ค์ด๋‹ค. 

 

์—ฐ์‚ฐ์ž  ์˜๋ฏธ  ์˜ˆ์‹œ  ์„ค์น˜ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„
^ ์ตœ๋Œ€ํ•œ ์ตœ์‹  ๋ฒ„์ „ ํ—ˆ์šฉ (MAJOR ๊ณ ์ •) ^1.2.3 >=1.2.3 <2.0.0
~ ํŒจ์น˜ ๋ฒ„์ „๋งŒ ์ž์œ ๋กญ๊ฒŒ ์—…๋ฐ์ดํŠธ (MINOR ๊ณ ์ •) ~1.2.3 >=1.2.3 <1.3.0
>= ์ด ๋ฒ„์ „ ์ด์ƒ >=1.2.3 1.2.3 ์ด์ƒ
<= ์ด ๋ฒ„์ „ ์ดํ•˜ <=1.2.3 1.2.3 ์ดํ•˜
> ์ดˆ๊ณผ ๋ฒ„์ „๋งŒ ํ—ˆ์šฉ >1.2.3 1.2.4 ์ด์ƒ
< ๋ฏธ๋งŒ ๋ฒ„์ „๋งŒ ํ—ˆ์šฉ <1.2.3 1.2.2 ์ดํ•˜
- (๋ฒ”์œ„) ๋ฒ„์ „ ๋ฒ”์œ„ ์ง€์ • 1.2.3 - 1.5.0 >=1.2.3 <=1.5.0
* ๋ชจ๋“  ๋ฒ„์ „ ํ—ˆ์šฉ * ๋ชจ๋“  ๋ฒ„์ „ ๊ฐ€๋Šฅ
๋นˆ ๋ฌธ์ž์—ด ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „ ์‚ฌ์šฉ "" npm install ์‹œ ์ตœ์‹  ๋ฒ„์ „

 

์œ ์˜์  ๋ฒ„์ „ ์‚ฌ๊ณ ์‚ฌ๋ก€

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

 

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

 

left-pad: 11์ค„ ํŒจํ‚ค์ง€๊ฐ€ ๋งŒ๋“  ๋Œ€ํ˜ผ๋ž€

2016๋…„, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒํƒœ๊ณ„์—์„œ ๋ฏฟ๊ธฐ ํž˜๋“  ์ผ์ด ๋ฒŒ์–ด์กŒ๋‹ค. left-pad๋ผ๋Š” ์ด๋ฆ„์˜ npm ํŒจํ‚ค์ง€๊ฐ€ ์‚ญ์ œ๋˜๋ฉด์„œ ์ˆ˜๋งŽ์€ ๋นŒ๋“œ๊ฐ€ ๊นจ์ง€๊ณ , ์ „ ์„ธ๊ณ„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒํƒœ๊ณ„๊ฐ€ ์ž ์‹œ ๋งˆ๋น„๋˜๋Š” ์‚ฌํƒœ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

 

left-pad๋Š” ๋ฌธ์ž์—ด ์™ผ์ชฝ์— ์ง€์ •ํ•œ ๊ธธ์ด๋งŒํผ ๋ฌธ์ž(์ฃผ๋กœ ๊ณต๋ฐฑ ๋˜๋Š” 0)์„ ์ฑ„์›Œ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋‹จ 11์ค„์งœ๋ฆฌ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํŒจํ‚ค์ง€์˜€๋‹ค. ๊ธฐ๋Šฅ์€ ๋‹จ์ˆœํ–ˆ์ง€๋งŒ, ๋ฌธ์ œ๋Š” ์ด ํŒจํ‚ค์ง€๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๊ณณ์ด ๋„ˆ๋ฌด ๋งŽ์•˜๋‹ค๋Š” ์ ์ด๋‹ค.

 

๋Œ€ํ‘œ์ ์œผ๋กœ ์œ ๋ช… ์œ ํ‹ธ๋ฆฌํ‹ฐ ํŒจํ‚ค์ง€ line-numbers๊ฐ€ left-pad๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ณ , line-numbers๋Š” Babel์˜ ํ•˜์œ„ ํŒจํ‚ค์ง€ ์ค‘ ํ•˜๋‚˜์ธ babel-core-frame์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์—ˆ๋‹ค. 

left-pad์˜ ๊ฐœ๋ฐœ์ž๋Š” kik์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€๋ฅผ npm์— ๋“ฑ๋กํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ "kik"์ด๋ผ๋Š” ๋งค์‹ ์ € ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋Š” Kik์‚ฌ๋กœ๋ถ€ํ„ฐ ํšŒ์‚ฌ์˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์•˜๋Š”๋ฐ, ์ด ๋ฉ”์ผ์ด ๊ฝค๋‚˜ ์ •๋ง ๋งŽ์ด ์•„์ฃผ ๋ถˆ์พŒํ–ˆ๊ณ , ์ด ์™€์ค‘์— npm๋งˆ์ € kik ์ธก์˜ ์†์„ ๋“ค์–ด์ค€ ํ„ฐ๋ผ ์ด์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ž์‹ ์˜ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ npm์—์„œ ์‚ญ์ œํ–ˆ๋‹ค. ์ด ์ค‘์—๋Š” left-pad๋„ ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์ˆœ๊ฐ„๋ถ€ํ„ฐ left-pad๋ฅผ ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€, ๋นŒ๋“œ ํˆด๋“ค์ด ์—ฐ์‡„์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฐ›์•„, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒํƒœ๊ณ„ ์ „๋ฐ˜์ด ๋งˆ๋น„๊ฐ€ ๋˜์—ˆ๋‹ค.

 

์‚ฌ๊ฑด์˜ ์ „๋ง

 

Kik, Left-Pad, and NPM — Oh My!

In case you haven’t heard, a dispute between Kik Messenger and left-pad creator Azer lead to a tremendous amount of builds issues the other…

medium.com

 

์ด ์‚ฌ๊ฑด์„ ๊ณ„๊ธฐ๋กœ npm์€ ํŒจํ‚ค์ง€ ์‚ญ์ œ์— ๋Œ€ํ•œ ๊นŒ๋‹ค๋กœ์šด ์ •์ฑ…์„ ๋„์ž…ํ–ˆ๋‹ค.

  1. ์˜์กด์„ฑ์ด ์กด์žฌํ•˜๋Š” ํŒจํ‚ค์ง€์˜ ์‚ญ์ œ ์ œํ•œ
  2. ์œ ๋ช… ํŒจํ‚ค์ง€๊ฐ€ ์‚ญ์ œ๋  ๊ฒฝ์šฐ ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๊ฐ€์งœ ํŒจํ‚ค์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ security-holder ํŒจํ‚ค์ง€ ์ถ”๊ฐ€

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ •์ฑ…์ด์—ˆ์ง€๋งŒ,,,,์Šฌํ”„๊ฒŒ๋„ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค. 

 

left-pad๋ฅผ ๋ณต๊ตฌํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์œผ๋‚˜ ์ด ์‚ฌ๊ฑด์€ ์ •๋ง ๋งŽ์€ ์ ๋“ค์„ ์‹œ์‚ฌํ•œ๋‹ค. ๋ฌธ์ œ์˜ ๋ณธ์งˆ์€ ๋‹จ์ˆœํ•˜๋‹ค. kik์‚ฌ์˜ ๋ฉ”์ผ์ด ์กฐ๊ธˆ๋งŒ ๋” ์ •์ค‘ํ–ˆ๋”๋ผ๋ฉด, npm์ด ๊ฐœ๋ฐœ์ž์˜ ์†์„ ๋“ค์–ด์ฃผ์—ˆ๋‹ค๋ฉด-์ด๋ผ๋Š” if๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ทผ๋ณธ์ ์œผ๋กœ๋Š” "์ž‘๊ณ  ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ๋„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ๋ณด๋‹ค๋Š” ํŒจํ‚ค์ง€๋กœ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ด€ํ–‰"์ด ๋ฌธ์ œ๊ฐ€ ๋œ ๊ฒƒ์ด๋‹ค. npm ์ƒํƒœ๊ณ„์—์„œ๋Š” ์ง์ ‘ ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€ ๋ฟ ์•„๋‹ˆ๋ผ, ๊ทธ ํŒจํ‚ค์ง€๊ฐ€ ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€์˜ ์˜์กด ํŒจํ‚ค์ง€๊นŒ์ง€ ์ž๋™์œผ๋กœ ์„ค์น˜๋œ๋‹ค. ์ด๋Ÿฐ ๊นŠ์€ ์˜์กด ์ฒด์ธ ์†์—์„œ, ๊ทผ๊ฐ„์ด ๋˜๋Š” ๋‹จ ํ•˜๋‚˜์˜, 11์ค„์งœ๋ฆฌ ๋‹จ์ˆœํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์„ ๋ถ„์ธ๋ฐ๋„ ์ „์ฒด ์‹œ์Šคํ…œ์ด ์—ฐ์‡„์ ์œผ๋กœ ๋งˆ๋น„๋˜์–ด๋ฒ„๋ฆฐ ๊ฒƒ์ด๋‹ค. 

 

everything: npm ์‚ญ์ œ ๋ฒ„ํŠผ ์••์ˆ˜ ์‚ฌ๊ฑด

left-pad ์‚ฌ๊ฑด ์ดํ›„, npm์€ ์˜์กด์„ฑ์ด ์กด์žฌํ•˜๋Š” ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์‚ญ์ œ๋ฅผ ์ œํ•œํ•˜๋Š” ์ •์ฑ…์„ ๋„์ž…ํ–ˆ๋‹ค. ์ด๋Š” ์ค‘์š”ํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์‚ญ์ œ๋˜์–ด ์ƒํƒœ๊ณ„ ์ „์ฒด๊ฐ€ ํ”๋“ค๋ฆฌ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์น˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ •์ฑ…์€ ์ƒˆ๋กœ์šด ํ—ˆ์ ์„ ๋งŒ๋“ค์–ด๋ƒˆ๋‹ค.

 

๋งŒ์•ฝ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์˜์กด์„ฑ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค๋ฉด...?

 

์ด๋Ÿฐ ๊ฐœ์ฉŒ๋Š” ๋ฐœ์ƒ์„ ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์žˆ์—ˆ๊ณ , ์‹ค์ œ๋กœ ์‹œ๋„๊นŒ์ง€ ํ–ˆ๊ณ , ์‹ฌ์ง€์–ด ์„ฑ๊ณตํ–ˆ๋‹ค.

 

everything ํŒจํ‚ค์ง€๋Š” npm์— ์กด์žฌํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์˜์กด์„ฑ์œผ๋กœ ์„ค์ •ํ•œ ํ›„ ๋ฐฐํฌ๋˜์—ˆ๊ณ , ์‹ฌ์ง€์–ด ๋ฒ„์ „์„ *๋กœ ์„ค์ •ํ•˜์—ฌ ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ๋ฒ„์ „์ด ์˜์กด๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด๋ƒˆ๋‹ค. everthing ํŒจํ‚ค์ง€๊ฐ€ ์กด์žฌํ•˜๋Š” ํ•œ, ๋Œ€๋ถ€๋ถ„์˜ ํŒจํ‚ค์ง€๊ฐ€ ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฒŒ์–ด์ง„ ๊ฒƒ์ด๋‹ค.

 

์žฅ๋‚œ์Šค๋Ÿฌ์šด ์‹œ๋„์˜€์œผ๋‚˜, npm์ด ์˜์กด์„ฑ ์‚ญ์ œ ์ œํ•œ ์ •์ฑ…์„ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์ ์šฉํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •ํ™•ํ•˜๊ฒŒ ์งš์–ด๋‚ธ ์…ˆ์ด ๋˜์—ˆ๋‹ค. npm ์ƒํƒœ๊ณ„๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค‘์•™ํ™”๋œ ๊ตฌ์กฐ์— ์˜์กดํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์ ๋‚˜๋ผํ•˜๊ฒŒ ๋ณด์—ฌ์ค€ ์‚ฌ๋ก€์ด๋‹ค.

 

event-stream: npm์€ ์•ˆ์ „ํ•œ๊ฐ€

2018๋…„ ์ธ๊ธฐ ์ŠคํŠธ๋ฆผ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํŒจํ‚ค์ง€ event-stream์— ์•…์„ฑ์ฝ”๋“œ๊ฐ€ ์‹ฌ์–ด์ง„ ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

 

event-stream์€ Node.js์—์„œ ๋น„๋™๊ธฐ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์œ ๋ช… ์œ ํ‹ธ๋ฆฌํ‹ฐ ํŒจํ‚ค์ง€๋กœ, ์ˆ˜๋งŽ์€ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง๊ฐ„์ ‘์ ์œผ๋กœ ์˜์กดํ•˜๋Š” ์ธ๊ธฐ ํŒจํ‚ค์ง€์˜€๋‹ค. 

 

event-stream์˜ ์ตœ์ดˆ ๊ฐœ๋ฐœ์ž๋Š” ๋ช‡ ๋…„๊ฐ„ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์ง„ํ–‰ํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ, ์–ด๋А ๋‚  ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์ด์–ด๊ฐ€๊ฒ ๋‹ค๋Š” ์˜์‚ฌ๋ฅผ ๋ฐํ˜”๋‹ค. ์› ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ์ˆ˜๋ฝํ•˜๊ณ  ์†Œ์œ ๊ถŒ์„ ์–‘๋„ํ–ˆ๋‹ค.

 

์–‘๋„๋ฐ›์€ ๊ฐœ๋ฐœ์ž๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์—์„œ flatmap-streamd์ด๋ผ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์˜์กด์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ, ์ด flatmap-stream ๋‚ด๋ถ€์— ์•”ํ˜ธํ™”๋œ ๋ฐฑ๋„์–ด ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด์„œ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋‹ค. event-stream ์ž์ฒด์—๋Š” ์•„๋ฌด ๋ฌธ์ œ ์—†์–ด ๋ณด์˜€์ง€๋งŒ, ์ˆ˜๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ ๋น„ํŠธ์ฝ”์ธ ํƒˆ์ทจ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ์˜์กดํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. 

 

๋Œ€๋ถ€๋ถ„์˜ ํŒจํ‚ค์ง€๊ฐ€ ^, ~์— ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ๋…ธ๋ฆฐ ์•…์˜์ ์ธ ํ–‰์œ„์˜€๋‹ค. ์˜๋„์ ์œผ๋กœ ์ˆ˜ ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ž๋™ ์„ค์น˜๋ฅผ ์œ ๋„ํ–ˆ์œผ๋ฉฐ, ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด ํƒˆ์ทจ ์ฝ”๋“œ์— ๋…ธ์ถœ๋œ ๊ฒƒ์ด๋‹ค. npm ํŒจํ‚ค์ง€ ์ƒํƒœ๊ณ„์—์„œ ์‹ ๋ขฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์•ˆ ์œ„ํ˜‘์œผ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š”์ง€, ์œ ์˜์  ๋ฒ„์ „๊ด€๋ฆฌ ๊ทœ์น™์ด ์–ด๋–ป๊ฒŒ ์•…์šฉ๋  ์ˆ˜ ์ž‡๋Š”์ง€ ๋ณด์—ฌ์ค€ ๋‹จ์ ์ธ ์˜ˆ์ด๋‹ค.


์ฑ…์—์„œ๋Š” ์ด๋ณด๋‹ค ๋” ๋งŽ์€ ์‚ฌ๋ก€๋“ค์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ์ง€๋งŒ, ํŠนํžˆ ์ธ์ƒ ๊นŠ์—ˆ๋˜ ์‚ฌ๋ก€๋“ค๋งŒ ์ •๋ฆฌํ•ด๋ณด์•—๋‹ค. ์ผ๋ถ€ ์‚ฌ๊ฑด์€ ์œ ์˜์  ๋ฒ„์ „ ๊ทธ ์ž์ฒด๋ณด๋‹ค๋Š” npm ์ƒํƒœ๊ณ„์˜ ๊ตฌ์กฐ์  ์ทจ์•ฝ์ ์—์„œ ๋น„๋กฏ๋œ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ๋„ ํ•˜์ง€๋งŒ, ๊ฒฐ๊ตญ ๋ช…์„ธ์ผ ๋ฟ์ธ ์œ ์˜์  ๋ฒ„์ „ ๊ทœ์น™์ด ๊ฐ•์ œ๋ ฅ์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ํ˜„์‹ค, ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์•…์šฉํ•˜๊ฑฐ๋‚˜ ๋ฌด์‹œํ–ˆ์„ ๋•Œ ์–ผ๋งˆ๋‚˜ ํฐ ํŒŒ์žฅ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋“ค์ด์—ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์‚ฌ๋ก€๋“ค์„ ํ†ตํ•ด, ๊ฐœ๋ฐœ์ž ๊ฐœ์ธ์˜ ์ฑ…์ž„์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด๊ฒŒ๋œ ๊ฒƒ ๊ฐ™๋‹ค.

 

์•ˆ์ „ํ•˜๊ฒŒ npm ์“ฐ๊ธฐ

์œ„์—์„œ ๋ดค๋“ฏ, ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์œ ์˜์  ๋ฒ„์ „์„ ์—„๊ฒฉํžˆ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ๋•Œ๋กœ๋Š” ์ด๋ฅผ ์•…์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊นŒ์ง€ ์กด์žฌํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€๋ฅผ ๋„์ž…ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์ฃผ์˜ ๊นŠ๊ฒŒ ๊ฒ€ํ† ํ•˜๋Š” ์Šต๊ด€์ด ํ•„์š”ํ•˜๋‹ค. 

 

md ํŒŒ์ผ, ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ๊ผผ๊ผผํžˆ ์‚ดํŽด๋ณด๊ณ , ํ˜ธํ™˜์„ฑ์ด๋‚˜ ๋ณด์•ˆ ์ธก๋ฉด์—์„œ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€๋ฅผ ์Šค์Šค๋กœ ์ ๊ฒ€ํ•ด์•ผ ํ•œ๋‹ค.

 

๋˜ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์–ด๋””๊นŒ์ง€, ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉํ• ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒํƒœ๊ณ„์—์„œ๋Š” left-pad์ฒ˜๋Ÿผ ๊ทนํžˆ ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ์กฐ์ฐจ ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์œ ํ†ต๋˜๋Š” ์ผ์ด ํ”ํ•˜๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์žฅ์ ์ด๊ธฐ๋„ ํ•˜์ง€๋งŒ, ๊ณง ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ๊ณผ ๋ณด์•ˆ ์œ„ํ˜‘์˜ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŒจ์บ์ง€๋ฅผ ๋„์ž…ํ•˜๊ธฐ ์ „, ๋จผ์ € ์ƒ๊ฐ์„ ํ•ด๋ณด์ž.  

  • ์ด ํŒจํ‚ค์ง€๋Š” ์ •๋ง๋กœ ๋Œ€์ฒด ๋ถˆ๊ฐ€๋Šฅํ•œ๊ฐ€? 
  • ์ถฉ๋ถ„ํžˆ ๊ฒ€์ฆ๋œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์‹ ๋ขฐ๋„์™€ ์œ ์ง€ ๊ด€๋ฆฌ ๊ธฐ๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€?
  • ์˜์กด์„ฑ ํŠธ๋ฆฌ๊ฐ€ ๋‚ฉ๋“ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์ธ์ง€, ๊ณผ๋„ํ•˜๊ฒŒ ๋˜๋Š” ์ˆ˜์ƒํ•˜๊ฒŒ ์–ฝํ˜€์žˆ์ง€๋Š” ์•Š์€๊ฐ€? 

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

 


์œ ์šฉํ•œ ์‚ฌ์ดํŠธ

 

npm

 

npm | Home

Bring the best of open source to you, your team, and your company Relied upon by more than 17 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java

www.npmjs.com

 

Bundlephobia-ํŒจํ‚ค์ง€ ํฌ๊ธฐ ์ •๋ณด ํ™•์ธ

 

Bundlephobia | Size of npm dependencies

Bundlephobia helps you find the performance impact of npm packages. Find the size of any javascript package and its effect on your frontend bundle.

bundlephobia.com

 

npm trends

unpkg

 

UNPKG

UNPKG serves metadata about the files in a package when you append ?meta to any package root or subdirectory URL. This will return a JSON object with information about the files in that directory, including path, size, type, and subresource integrity value

www.unpkg.com

snyk

 

Snyk AI-powered Developer Security Platform | AI-powered AppSec Tool & Security Platform | Snyk

Snyk is the trusted platform for developing fast and securing modern AI-based application development. Book a demo today to build and run secure code with the power of AI.

snyk.io