Alert

์ด ๊ธ€์€ Claude Code์˜ ๋„์›€์„ ๋ฐ›์•„ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

TL;DR

์ƒˆ๋กœ์šด CLI ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•  ๋•Œ npm install -g๊ฐ€ ๊ฐ€์žฅ ํ”ํ•œ ์ด์œ ๋Š” ๊ธฐ์ˆ ์  ์šฐ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋„คํŠธ์›Œํฌ ํšจ๊ณผ(Node.js๊ฐ€ ์ด๋ฏธ ๊น”๋ ค ์žˆ์œผ๋‹ˆ๊นŒ)์™€ ๋ฐฐํฌ ๋งˆ์ฐฐ์˜ ์ตœ์†Œํ™” ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ Rust/Go ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐฐํฌ๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋Š˜๊ณ  ์žˆ๊ณ , brewยทcargo-binstallยทmise ๊ฐ™์€ ๋Œ€์•ˆ ์ฑ„๋„๋„ ์„ฑ์ˆ™ํ•ด์ง€๊ณ  ์žˆ๋‹ค. ์ด ๊ธ€์€ npm๋ถ€ํ„ฐ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €, ๋ฉ”ํƒ€ ํˆด ๋งค๋‹ˆ์ €, ์ง์ ‘ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐฐํฌ๊นŒ์ง€ ์ „์ฒด ์ƒํƒœ๊ณ„๋ฅผ ์กฐ๋งํ•œ๋‹ค.


๋™๊ธฐ: ์™œ ์ „๋ถ€ npm install์ธ๊ฐ€

์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์ฐพ์œผ๋ฉด ์„ค์น˜ ๊ฐ€์ด๋“œ์˜ ์ฒซ ์ค„์ด ๊ฑฐ์˜ ํ•ญ์ƒ ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ๋‹ค.

npm install -g some-tool

Claude Code๋„, Vercel CLI๋„, Prettier๋„, ESLint๋„ ์ „๋ถ€ npm์ด๋‹ค. ์‹ฌ์ง€์–ด JavaScript์™€ ์ „ํ˜€ ๊ด€๊ณ„์—†์–ด ๋ณด์ด๋Š” ๋„๊ตฌ๋„ npm์œผ๋กœ ์„ค์น˜ํ•œ๋‹ค. ์ฒ˜์Œ์—” โ€œ์™œ ํ•˜ํ•„ npm์ด์ง€?โ€๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค. brew๋„ ์žˆ๊ณ , cargo๋„ ์žˆ๊ณ , pip๋„ ์žˆ๋Š”๋ฐ ์™œ ์œ ๋… npm์ด CLI ๋„๊ตฌ ๋ฐฐํฌ์˜ ๊ธฐ๋ณธ๊ฐ’์ด ๋˜์—ˆ์„๊นŒ?

๋‹ต์„ ์ฐพ์•„๋ณด๋‹ˆ ๊ธฐ์ˆ ์  ์šฐ์œ„๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๋„คํŠธ์›Œํฌ ํšจ๊ณผ์™€ ๋ฐฐํฌ ๋งˆ์ฐฐ์˜ ๋ฌธ์ œ์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์งˆ๋ฌธ์„ ํŒŒ๊ณ ๋“ค๋‹ค ๋ณด๋‹ˆ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ โ€œ๋„๊ตฌ๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ์€ ์–ด๋–ค ์ฑ„๋„๋กœ ๋ฐฐํฌํ•˜๋Š”๊ฐ€โ€, โ€œ๊ฐ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋Š” ์–ด๋–ค ์ฒ ํ•™์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๋Š”๊ฐ€โ€๋ผ๋Š” ๋” ๋„“์€ ๊ทธ๋ฆผ์ด ๋ณด์ด๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

์ด ๊ธ€์€ ๊ทธ ๊ถ๊ธˆ์ฆ์—์„œ ์ถœ๋ฐœํ•ด ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ƒํƒœ๊ณ„ ์ „์ฒด๋ฅผ ์ •๋ฆฌํ•œ๋‹ค.


1. npm์ด CLI ๋ฐฐํฌ์˜ ๊ธฐ๋ณธ๊ฐ’์ด ๋œ ์ด์œ 

์„ค์น˜ ๊ธฐ๋ฐ˜์ด ์••๋„์ ์ด๋‹ค

npm์€ Node.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋”ธ๋ ค์˜จ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž, ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž, ์‹ฌ์ง€์–ด Python์ด๋‚˜ Go๋ฅผ ์ฃผ๋กœ ์“ฐ๋Š” ๊ฐœ๋ฐœ์ž๋„ ์–ด๋–ค ์ด์œ ๋กœ๋“  Node.js๊ฐ€ ๊น”๋ ค ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—๋Š” 320๋งŒ ๊ฐœ ์ด์ƒ์˜ ํŒจํ‚ค์ง€๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ๊ณ , ์—ฐ๊ฐ„ ์ˆ˜์กฐ ๊ฑด์˜ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋„๊ตฌ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ์ž…์žฅ์—์„œ โ€œ์œ ์ €๊ฐ€ ์ด๋ฏธ ๊ฐ–๊ณ  ์žˆ์„ ํ™•๋ฅ ์ด ๊ฐ€์žฅ ๋†’์€ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €โ€๋ฅผ ๊ณ ๋ฅด๋ฉด npm์ด 1์ˆœ์œ„๊ฐ€ ๋œ๋‹ค.

