์ผ๋ฐ˜

NPM Install

NPM์„ ์‚ฌ์šฉํ•˜์—ฌ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • #node
  • #npm
  • #javascript

NPM์„ ์‚ฌ์šฉํ•˜์—ฌ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ์ฃผ์˜ ์‚ฌํ•ญ์„ ๋ชจ๋ฅด๋ฉด ๋‹ค์†Œ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€์ธ ์„ฑ๋ช…

ํ•œ๊ตญ์–ด ์‹ค๋ ฅ์ด ๋ถ€์ ํ•˜์—ฌ ์ด ๊ธ€์ด ๊ตฌ๊ธ€ ๋ฒˆ์—ญ๊ธฐ๋ฅผ ์ฃผ๋กœ ํ™œ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์ •ํ™•ํ•œ ๋ฌธ๋ฒ•๊ณผ ์–ดํœ˜๊ฐ€ ์žˆ์„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์  ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ฆฌ๋ฉฐ, ์ถ”ํ›„์— ๋‹ค์‹œ ๊ฒ€ํ† ํ•˜์—ฌ ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

NPM ์ €์žฅ์†Œ์—์„œ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋Š” npm install๊ณผ npm ci ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

npm install (์ผ๋ฐ˜ ๊ฐœ๋ฐœ)

์ด ๋ช…๋ น์–ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋Šฅ: package.json ํŒŒ์ผ์„ ์ฝ์–ด ์„ค์น˜ํ•  ์ข…์†์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ํŒจํ‚ค์ง€๋ฅผ ์ง€์ •๋œ ๋ฒ”์œ„(์˜ˆ: ^1.2.3) ๋‚ด์˜ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ˆ˜์ • ์‚ฌํ•ญ: ์„ค์น˜ ํ›„ package-lock.json ํŒŒ์ผ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ํŠน์ • ๋ฒ„์ „์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์†๋„: ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ณ  ์ตœ์‹  ๋ฒ„์ „์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์†๋„๊ฐ€ ๋А๋ฆฝ๋‹ˆ๋‹ค.

npm ci (์ž๋™ํ™”๋œ ํ™˜๊ฒฝ)

npm ci์€ "ํด๋ฆฐ ์„ค์น˜(Clean Install)"์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” CI/CD ํ™˜๊ฒฝ์—์„œ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์ข…์†์„ฑ ์„ค์น˜๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋Šฅ: package.json ํŒŒ์ผ์„ ๋ฌด์‹œํ•˜๊ณ  package-lock.json(๋˜๋Š” npm-shrinkwrap.json)์—์„œ ์ง์ ‘ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์—„๊ฒฉ์„ฑ: lockfile์ด ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผ ํ•˜๋ฉฐ, package.json๊ณผ lockfile์ด ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ํด๋ฆฐ ์ƒํƒœ: ์„ค์น˜ ์‹œ์ž‘ ์ „์— node_modules ํด๋”๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•˜์—ฌ ์ƒˆ๋กญ๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์„ค์น˜๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์†๋„: ๋ฒ„์ „ ํ™•์ธ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  lockfile์„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ npm install๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค.

๋™๊ธฐํ™” ์˜ค๋ฅ˜

์ตœ๊ทผ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ npm ci๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