๋ฐฐํฌ ๋งˆ์ฐฐ์ด ๊ฑฐ์˜ ์—†๋‹ค
# npm ํŒจํ‚ค์ง€ ๋ฐฐํฌ์˜ ์ „์ฒด ๊ณผ์ •
npm init
# ... ์ฝ”๋“œ ์ž‘์„ฑ ...
npm publish

์ด๊ฒŒ ์ „๋ถ€๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๋กœ์Šค์ปดํŒŒ์ผ์ด ํ•„์š” ์—†๊ณ (JS๋Š” ์–ด๋””์„œ๋“  ๋Œ์•„๊ฐ€๋‹ˆ๊นŒ), Homebrew์ฒ˜๋Ÿผ PR ๋ฆฌ๋ทฐ๋ฅผ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๋„ ์—†๊ณ , apt์ฒ˜๋Ÿผ .deb ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค ํ•„์š”๋„ ์—†๋‹ค. ๊ณ„์ • ๋งŒ๋“ค๊ณ  npm publish ํ•œ ์ค„์ด๋ฉด ์ „ ์„ธ๊ณ„์—์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

npx๋ผ๋Š” ํ‚ฌ๋Ÿฌ ๊ธฐ๋Šฅ
# ์„ค์น˜ ์—†์ด ๋ฐ”๋กœ ์‹คํ–‰
npx create-next-app my-app
npx degit user/repo my-project
npx prettier --write .

npx๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ž„์‹œ๋กœ ๋ฐ›์•„์„œ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๊ณ  ๋ฒ„๋ฆฐ๋‹ค. ๊ธ€๋กœ๋ฒŒ ์„ค์น˜๋กœ ์‹œ์Šคํ…œ์„ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š์•„๋„ ๋˜๊ณ , ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „์ด ์‹คํ–‰๋œ๋‹ค. ์ด๋Ÿฐ โ€œ์„ค์น˜ ์—†๋Š” ์‹คํ–‰โ€ ๊ธฐ๋Šฅ์€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์—๋Š” ์—†๊ฑฐ๋‚˜ ์•ฝํ•˜๋‹ค. Python์˜ uvx, pipx๊ฐ€ ๋น„์Šทํ•˜์ง€๋งŒ npm/npx์˜ ๋„๋‹ฌ ๋ฒ”์œ„์—๋Š” ๋ฏธ์น˜์ง€ ๋ชปํ•œ๋‹ค.

๊ฒฐ๊ตญ ๋„คํŠธ์›Œํฌ ํšจ๊ณผ๋‹ค

๊ธฐ์ˆ ์ ์œผ๋กœ ๋” ๋‚˜์€ ๋Œ€์•ˆ์ด ์žˆ์–ด๋„ โ€œ์ด๋ฏธ ๋‹ค ๊น”๋ ค ์žˆ์œผ๋‹ˆ๊นŒโ€๊ฐ€ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์ด์œ ๋‹ค. Claude Code๊ฐ€ npm์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ๊ฒƒ๋„, Anthropic์ด JavaScript ํšŒ์‚ฌ์—ฌ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ€์žฅ ๋งŽ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ€์žฅ ์ ์€ ๋งˆ์ฐฐ๋กœ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


2. ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์˜ ๋ถ„๋ฅ˜

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋Š” ํฌ๊ฒŒ ๋„ค ๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

๋ถ„๋ฅ˜์„ค๋ช…๋Œ€ํ‘œ ์˜ˆ์‹œ
์–ธ์–ด๋ณ„ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €ํŠน์ • ์–ธ์–ด ์ƒํƒœ๊ณ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/๋„๊ตฌ ๋ฐฐํฌnpm, pip, cargo, go install
์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €OS ์ˆ˜์ค€์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ค์น˜brew, apt, scoop, winget
๋ฉ”ํƒ€/์œ ๋‹ˆ๋ฒ„์„ค ํˆด ๋งค๋‹ˆ์ €์—ฌ๋Ÿฌ ๋„๊ตฌ์˜ ๋ฒ„์ „์„ ํ†ตํ•ฉ ๊ด€๋ฆฌmise, aqua, proto, Nix
์ง์ ‘ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐฐํฌํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์—†์ด ๋ฐ”์ด๋„ˆ๋ฆฌ ์ง์ ‘ ์ „๋‹ฌGitHub Releases, curl | sh, Docker

๊ฐ ๋ถ„๋ฅ˜๋Š” ์„œ๋กœ ๊ฒฝ์Ÿํ•˜๊ธฐ๋„ ํ•˜๊ณ  ๋ณด์™„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ripgrep์€ cargo๋กœ๋„, brew๋กœ๋„, apt๋กœ๋„, GitHub Releases์—์„œ ์ง์ ‘ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ๋„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋„๊ตฌ ์ œ์ž‘์ž๊ฐ€ ์—ฌ๋Ÿฌ ์ฑ„๋„์— ๋™์‹œ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.


3. ์–ธ์–ด๋ณ„ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋น„๊ต

npm / npx โ€” ๊ฐ€์žฅ ๋„“์€ ๋„๋‹ฌ ๋ฒ”์œ„
  • ์–ธ์–ด: JavaScript / TypeScript
  • ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ: npmjs.com (320๋งŒ+ ํŒจํ‚ค์ง€)
  • CLI ๋„๊ตฌ ์„ค์น˜: npm install -g <tool> ๋˜๋Š” npx <tool>
  • ์žฅ์ : ์„ค์น˜ ๊ธฐ๋ฐ˜ ์ตœ๋Œ€, npx๋กœ ๋ฌด์„ค์น˜ ์‹คํ–‰, ๋ฐฐํฌ ๋งˆ์ฐฐ ์ตœ์†Œ
  • ๋‹จ์ : Node.js ๋Ÿฐํƒ€์ž„ ํ•„์š”, JS ํŠน์œ ์˜ node_modules ๋ฌด๊ฒŒ๊ฐ
# ๊ธ€๋กœ๋ฒŒ ์„ค์น˜
npm install -g vercel
 
# ์„ค์น˜ ์—†์ด ์‹คํ–‰
npx create-next-app my-app

optionalDependencies ํŒจํ„ด

esbuild, SWC ๊ฐ™์€ ๋„๊ตฌ๋Š” JS๊ฐ€ ์•„๋‹Œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ์ธ๋ฐ๋„ npm์œผ๋กœ ๋ฐฐํฌํ•œ๋‹ค. ํ”Œ๋žซํผ๋ณ„ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ optionalDependencies๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉ์ž OS์— ๋งž๋Š” ๊ฒƒ๋งŒ ์„ค์น˜๋˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. npm์˜ ๋„๋‹ฌ ๋ฒ”์œ„๋ฅผ ํ™œ์šฉํ•˜๋ฉด์„œ๋„ ๋„ค์ดํ‹ฐ๋ธŒ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ ˆ์ถฉ์•ˆ์ด๋‹ค.

pip / pipx / uvx โ€” Python ์ƒํƒœ๊ณ„
  • ์–ธ์–ด: Python
  • ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ: PyPI (60๋งŒ+ ํŒจํ‚ค์ง€)
  • CLI ๋„๊ตฌ ์„ค์น˜: pipx install <tool> ๋˜๋Š” uvx <tool>
  • ์žฅ์ : Python ์‚ฌ์šฉ์ž์ธต ๋„“์Œ, uvx๋Š” ๋งค์šฐ ๋น ๋ฆ„
  • ๋‹จ์ : Python ๋Ÿฐํƒ€์ž„ ํ•„์š”, ์˜์กด์„ฑ ๊ด€๋ฆฌ๊ฐ€ ์—ญ์‚ฌ์ ์œผ๋กœ ๋ณต์žกํ–ˆ์Œ
# pipx โ€” ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์— CLI ๋„๊ตฌ ์„ค์น˜ (๊ณต์‹ ๊ถŒ์žฅ)
pipx install ruff
 
# uvx โ€” Rust ๊ธฐ๋ฐ˜์œผ๋กœ ํ›จ์”ฌ ๋น ๋ฅธ ๋Œ€์•ˆ (pipx ๋Œ€์ฒด)
uvx ruff check .

pip vs pipx vs uvx

  • pip install: ํ˜„์žฌ ํ™˜๊ฒฝ์— ์ง์ ‘ ์„ค์น˜. ์˜์กด์„ฑ ์ถฉ๋Œ ์œ„ํ—˜
  • pipx install: ๋„๊ตฌ๋งˆ๋‹ค ๊ฒฉ๋ฆฌ๋œ ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ. ์•ˆ์ „ํ•˜์ง€๋งŒ ๋А๋ฆผ
  • uvx: pipx์™€ ๊ฐ™์€ ๊ฐœ๋…์ด์ง€๋งŒ Rust ๊ธฐ๋ฐ˜์œผ๋กœ 10~100๋ฐฐ ๋น ๋ฆ„. 2026๋…„ ํ˜„์žฌ ๊ฐ€์žฅ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹
cargo / cargo-binstall โ€” Rust ์ƒํƒœ๊ณ„
  • ์–ธ์–ด: Rust
  • ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ: crates.io
  • CLI ๋„๊ตฌ ์„ค์น˜: cargo install <tool> ๋˜๋Š” cargo binstall <tool>
  • ์žฅ์ : ์‹ฑ๊ธ€ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ถœ๋ ฅ, ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ
  • ๋‹จ์ : cargo install์€ ์†Œ์Šค ์ปดํŒŒ์ผ์ด๋ผ ๋А๋ฆผ, Rust ํˆด์ฒด์ธ ํ•„์š”
# ์†Œ์Šค์—์„œ ์ปดํŒŒ์ผ (๋А๋ฆผ, Rust ํˆด์ฒด์ธ ํ•„์š”)
cargo install ripgrep
 
# ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋‹ค์šด๋กœ๋“œ (๋น ๋ฆ„, ํˆด์ฒด์ธ ๋ถˆํ•„์š”)
cargo binstall ripgrep

cargo-binstall์€ GitHub Releases์—์„œ ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ฐพ์•„ ์„ค์น˜ํ•œ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด cargo install๋กœ ํด๋ฐฑํ•œ๋‹ค. Rust ๋„๊ตฌ์˜ ์ง„์ž… ์žฅ๋ฒฝ์„ ํฌ๊ฒŒ ๋‚ฎ์ถ˜ ๋„๊ตฌ๋‹ค.

go install โ€” ์‹ฑ๊ธ€ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ๊ฐ•์ 
  • ์–ธ์–ด: Go
  • CLI ๋„๊ตฌ ์„ค์น˜: go install github.com/user/tool@latest
  • ์žฅ์ : ์‹ฑ๊ธ€ ์Šคํƒœํ‹ฑ ๋ฐ”์ด๋„ˆ๋ฆฌ, ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ ์—†์Œ
  • ๋‹จ์ : Go ํˆด์ฒด์ธ ํ•„์š”, ์‹ค์งˆ์  ๋ฐฐํฌ์—๋Š” GoReleaser ํ•„์š”