"C:\Windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "D:\agent\_work\_temp\6d22faac-2828-45d6-9ee5-b47ff7afc488.cmd""
npm error code EUSAGE
npm error
npm error `npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.
npm error
npm error Missing: @emnapi/core@1.9.2 from lock file
npm error Missing: @emnapi/runtime@1.9.2 from lock file
npm error Missing: chokidar@5.0.0 from lock file
npm error Missing: chokidar@5.0.0 from lock file
npm error Missing: @types/node@25.6.0 from lock file
npm error Missing: chokidar@5.0.0 from lock file
npm error Missing: @types/node@25.6.0 from lock file
npm error Missing: chokidar@5.0.0 from lock file
npm error
npm error Clean install a project
npm error
npm error Usage:
npm error npm ci
npm error
npm error Options:
npm error [--install-strategy <hoisted|nested|shallow|linked>] [--legacy-bundling]
npm error [--global-style] [--omit <dev|optional|peer> [--omit <dev|optional|peer> ...]]
npm error [--include <prod|dev|optional|peer> [--include <prod|dev|optional|peer> ...]]
npm error [--strict-peer-deps] [--foreground-scripts] [--ignore-scripts] [--no-audit]
npm error [--no-bin-links] [--no-fund] [--dry-run]
npm error [-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]]
npm error [-ws|--workspaces] [--include-workspace-root] [--install-links]
npm error
npm error aliases: clean-install, ic, install-clean, isntall-clean
npm error
npm error Run "npm help ci" for more info
npm error A complete log of this run can be found in: C:\Users\User\AppData\Local\npm-cache\_logs\2026-04-10T05_56_48_557Z-debug-0.log
##[error]Cmd.exe exited with code '1'.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ package-lock.json ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ณ  npm install์„ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ž ๊ธˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ CI/CD ํ™˜๊ฒฝ์— ํ‘ธ์‹œํ•˜์—ฌ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋น„๊ต ์š”์•ฝ

ํŠน์ง•npm installnpm ci
์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋กœ์ปฌ ๊ฐœ๋ฐœ, ํŒจํ‚ค์ง€ ์ถ”๊ฐ€CI/CD, ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ, ํŒ€ ๋™๊ธฐํ™”
Lockfile ์ข…์†์„ฑ์ƒ์„ฑ ๋˜๋Š” ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅํ•„์ˆ˜, ์ˆ˜์ • ๋ถˆ๊ฐ€
๋ฒ„์ „ ํ™•์ธ์œ ์—ฐํ•จ(SemVer ๋ฒ”์œ„ ์ค€์ˆ˜)์—„๊ฒฉํ•จ(Lockfile์— ์ •ํ™•ํ•œ ๋ฒ„์ „ ์œ ์ง€)
node_modules๊ธฐ์กด ํŒŒ์ผ ์ถ”๊ฐ€/์—…๋ฐ์ดํŠธ์‚ญ์ œ ํ›„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์„ค์น˜
์žฌํ˜„์„ฑ๋‚ฎ์Œ(๋ฒ„์ „ ๋ณ€๋™ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ)๋†’์Œ(ํ™•์ •์ ์ธ ๋นŒ๋“œ)

์ž์„ธํ•œ ๊ธฐ์ˆ ์  ๋‚ด์šฉ์€ npm Docs ํฌํ„ธ์˜ npm-install ๋ฐ npm-ci ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ฐœ๋ฐœ ์ข…์†์„ฑ vs ์ข…์†์„ฑ

dependencies๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, devDependencies๋Š” ๊ฐœ๋ฐœ ๋˜๋Š” ๋นŒ๋“œ ๊ณผ์ •์—์„œ๋งŒ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ๋˜๋Š” ๋„๊ตฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํ•„์š”์— ๋”ฐ๋ผ dependencies ๋˜๋Š” devDependencies๋งŒ ์„ ํƒ์ ์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ๋ช…๋ น์–ด๋Š” node_modules ํด๋”์— ์žˆ๋Š” ์ข…์†์„ฑ ํŒŒ์ผ๋งŒ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

npm install --production
# ๋˜๋Š”
npm install --omit=dev

package-lock.json VS shrinkwrap.json

Shrinkwrap์€ package-lock.json์˜ ๊ณต๊ฐœ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ NPM์— ๊ฒŒ์‹œ๋˜์ง€๋งŒ, package-lock.json ์›๋ณธ์€ ๊ฒŒ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Shrinkwrap์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒจํ‚ค์ง€ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ด ์„ค์น˜๋œ ์ข…์†์„ฑ๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

npm shrinkwrap ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด package-lock.json ํŒŒ์ผ์„ shrinkwrap.json ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ NPM 2-4 ๋ฒ„์ „๊ณผ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Shrinkwrap์„ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฉฐ, ๊ธฐ์กด์˜ package-lock.json๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ „์— CI ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ์—์„œ shrinkwrap์„ ์‚ฌ์šฉํ•œ ์ ์ด ์žˆ๋Š”๋ฐ, ๋” ๋‚˜์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

Doumbouya, S., Ward, B. npm install vs. npm ci.https://www.baeldung.com/ops/npm-install-vs-npm-ci
Amery, M. What is the difference between npm-shrinkwrap.json and package-lock.json?https://stackoverflow.com/questions/44258235/what-is-the-difference-between-npm-shrinkwrap-json-and-package-lock-json