# Go ๋ชจ๋“ˆ์—์„œ ์ง์ ‘ ์„ค์น˜
go install github.com/junegunn/fzf@latest

Go๋Š” ํฌ๋กœ์Šค์ปดํŒŒ์ผ์ด ๊ธฐ๋ณธ ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด์„œ linux/darwin/windows x amd64/arm64 ์กฐํ•ฉ์„ ํ•œ ๋ฒˆ์— ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค. GoReleaser๋ฅผ ์“ฐ๋ฉด GitHub Releases ์—…๋กœ๋“œ, Homebrew formula ์ƒ์„ฑ, Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ๊นŒ์ง€ ์ž๋™ํ™”๋œ๋‹ค.

์–ธ์–ด๋ณ„ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋น„๊ตํ‘œ
ํ•ญ๋ชฉnpmpip/uvxcargogo install
๋Ÿฐํƒ€์ž„ ํ•„์š”Node.jsPythonRust ํˆด์ฒด์ธGo ํˆด์ฒด์ธ
๋ฌด์„ค์น˜ ์‹คํ–‰npxuvx, pipx--
๋ฐ”์ด๋„ˆ๋ฆฌ ์ถœ๋ ฅJS (์ธํ„ฐํ”„๋ฆฌํŒ…)Python (์ธํ„ฐํ”„๋ฆฌํŒ…)๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ
์„ค์น˜ ์†๋„๋น ๋ฆ„uvx ๋น ๋ฆ„ / pip ๋ณดํ†ตbinstall ๋น ๋ฆ„ / install ๋А๋ฆผ๋ณดํ†ต
๋ฐฐํฌ ๋งˆ์ฐฐ๋งค์šฐ ๋‚ฎ์Œ๋‚ฎ์Œ๋‚ฎ์Œ๋‚ฎ์Œ (GoReleaser ํ•„์š”)

4. ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋น„๊ต

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

Homebrew โ€” macOS/Linux ๊ฐœ๋ฐœ์ž์˜ ๊ธฐ๋ณธ
brew install ripgrep
brew install --cask visual-studio-code
  • macOS ๊ฐœ๋ฐœ์ž์˜ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €
  • Linux ์ง€์›(Linuxbrew)๋„ ์„ฑ์ˆ™ํ•ด์ ธ macOS + Linux ์ปค๋ฒ„ ๊ฐ€๋Šฅ
  • 2025๋…„ 11์›” Homebrew 5.0์—์„œ Linux ARM64 ์ง€์› ์ถ”๊ฐ€
  • ์—ฐ๊ฐ„ 2.6์–ต ๊ฑด ์ด์ƒ์˜ formula ์„ค์น˜ ์ด๋ฒคํŠธ (2025-2026 ๊ธฐ์ค€)

Homebrew์— ๋„๊ตฌ๋ฅผ ๋“ฑ๋กํ•˜๋ ค๋ฉด

๋‘ ๊ฐ€์ง€ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋‹ค.

  • homebrew-core: ๊ณต์‹ ์ €์žฅ์†Œ์— PR์„ ๋ณด๋‚ด๊ณ  ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ํ’ˆ์งˆ ๊ธฐ์ค€์ด ๋†’๊ณ  ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
  • ๊ฐœ์ธ tap: homebrew-<name> GitHub ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค๊ณ  formula๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค. ๋ฆฌ๋ทฐ ์—†์ด ๋ฐ”๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅ. GoReleaser๊ฐ€ ์ด ๊ณผ์ •์„ ์ž๋™ํ™”ํ•ด์ค€๋‹ค.
apt / dnf โ€” Linux ๋ฐฐํฌํŒ ๊ธฐ๋ณธ
# Debian/Ubuntu
sudo apt install ripgrep
 
# Fedora/RHEL
sudo dnf install ripgrep
  • OS์— ๊ธฐ๋ณธ ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ์ถ”๊ฐ€ ์„ค์น˜ ๋ถˆํ•„์š”
  • ์‹œ์Šคํ…œ ๊นŠ์ˆ™์ด ํ†ตํ•ฉ๋˜์–ด ์˜์กด์„ฑ ๊ด€๋ฆฌ๊ฐ€ ์ •๊ตํ•จ
  • ๋„๊ตฌ ์ œ์ž‘์ž ์ž…์žฅ์—์„œ๋Š” .deb/.rpm ํŒจํ‚ค์ง€ ๋นŒ๋“œ, GPG ์„œ๋ช…, ์ €์žฅ์†Œ ํ˜ธ์ŠคํŒ… ๋“ฑ ๋ฐฐํฌ ๋งˆ์ฐฐ์ด ๋งค์šฐ ๋†’์Œ
  • ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ๊ฐ€ ๋А๋ ค์„œ ์ตœ์‹  ๋ฒ„์ „ ๋ฐ˜์˜์ด ๋Šฆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ
Windows: Scoop / Chocolatey / winget
# winget โ€” Windows 11 ๊ธฐ๋ณธ ๋‚ด์žฅ
winget install ripgrep
 
# scoop โ€” ๊ฐœ๋ฐœ์ž ์นœํ™”์ , ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ๋ถˆํ•„์š”
scoop install ripgrep
 
# chocolatey โ€” ๊ฐ€์žฅ ํฐ ํŒจํ‚ค์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
choco install ripgrep
ํ•ญ๋ชฉwingetscoopchocolatey
์„ค์น˜ ํ•„์š”Windows 11 ๊ธฐ๋ณธ๋ณ„๋„ ์„ค์น˜๋ณ„๋„ ์„ค์น˜
๊ด€๋ฆฌ์ž ๊ถŒํ•œํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ๋ถˆํ•„์š”ํ•„์š”
ํŒจํ‚ค์ง€ ์ˆ˜8,000+์ค‘๊ฐ„10,000+
์„ฑ๊ฒฉMS ๊ณต์‹๊ฐœ๋ฐœ์ž ์ค‘์‹ฌ, ๊น”๋”๊ธฐ์—… ์ค‘์‹ฌ
์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋น„๊ตํ‘œ
ํ•ญ๋ชฉbrewapt/dnfwingetscoop
ํ”Œ๋žซํผmacOS, LinuxLinuxWindowsWindows
๋ฐฐํฌ ๋งˆ์ฐฐ์ค‘๊ฐ„ (tap์€ ๋‚ฎ์Œ)๋†’์Œ์ค‘๊ฐ„๋‚ฎ์Œ
์—…๋ฐ์ดํŠธ ์†๋„๋น ๋ฆ„๋А๋ฆผ์ค‘๊ฐ„๋น ๋ฆ„
๋Ÿฐํƒ€์ž„ ์š”๊ตฌ์—†์Œ์—†์Œ์—†์Œ์—†์Œ

5. ๋ฉ”ํƒ€ ํˆด ๋งค๋‹ˆ์ €์˜ ๋ถ€์ƒ

์–ธ์–ด๋ณ„ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด์„œ โ€œNode 18, Python 3.12, Go 1.22๋ฅผ ๋™์‹œ์— ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ๋‹คโ€๋Š” ์ˆ˜์š”๊ฐ€ ์ƒ๊ฒผ๋‹ค. ๋ฉ”ํƒ€ ํˆด ๋งค๋‹ˆ์ €๋Š” ์—ฌ๋Ÿฌ ๋Ÿฐํƒ€์ž„๊ณผ CLI ๋„๊ตฌ์˜ ๋ฒ„์ „์„ ํ”„๋กœ์ ํŠธ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋„๊ตฌ๋‹ค.

asdf โ†’ mise: ์™œ ๋Œ€์ฒด๋˜๊ณ  ์žˆ๋Š”๊ฐ€
# asdf โ€” ์›์กฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ธฐ๋ฐ˜ ๋ฒ„์ „ ๋งค๋‹ˆ์ €
asdf install nodejs 20.11.0
asdf local nodejs 20.11.0
 
# mise โ€” asdf ํ˜ธํ™˜์ด๋ฉด์„œ Rust ๊ธฐ๋ฐ˜์œผ๋กœ 10~100๋ฐฐ ๋น ๋ฆ„
mise install node@20
mise use node@20
  • asdf๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„๊ฐ€ ํฌ์ง€๋งŒ ์…ธ shim ๊ธฐ๋ฐ˜์ด๋ผ ๋А๋ฆฌ๊ณ  .tool-versions ํŒŒ์ผ์— ์˜์กด
  • mise(๊ตฌ rtx)๋Š” Rust๋กœ ์ž‘์„ฑ๋˜์–ด ํ›จ์”ฌ ๋น ๋ฅด๊ณ , asdf ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ˜ธํ™˜๋˜๋ฉฐ, .env ์ง€์›๊ณผ ๋‚ด์žฅ task runner๊นŒ์ง€ ์ œ๊ณต
  • GitLab Development Kit๊ฐ€ asdf์—์„œ mise๋กœ ์ „ํ™˜ํ•˜๋Š” ๋“ฑ ์‹ค์งˆ์  ๋Œ€์ฒด๊ฐ€ ์ง„ํ–‰ ์ค‘
aqua, proto: ์„ ์–ธ์  ๋ฒ„์ „ ๊ด€๋ฆฌ
# aqua.yaml โ€” ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ๊ด€๋ฆฌ
registries:
  - type: standard
    ref: v4.155.1
packages:
  - name: BurntSushi/ripgrep@14.1.0
  - name: junegunn/fzf@0.46.1
  • aqua: Go๋กœ ์ž‘์„ฑ๋œ ์„ ์–ธ์  CLI ๋ฒ„์ „ ๋งค๋‹ˆ์ €. ์ฒดํฌ์„ฌ ๊ฒ€์ฆ๊ณผ SLSA ์ถœ์ฒ˜ ์ฆ๋ช… ์ง€์›์ด ๊ฐ•์ 
  • proto: moonrepo์—์„œ ๋งŒ๋“  Rust ๊ธฐ๋ฐ˜ ๋ฉ€ํ‹ฐ ์–ธ์–ด ๋ฒ„์ „ ๋งค๋‹ˆ์ €. Node.js, Python, Rust, Go ๋“ฑ์„ ํ•˜๋‚˜๋กœ ๊ด€๋ฆฌ
Nix / Devbox: ์™„์ „ํ•œ ์žฌํ˜„์„ฑ
# Devbox โ€” Nix๋ฅผ ์‰ฝ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๊ฐ์‹ผ ๋„๊ตฌ
devbox init
devbox add ripgrep nodejs python
devbox shell  # ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ ์ง„์ž…
  • Nix: 10๋งŒ ๊ฐœ ์ด์ƒ์˜ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ง„ ์™„์ „ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ ์‹œ์Šคํ…œ. โ€œ๋‚ด ๋จธ์‹ ์—์„œ๋Š” ๋˜๋Š”๋ฐโ€๋ฅผ ์›์ฒœ ์ฐจ๋‹จ
  • Devbox: Nix์˜ ํ•™์Šต ๊ณก์„ ์„ devbox.json ํ•˜๋‚˜๋กœ ๋‹จ์ˆœํ™”. 40๋งŒ ๊ฐœ ์ด์ƒ์˜ Nix ํŒจํ‚ค์ง€๋ฅผ Nix ์–ธ์–ด ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • Fedora 44๊ฐ€ Nix๋ฅผ ๊ณต์‹ ์ €์žฅ์†Œ์— ํฌํ•จ ์Šน์ธํ•˜๋Š” ๋“ฑ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋„์ž…์ด ๊ฐ€์†ํ™”๋˜๊ณ  ์žˆ์Œ

6. ๋„๊ตฌ ๋ฐฐํฌ์ž์˜ ์„ ํƒ์ง€ โ€” ๋ฐฐํฌ ๋งˆ์ฐฐ ๋น„๊ต

๋„๊ตฌ๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ์ด โ€œ์–ด๋””๋กœ ๋ฐฐํฌํ• ๊นŒโ€๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ฒซ ๋ฐฐํฌ๊นŒ์ง€์˜ ๋งˆ์ฐฐ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ๋ถ€๋‹ด์ด๋‹ค.

ํ”Œ๋žซํผ์ฒซ ๋ฐฐํฌ๊นŒ์ง€์œ ์ง€๋ณด์ˆ˜ ๋ถ€๋‹ดํฌ๋กœ์Šคํ”Œ๋žซํผ
npmnpm publish ํ•œ ์ค„๋‚ฎ์ŒmacOS/Linux/Windows
PyPIwheel ๋นŒ๋“œ + twine upload๋‚ฎ์ŒmacOS/Linux/Windows
crates.iocargo publish๋‚ฎ์Œ (10MB ์ œํ•œ)macOS/Linux/Windows
Go ๋ชจ๋“ˆํƒœ๊ทธ push๋งŒ ํ•˜๋ฉด ์ž๋™ ์ธ๋ฑ์‹ฑ๊ฑฐ์˜ ์—†์ŒmacOS/Linux/Windows
Homebrew (tap)GitHub ์ €์žฅ์†Œ + formula ์ž‘์„ฑ๋‚ฎ์ŒmacOS/Linux
Homebrew (core)PR ์ œ์ถœ + ๋ฆฌ๋ทฐ ํ†ต๊ณผ๋†’์Œ (์œ ์ง€๋ณด์ˆ˜ ์˜๋ฌด)macOS/Linux
apt/dnf.deb/.rpm ๋นŒ๋“œ + GPG + ์ €์žฅ์†Œ ํ˜ธ์ŠคํŒ…๋งค์šฐ ๋†’์ŒLinux only
GitHub ReleasesCI์—์„œ ๋นŒ๋“œ + ์—…๋กœ๋“œ๋‚ฎ์Œ (GoReleaser ์‚ฌ์šฉ ์‹œ)์ „์ฒด
Docker Hubdocker build && docker push๋‚ฎ์ŒDocker๊ฐ€ ์žˆ๋Š” ๊ณณ ์–ด๋””๋“ 

npm์˜ ๋ฐฐํฌ ๋งˆ์ฐฐ์ด ๊ฐ€์žฅ ๋‚ฎ๋‹ค๋Š” ๊ฒƒ์ด ๋ณด์ธ๋‹ค. ํŠนํžˆ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ปดํŒŒ์ผ ์—†์ด JS๋งŒ์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ฐœ์ธ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งค๋ ฅ์ ์ด๋‹ค. ๋ฐ˜๋ฉด apt/dnf๋Š” ํŒจํ‚ค์ง• ๋ณต์žก๋„๊ฐ€ ๋†’์•„์„œ ๊ฐœ์ธ์ด ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

์‹ค๋ฌด์—์„œ์˜ ๋ฉ€ํ‹ฐ์ฑ„๋„ ๋ฐฐํฌ

์ž˜ ๋งŒ๋“ค์–ด์ง„ ๋„๊ตฌ๋Š” ํ•˜๋‚˜์˜ ์ฑ„๋„์—๋งŒ ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€ํ‘œ์ ์ธ ํŒจํ„ด์€ ์ด๋ ‡๋‹ค.

  1. GitHub Releases์— ํ”Œ๋žซํผ๋ณ„ ๋ฐ”์ด๋„ˆ๋ฆฌ ์—…๋กœ๋“œ (GoReleaser๋กœ ์ž๋™ํ™”)
  2. Homebrew tap์— formula ๋“ฑ๋ก
  3. npm์— wrapper ํŒจํ‚ค์ง€ ๋ฐฐํฌ (optionalDependencies๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌํ•จ)
  4. cargo-binstall / crates.io ๋“ฑ๋ก (Rust ๋„๊ตฌ์ธ ๊ฒฝ์šฐ)
  5. ํ•„์š”ํ•˜๋ฉด Docker ์ด๋ฏธ์ง€๋„ ๋ฐฐํฌ

์ด ์ „์ฒด๋ฅผ CI ํŒŒ์ดํ”„๋ผ์ธ ํ•˜๋‚˜๋กœ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ์ด 2026๋…„ ํ˜„์žฌ์˜ ํ‘œ์ค€ ๋ฐฐํฌ ๋ฐฉ์‹์ด๋‹ค.


7. ๋ณด์•ˆ๊ณผ ๊ณต๊ธ‰๋ง ๊ณต๊ฒฉ

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ํŽธ๋ฆฌํ• ์ˆ˜๋ก ๊ณต๊ฒฉ ํ‘œ๋ฉด๋„ ๋„“์–ด์ง„๋‹ค. ํŠนํžˆ npm์€ ๊ทœ๋ชจ๊ฐ€ ํฐ ๋งŒํผ ๊ฐ€์žฅ ๋งŽ์€ ๊ณต๊ฒฉ์„ ๋ฐ›๊ณ  ์žˆ๋‹ค.

npm โ€” ๊ฐ€์žฅ ํฐ ํ‘œ์ 
  • 2025๋…„ 9์›”: ์ฃผ๊ฐ„ ๋‹ค์šด๋กœ๋“œ ํ•ฉ๊ณ„ 26์–ต ๊ฑด์ธ 18๊ฐœ ํŒจํ‚ค์ง€๊ฐ€ ๋™์‹œ์— ํƒˆ์ทจ๋จ. ํƒ€์ดํฌ์Šค์ฟผํŒ…์ด ์•„๋‹ˆ๋ผ ์œ ์ง€๋ณด์ˆ˜์ž์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ง์ ‘ ํƒˆ์ทจํ•œ ๊ณต๊ฒฉ
  • Shai-Hulud ์›œ (2025๋…„ 9์›”): npm ์ตœ์ดˆ์˜ ์ž๊ฐ€ ์ „ํŒŒ ์›œ. ๊ฐ์—ผ๋œ ํŒจํ‚ค์ง€๊ฐ€ ์ž๋™์œผ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ์—ผ์‹œ์ผœ 500๊ฐœ ์ด์ƒ์œผ๋กœ ํ™•์‚ฐ
  • TeamPCP ์บ ํŽ˜์ธ (2026๋…„ 3-4์›”): axios(์ฃผ๊ฐ„ 1์–ต ๋‹ค์šด๋กœ๋“œ), @bitwarden/cli ํƒ€์ดํฌ์Šค์ฟผํŒ… ๊ณต๊ฒฉ. ํƒˆ์ทจ๋œ publish ํ† ํฐ์œผ๋กœ ์›œ์ฒ˜๋Ÿผ ์ „ํŒŒ
  • 2025๋…„ 4๋ถ„๊ธฐ ์•…์„ฑ ํŒจํ‚ค์ง€์˜ 99.8%๊ฐ€ npm์—์„œ ๋ฐœ์ƒ
PyPI, crates.io๋„ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค
  • PyPI: ML ๊ฐœ๋ฐœ์ž๋ฅผ ํƒ€๊ฒŸ์œผ๋กœ ํ•œ ํƒ€์ดํฌ์Šค์ฟผํŒ… ํŒจํ‚ค์ง€ 1๋งŒ ๊ฑด ์ด์ƒ ๋ฐœ๊ฒฌ (2025๋…„)
  • crates.io: faster_log, async_println ๋“ฑ ์•”ํ˜ธํ™”ํ ํ‚ค ํƒˆ์ทจ ํŒจํ‚ค์ง€ ๋“ฑ์žฅ (2025๋…„ 5์›”)
๋ฐฉ์–ด์˜ ์ƒˆ ํ‘œ์ค€: Trusted Publishing (OIDC)
# GitHub Actions์—์„œ npm์— ์ง์ ‘ ์ธ์ฆ (์ €์žฅ๋œ ์‹œํฌ๋ฆฟ ์—†์ด)
- uses: actions/setup-node@v4
  with:
    registry-url: 'https://registry.npmjs.org'
- run: npm publish
  env:
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}  # ๊ธฐ์กด ๋ฐฉ์‹
 
# Trusted Publishing โ€” ํ† ํฐ ์ž์ฒด๊ฐ€ ๋ถˆํ•„์š” (OIDC)
# npm, PyPI, crates.io ๋ชจ๋‘ ์ง€์›
  • GitHub Actions๊ฐ€ OIDC๋กœ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ง์ ‘ ์‹ ์›์„ ์ฆ๋ช…ํ•˜๋Š” ๋ฐฉ์‹
  • ์ €์žฅ๋œ ์‹œํฌ๋ฆฟ ์ž์ฒด๋ฅผ ์—†์•ฐ์œผ๋กœ์จ ์ž๊ฒฉ ์ฆ๋ช… ํƒˆ์ทจ ๊ณต๊ฒฉ์„ ์›์ฒœ ์ฐจ๋‹จ
  • npm์€ ์ถ”๊ฐ€๋กœ 2FA ํ•„์ˆ˜ํ™”, ํ† ํฐ ์ˆ˜๋ช… ๋‹จ์ถ•(๊ธฐ๋ณธ 7์ผ, ์ตœ๋Œ€ 90์ผ), staged publishing(๋‹จ๊ณ„์  ๋ฐฐํฌ)์„ ๋„์ž… ์ค‘

์„ค์น˜ ์ „ ํ™•์ธ ์Šต๊ด€

  • ํŒจํ‚ค์ง€ ์ด๋ฆ„ ์˜คํƒ€ ํ™•์ธ (typosquatting ๋ฐฉ์ง€)
  • ๋‹ค์šด๋กœ๋“œ ์ˆ˜, ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ ๋‚ ์งœ, ์œ ์ง€๋ณด์ˆ˜์ž ์ˆ˜ ํ™•์ธ
  • npm audit / pip audit / cargo audit๋กœ ์•Œ๋ ค์ง„ ์ทจ์•ฝ์  ์ ๊ฒ€
  • ๊ฐ€๋Šฅํ•˜๋ฉด ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์•ˆ๋‚ดํ•˜๋Š” ์„ค์น˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ

8. ํŠธ๋ Œ๋“œ: npm์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ

JS ๋„๊ตฌ์˜ Rust/Go ์žฌ์ž‘์„ฑ ๋ฌผ๊ฒฐ

2025-2026๋…„, JavaScript ์ƒํƒœ๊ณ„์˜ ํ•ต์‹ฌ ๋„๊ตฌ๋“ค์ด Rust๋‚˜ Go๋กœ ์žฌ์ž‘์„ฑ๋˜๊ณ  ์žˆ๋‹ค.

๊ธฐ์กด ๋„๊ตฌ (JS)๋Œ€์ฒด ๋„๊ตฌ (Rust/Go)์„ฑ๋Šฅ ์ฐจ์ด
ESLint + PrettierBiome20๋ฐฐ ๋น ๋ฆ„
ESLintOxlint (v1.0, 2025๋…„ 6์›”)50~100๋ฐฐ ๋น ๋ฆ„
webpackRspack, Turbopack10๋ฐฐ ์ด์ƒ ๋น ๋ฆ„
BabelSWC20๋ฐฐ ๋น ๋ฆ„
RollupRolldown์ˆ˜๋ฐฐ ๋น ๋ฆ„

์ด ๋„๊ตฌ๋“ค์€ Rust๋กœ ์ž‘์„ฑ๋˜์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ npm์œผ๋กœ๋„ ๋ฐฐํฌ๋œ๋‹ค. optionalDependencies ํŒจํ„ด์œผ๋กœ ํ”Œ๋žซํผ๋ณ„ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ npm ํŒจํ‚ค์ง€ ์•ˆ์— ๊ฐ์‹ธ๋Š” ๋ฐฉ์‹์ด๋‹ค. npm์˜ ๋„๋‹ฌ ๋ฒ”์œ„๋ฅผ ํฌ๊ธฐํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๋„ค์ดํ‹ฐ๋ธŒ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ „๋žต์ด๋‹ค.

cargo-binstall์˜ ์˜๋ฏธ

Rust CLI ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๊ฐ€์žฅ ํฐ ์ง„์ž… ์žฅ๋ฒฝ์€ โ€œRust ํˆด์ฒด์ธ์„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹คโ€๋Š” ์ ์ด์—ˆ๋‹ค. cargo-binstall์€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. GitHub Releases์—์„œ ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ฐพ์•„ ์„ค์น˜ํ•˜๋ฏ€๋กœ Rust๋ฅผ ๋ชฐ๋ผ๋„ Rust ๋„๊ตฌ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

# Rust ํˆด์ฒด์ธ ์—†์ด๋„ Rust ๋„๊ตฌ ์„ค์น˜ ๊ฐ€๋Šฅ
cargo binstall ripgrep bat fd-find
JSR (JavaScript Registry)์˜ ๋“ฑ์žฅ

2024๋…„ 3์›” ์ถœ์‹œ๋œ JSR์€ TypeScript ์šฐ์„  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋‹ค. npm์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ณด์™„ํ•˜๋Š” ์œ„์น˜๋‹ค.

  • TypeScript๋ฅผ ์ง์ ‘ ์ œ๊ณต (Deno์—์„œ๋Š” ๊ทธ๋Œ€๋กœ, Node.js์—์„œ๋Š” ์ž๋™ ํŠธ๋žœ์ŠคํŒŒ์ผ)
  • ์ž๋™ API ๋ฌธ์„œ ์ƒ์„ฑ
  • 2026๋…„ ์ดˆ ๊ธฐ์ค€ 4๋งŒ ๊ฐœ ์ด์ƒ์˜ ํŒจํ‚ค์ง€
  • ์˜คํ”ˆ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ณด๋“œ ์„ค๋ฆฝ
ํ๋ฆ„ ์ •๋ฆฌ

npm์ด CLI ๋„๊ตฌ ๋ฐฐํฌ์—์„œ ์ฐจ์ง€ํ•˜๋Š” ๋น„์ค‘์€ ์—ฌ์ „ํžˆ ํฌ์ง€๋งŒ, ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๋„๊ตฌ๋“ค์€ ์ ์  ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ด๋™ํ•˜๊ณ  ์žˆ๋‹ค. ๋ฐฐํฌ ์ฑ„๋„๋„ ๋‹ค์–‘ํ™”๋˜์–ด โ€œnpm ํ•˜๋‚˜๋งŒ์œผ๋กœ ๋ฐฐํฌโ€๊ฐ€ ์•„๋‹ˆ๋ผ โ€œGitHub Releases + brew + npm + cargo๋ฅผ ๋™์‹œ์—โ€๊ฐ€ ํ‘œ์ค€์ด ๋˜์–ด๊ฐ€๊ณ  ์žˆ๋‹ค.

๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” npm๋งŒ ์•Œ์•„๋„ ๋Œ€๋ถ€๋ถ„์˜ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, brewยทmiseยทcargo-binstall ๊ฐ™์€ ๋Œ€์•ˆ์„ ์•Œ์•„๋‘๋ฉด ๋” ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.