์ ์ธ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์๋ฅผ ์ํ ํจ์จ์ ์ธ ํจํค์ง ๊ด๋ฆฌ, ์์กด์ฑ ๋ณด์, ์ต์ ํ ์ ๋ต์ ๋ค๋ฃจ๋ NPM ๋ชจ๋ฒ ์ฌ๋ก ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง ๊ด๋ฆฌ: NPM ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ์์กด์ฑ ๋ณด์
๋์์์ด ๋ฐ์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ์ธ๊ณ์์ ํจ์จ์ ์ด๊ณ ์์ ํ ํจํค์ง ๊ด๋ฆฌ๋ ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. NPM(Node Package Manager)์ Node.js์ ๊ธฐ๋ณธ ํจํค์ง ๊ด๋ฆฌ์์ด์ ์ธ๊ณ ์ต๋์ ์ํํธ์จ์ด ๋ ์ง์คํธ๋ฆฌ์ ๋๋ค. ์ด ๊ฐ์ด๋๋ ๋ชจ๋ ์์ค์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์์๊ฒ ํ์์ ์ธ NPM ๋ชจ๋ฒ ์ฌ๋ก์ ์์กด์ฑ ๋ณด์ ์กฐ์น์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ์ธ๊ณ ๋ ์๋ฅผ ๋์์ผ๋ก ์ ๊ณตํฉ๋๋ค.
NPM๊ณผ ํจํค์ง ๊ด๋ฆฌ ์ดํดํ๊ธฐ
NPM์ ํ๋ก์ ํธ ์์กด์ฑ์ ์ค์น, ๊ด๋ฆฌ, ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ค๋ฅธ ์ฌ๋์ด ์์ฑํ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ์ ์ฝํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ถ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ฉด ์์กด์ฑ ์ถฉ๋, ๋ณด์ ์ทจ์ฝ์ , ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
NPM์ด๋ ๋ฌด์์ธ๊ฐ?
NPM์ ์ธ ๊ฐ์ง เฆธเงเฆฌเฆคเฆจเงเฆคเงเฆฐ ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค:
- ์น์ฌ์ดํธ: ํจํค์ง, ๋ฌธ์, ์ฌ์ฉ์ ํ๋กํ์ ๊ฒ์ํ ์ ์๋ ์นดํ๋ก๊ทธ์ ๋๋ค.
- ๋ช ๋ น์ค ์ธํฐํ์ด์ค(CLI): ํจํค์ง๋ฅผ ์ค์น, ๊ด๋ฆฌ, ๊ฒ์ํ๋ ๋๊ตฌ์ ๋๋ค.
- ๋ ์ง์คํธ๋ฆฌ: ์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง์ ๋๊ท๋ชจ ๊ณต์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค.
ํจํค์ง ๊ด๋ฆฌ๊ฐ ์ ์ค์ํ๊ฐ?
ํจ๊ณผ์ ์ธ ํจํค์ง ๊ด๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ: ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋ฐ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
- ์์กด์ฑ ๊ด๋ฆฌ: ๋ณต์กํ ์์กด์ฑ๊ณผ ๊ทธ ๋ฒ์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ผ๊ด์ฑ: ๋ชจ๋ ํ์์ด ๋์ผํ ๋ฒ์ ์ ์์กด์ฑ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ๋ณด์: ์ทจ์ฝ์ ์ ํจ์นํ๊ณ ๋ณด์ ์์ ์ฌํญ์ ์ต์ ์ํ๋ก ์ ์งํฉ๋๋ค.
ํจ์จ์ ์ธ ๊ฐ๋ฐ์ ์ํ NPM ๋ชจ๋ฒ ์ฌ๋ก
๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๊ฐ๋ฐ ์ํฌํ๋ก์ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์ ํ์ง์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
1. `package.json` ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ
`package.json` ํ์ผ์ ํ๋ก์ ํธ์ ๋ฉํ๋ฐ์ดํฐ์ ์์กด์ฑ์ ํฌํจํ๋ ํ๋ก์ ํธ์ ํต์ฌ์ ๋๋ค. ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ธ์.
`package.json` ๊ตฌ์กฐ ์์:
{
"name": "my-awesome-project",
"version": "1.0.0",
"description": "ํ๋ก์ ํธ์ ๋ํ ๊ฐ๋ตํ ์ค๋ช
์
๋๋ค.",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "jest",
"build": "webpack"
},
"keywords": [
"javascript",
"npm",
"package management"
],
"author": "์ฌ์ฉ์ ์ด๋ฆ",
"license": "MIT",
"dependencies": {
"express": "^4.17.1",
"lodash": "~4.17.21"
},
"devDependencies": {
"jest": "^27.0.0",
"webpack": "^5.0.0"
}
}
- `name`๊ณผ `version`: ํ๋ก์ ํธ๋ฅผ ์๋ณํ๊ณ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๋ฐ ํ์์ ์ ๋๋ค. `version`์๋ ์ ์์ ๋ฒ์ ๊ด๋ฆฌ(SemVer)๋ฅผ ๋ฐ๋ฅด์ธ์.
- `description`: ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ์ค๋ช ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ํ๋ก์ ํธ์ ๋ชฉ์ ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- `main`: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ ์ ์ง์ ํฉ๋๋ค.
- `scripts`: ์๋ฒ ์์, ํ ์คํธ ์คํ, ํ๋ก์ ํธ ๋น๋์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์์ ์ ์ ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ๋ค๋ฅธ ํ๊ฒฝ์์ ํ์คํ๋ ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ณต์กํ ์คํฌ๋ฆฝํธ ์คํ ์๋๋ฆฌ์ค์ ๊ฒฝ์ฐ `npm-run-all`๊ณผ ๊ฐ์ ๋๊ตฌ ์ฌ์ฉ์ ๊ณ ๋ คํด ๋ณด์ธ์.
- `keywords`: ์ฌ์ฉ์๊ฐ NPM์์ ํจํค์ง๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- `author`์ `license`: ์ ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ํ๋ก์ ํธ๊ฐ ๋ฐฐํฌ๋๋ ๋ผ์ด์ ์ค๋ฅผ ์ง์ ํฉ๋๋ค. ์ ์ ํ ๋ผ์ด์ ์ค(์: MIT, Apache 2.0, GPL)๋ฅผ ์ ํํ๋ ๊ฒ์ ์คํ ์์ค ํ๋ก์ ํธ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- `dependencies`: ํ๋ก๋์ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ฐ ํ์ํ ํจํค์ง ๋ชฉ๋ก์ ๋๋ค.
- `devDependencies`: ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ, ํ ์คํธ, ๋น๋์ ํ์ํ ํจํค์ง ๋ชฉ๋ก์ ๋๋ค(์: ๋ฆฐํฐ, ํ ์คํธ ํ๋ ์์ํฌ, ๋น๋ ๋๊ตฌ).
2. ์ ์์ ๋ฒ์ ๊ด๋ฆฌ(SemVer) ์ดํดํ๊ธฐ
์ ์์ ๋ฒ์ ๊ด๋ฆฌ๋ ์ํํธ์จ์ด ๋ฒ์ ๊ด๋ฆฌ์ ๋๋ฆฌ ์ฑํ๋ ํ์ค์ ๋๋ค. `MAJOR.MINOR.PATCH`๋ผ๋ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฒ์ ๋ฒํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- MAJOR: ํ์ ํธํ๋์ง ์๋ API ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๋.
- MINOR: ํ์ ํธํ์ฑ์ ์ ์งํ๋ฉด์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋.
- PATCH: ํ์ ํธํ์ฑ์ ์ ์งํ๋ฉด์ ๋ฒ๊ทธ๋ฅผ ์์ ํ ๋.
`package.json`์์ ์์กด์ฑ ๋ฒ์ ์ ์ง์ ํ ๋, ํธํ์ฑ์ ๋ณด์ฅํ๋ฉด์ ์ ์ฐ์ฑ์ ํ์ฉํ๊ธฐ ์ํด ๋ฒ์ ๋ฒ์๋ฅผ ์ฌ์ฉํ์ธ์:
- `^` (์บ๋ฟ): ๊ฐ์ฅ ์ผ์ชฝ์ 0์ด ์๋ ์ซ์๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํฉ๋๋ค(์: `^1.2.3`์ `1.3.0` ๋๋ `1.9.9`๋ก์ ์ ๋ฐ์ดํธ๋ ํ์ฉํ์ง๋ง `2.0.0`์ ํ์ฉํ์ง ์์). ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ๊ถ์ฅ๋๋ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
- `~` (ํธ๋): ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ซ์์ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํฉ๋๋ค(์: `~1.2.3`์ `1.2.4` ๋๋ `1.2.9`๋ก์ ์ ๋ฐ์ดํธ๋ ํ์ฉํ์ง๋ง `1.3.0`์ ํ์ฉํ์ง ์์).
- `>` `>=`, `<` `<=` `=`: ์ต์ ๋๋ ์ต๋ ๋ฒ์ ์ ์ง์ ํ ์ ์์ต๋๋ค.
- `*`: ๋ชจ๋ ๋ฒ์ ์ ํ์ฉํฉ๋๋ค. ์ ์ฌ์ ์ธ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ ๋๋ฌธ์ ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์์ต๋๋ค.
- ์ ๋์ฌ ์์: ์ ํํ ๋ฒ์ ์ ์ง์ ํฉ๋๋ค(์: `1.2.3`). ์์กด์ฑ ์ถฉ๋์ ์ ๋ฐํ ์ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์์ต๋๋ค.
์์: `"express": "^4.17.1"`์ NPM์ด Express 4.17.x ๋ฒ์ (์: 4.17.2 ๋๋ 4.17.9)์ ์ค์นํ๋๋ก ํ์ฉํ์ง๋ง, 4.18.0 ๋๋ 5.0.0์ ์ค์นํ์ง ์์ต๋๋ค.
3. `npm install` ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ
`npm install` ๋ช ๋ น์ด๋ `package.json`์ ์ ์๋ ์์กด์ฑ์ ์ค์นํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- `npm install`: `package.json`์ ๋์ด๋ ๋ชจ๋ ์์กด์ฑ์ ์ค์นํฉ๋๋ค.
- `npm install
`: ํน์ ํจํค์ง๋ฅผ ์ค์นํ๊ณ `package.json`์ `dependencies`์ ์ถ๊ฐํฉ๋๋ค. - `npm install
--save-dev`: ํน์ ํจํค์ง๋ฅผ ๊ฐ๋ฐ ์์กด์ฑ์ผ๋ก ์ค์นํ๊ณ `package.json`์ `devDependencies`์ ์ถ๊ฐํฉ๋๋ค. `npm install -D`๊ณผ ๋์ผํฉ๋๋ค. - `npm install -g
`: ํจํค์ง๋ฅผ ์ ์ญ์ผ๋ก ์ค์นํ์ฌ ์์คํ ์ ๋ช ๋ น์ค์์ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค. ์ ์ญ์ ์ผ๋ก ์ฌ์ฉ๋๋๋ก ์๋๋ ๋๊ตฌ(์: `npm install -g eslint`)์๋ง ์ฃผ์ํ์ฌ ์ฌ์ฉํ์ธ์.
4. ํด๋ฆฐ ์ค์น๋ฅผ ์ํ `npm ci` ํ์ฉํ๊ธฐ
`npm ci`(Clean Install) ๋ช ๋ น์ด๋ CI/CD ํ์ดํ๋ผ์ธ๊ณผ ๊ฐ์ ์๋ํ๋ ํ๊ฒฝ์์ ์์กด์ฑ์ ๋ ๋น ๋ฅด๊ณ , ์์ ์ ์ด๋ฉฐ, ์์ ํ๊ฒ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ช ๋ น์ด๋ `package-lock.json` ๋๋ `npm-shrinkwrap.json` ํ์ผ์ด ์์ ๋ ์ฌ์ฉํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
`npm ci`์ ์ฃผ์ ์ด์ :
- ๋ ๋น ๋ฆ: `npm install`์ด ์ํํ๋ ํน์ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋๋๋ค.
- ๋ ์์ ์ : `package-lock.json` ๋๋ `npm-shrinkwrap.json`์ ๋ช ์๋ ์ ํํ ๋ฒ์ ์ ์์กด์ฑ์ ์ค์นํ์ฌ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ์์ ํจ: ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด๋ ์ทจ์ฝ์ ์ ์ ๋ฐํ ์ ์๋ ์์กด์ฑ์ ์ฐ๋ฐ์ ์ธ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ๋ฝํ์ผ์ ์ ์ฅ๋ ์ํธํ ํด์๋ฅผ ์ฌ์ฉํ์ฌ ์ค์น๋ ํจํค์ง์ ๋ฌด๊ฒฐ์ฑ์ ํ์ธํฉ๋๋ค.
`npm ci` ์ฌ์ฉ ์๊ธฐ: CI/CD ํ๊ฒฝ, ํ๋ก๋์ ๋ฐฐํฌ ๋ฐ ์ฌํ ๊ฐ๋ฅํ๊ณ ์์ ์ ์ธ ๋น๋๊ฐ ํ์ํ ๋ชจ๋ ์ํฉ์์ ์ฌ์ฉํ์ธ์. ์์กด์ฑ์ ์์ฃผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ์ ์๋ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ฌ์ฉํ์ง ๋ง์ธ์. ๋ก์ปฌ ๊ฐ๋ฐ์๋ `npm install`์ ์ฌ์ฉํ์ธ์.
5. `package-lock.json` ์ดํดํ๊ณ ์ฌ์ฉํ๊ธฐ
`package-lock.json` ํ์ผ(๋๋ ์ด์ ๋ฒ์ ์ NPM์์๋ `npm-shrinkwrap.json`)์ ํ๋ก์ ํธ์ ์ค์น๋ ๋ชจ๋ ์์กด์ฑ(์ ์ด ์์กด์ฑ, ์ฆ ์์กด์ฑ์ ์์กด์ฑ ํฌํจ)์ ์ ํํ ๋ฒ์ ์ ๊ธฐ๋กํฉ๋๋ค. ์ด๋ฅผ ํตํด ํ๋ก์ ํธ์ ์ฐธ์ฌํ๋ ๋ชจ๋ ์ฌ๋์ด ๋์ผํ ๋ฒ์ ์ ์์กด์ฑ์ ์ฌ์ฉํ๊ฒ ๋์ด ๋ถ์ผ์น์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- `package-lock.json`์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ์ปค๋ฐํ์ธ์: ์ด๋ ์ฌ๋ฌ ๋ค๋ฅธ ํ๊ฒฝ์์ ์ผ๊ด๋ ๋น๋๋ฅผ ๋ณด์ฅํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- `package-lock.json`์ ์๋์ผ๋ก ํธ์งํ์ง ๋ง์ธ์: ์์กด์ฑ์ ์ค์นํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ๋ NPM์ด ์๋์ผ๋ก ํ์ผ์ ๊ด๋ฆฌํ๋๋ก ํ์ธ์. ์๋ ํธ์ง์ ๋ถ์ผ์น๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
- ์๋ํ๋ ํ๊ฒฝ์์ `npm ci`๋ฅผ ์ฌ์ฉํ์ธ์: ์์์ ์ธ๊ธํ๋ฏ์ด, ์ด ๋ช ๋ น์ด๋ `package-lock.json` ํ์ผ์ ์ฌ์ฉํ์ฌ ๊นจ๋ํ๊ณ ์์ ์ ์ธ ์ค์น๋ฅผ ์ํํฉ๋๋ค.
6. ์์กด์ฑ์ ์ต์ ์ํ๋ก ์ ์งํ๊ธฐ
์์กด์ฑ์ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋ณด์๊ณผ ์ฑ๋ฅ์ ํ์์ ์ ๋๋ค. ์ค๋๋ ์์กด์ฑ์ ์๋ ค์ง ์ทจ์ฝ์ ์ด๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฌด๋ถ๋ณํ ์ ๋ฐ์ดํธ๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ๋ฐํ ์ ์์ต๋๋ค. ๊ท ํ ์กํ ์ ๊ทผ์ด ์ค์ํฉ๋๋ค.
- `npm update`: `package.json`์ ๋ช ์๋ ๋ฒ์ ๋ฒ์ ๋ด์์ ํจํค์ง๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ค๊ณ ์๋ํฉ๋๋ค. ๋์ ๋ฒ์ ๋ฒ์(์: `^`)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก `npm update` ์คํ ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์คํ๊ฒ ๊ฒํ ํ์ธ์.
- `npm outdated`: ์ค๋๋ ํจํค์ง์ ํ์ฌ, ์ํ๋, ์ต์ ๋ฒ์ ์ ๋์ดํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ด๋ค ํจํค์ง๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋์ง ์๋ณํ ์ ์์ต๋๋ค.
- ์์กด์ฑ ์ ๋ฐ์ดํธ ๋๊ตฌ ์ฌ์ฉ: Renovate Bot์ด๋ Dependabot(GitHub์ ํตํฉ๋จ)๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ ์ ๋ฐ์ดํธ๋ฅผ ์๋ํํ๊ณ ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์. ์ด๋ฌํ ๋๊ตฌ๋ ๋ณด์ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ์์ ํ๋ ๋ฐ๋ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ์ ๋ฐ์ดํธ ํ ์ฒ ์ ํ ํ ์คํธํ์ธ์: ํ ์คํธ ์ค์ํธ๋ฅผ ์คํํ์ฌ ์ ๋ฐ์ดํธ๋ก ์ธํด ํ๊ท๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ์ง ์์๋์ง ํ์ธํ์ธ์.
7. `node_modules` ์ ๋ฆฌํ๊ธฐ
`node_modules` ๋๋ ํฐ๋ฆฌ๋ ๋งค์ฐ ์ปค์ง ์ ์์ผ๋ฉฐ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ์ค๋ณต๋๋ ํจํค์ง๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฆฌํ๋ฉด ์ฑ๋ฅ์ ๊ฐ์ ํ๊ณ ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ๋์ ์ค์ผ ์ ์์ต๋๋ค.
- `npm prune`: ๋ถํ์ํ ํจํค์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋ถํ์ํ ํจํค์ง๋ `package.json`์ ์์กด์ฑ์ผ๋ก ๋์ด๋์ง ์์ ํจํค์ง๋ฅผ ์๋ฏธํฉ๋๋ค.
- `rimraf` ๋๋ `del-cli` ์ฌ์ฉ ๊ณ ๋ ค: ์ด ๋๊ตฌ๋ค์ `node_modules` ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ์ ๋ก ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ ํ ๊นจ๋ํ ์ค์น์ ์ ์ฉํ์ง๋ง, ๋๋ ํฐ๋ฆฌ ์์ ๋ชจ๋ ๊ฒ์ ์ญ์ ํ๋ฏ๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ์: `npx rimraf node_modules`.
8. ํจ์จ์ ์ธ NPM ์คํฌ๋ฆฝํธ ์์ฑํ๊ธฐ
NPM ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ์์ ์ ์๋ํํ ์ ์์ต๋๋ค. `package.json` ํ์ผ์ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ๋ฉฐ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ธ์.
์์:
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest",
"build": "webpack --mode production",
"lint": "eslint .",
"format": "prettier --write ."
}
- ์ค๋ช ์ ์ธ ์คํฌ๋ฆฝํธ ์ด๋ฆ ์ฌ์ฉ: ์คํฌ๋ฆฝํธ์ ๋ชฉ์ ์ ๋ช ํํ๊ฒ ๋ํ๋ด๋ ์ด๋ฆ(์: `build`, `test`, `lint`)์ ์ ํํ์ธ์.
- ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์ง: ์คํฌ๋ฆฝํธ๊ฐ ๋๋ฌด ๋ณต์กํด์ง๋ฉด ๋ก์ง์ ๋ณ๋์ ํ์ผ๋ก ์ฎ๊ธฐ๊ณ ์คํฌ๋ฆฝํธ์์ ํด๋น ํ์ผ์ ํธ์ถํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
- ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ: ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌ์ฑํ๊ณ `package.json` ํ์ผ์ ๊ฐ์ ํ๋์ฝ๋ฉํ๋ ๊ฒ์ ํผํ์ธ์. ์๋ฅผ ๋ค์ด, `NODE_ENV` ํ๊ฒฝ ๋ณ์๋ฅผ `production` ๋๋ `development`๋ก ์ค์ ํ๊ณ ๋น๋ ์คํฌ๋ฆฝํธ์์ ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์๋ช ์ฃผ๊ธฐ ์คํฌ๋ฆฝํธ ํ์ฉ: NPM์ ํจํค์ง ์๋ช ์ฃผ๊ธฐ์ ํน์ ์์ (์: `preinstall`, `postinstall`, `prepublishOnly`)์ ์๋์ผ๋ก ์คํ๋๋ ์๋ช ์ฃผ๊ธฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ฒฝ ๋ณ์ ์ค์ ์ด๋ ๊ฒ์ ์ ํ ์คํธ ์คํ๊ณผ ๊ฐ์ ์์ ์ ์ํํ์ธ์.
9. ์ฑ ์๊ฐ ์๊ฒ ํจํค์ง ๊ฒ์ํ๊ธฐ
์์ ๋ง์ ํจํค์ง๋ฅผ NPM์ ๊ฒ์ํ๋ ๊ฒฝ์ฐ ๋ค์ ์ง์นจ์ ๋ฐ๋ฅด์ธ์:
- ๊ณ ์ ํ๊ณ ์ค๋ช ์ ์ธ ์ด๋ฆ ์ ํ: ์ด๋ฏธ ์ฌ์ฉ ์ค์ด๊ฑฐ๋ ๋๋ฌด ์ผ๋ฐ์ ์ธ ์ด๋ฆ์ ํผํ์ธ์.
- ๋ช ํํ๊ณ ํฌ๊ด์ ์ธ ๋ฌธ์ ์์ฑ: ํจํค์ง๋ฅผ ์ค์น, ์ฌ์ฉ, ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ํํ ์ง์นจ์ ์ ๊ณตํ์ธ์.
- ์ ์์ ๋ฒ์ ๊ด๋ฆฌ ์ฌ์ฉ: SemVer๋ฅผ ๋ฐ๋ผ ํจํค์ง ๋ฒ์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ณ๊ฒฝ ์ฌํญ์ ์ ๋ฌํ์ธ์.
- ํจํค์ง๋ฅผ ์ฒ ์ ํ ํ ์คํธํ์ธ์: ํจํค์ง๊ฐ ์์๋๋ก ์๋ํ๊ณ ๋ฒ๊ทธ๊ฐ ์๋์ง ํ์ธํ์ธ์.
- NPM ๊ณ์ ๋ณด์: ๊ฐ๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ๊ณ 2๋จ๊ณ ์ธ์ฆ์ ํ์ฑํํ์ธ์.
- ์ค์ฝํ ์ฌ์ฉ ๊ณ ๋ ค: ์กฐ์ง์ ์ํด ํจํค์ง๋ฅผ ๊ฒ์ํ๋ ๊ฒฝ์ฐ, ์ค์ฝํ๊ฐ ์ง์ ๋ ํจํค์ง ์ด๋ฆ(์: `@my-org/my-package`)์ ์ฌ์ฉํ์ธ์. ์ด๋ ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ๋ ๋์ ๊ตฌ์ฑ์ ์ ๊ณตํฉ๋๋ค.
์์กด์ฑ ๋ณด์: ํ๋ก์ ํธ ๋ณดํธํ๊ธฐ
์์กด์ฑ ๋ณด์์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ์ค์ํ ์ธก๋ฉด์ ๋๋ค. ํ๋ก์ ํธ์ ๋ณด์์ ๊ฐ์ฅ ์ฝํ ์์กด์ฑ๋งํผ๋ง ๊ฐ๋ ฅํฉ๋๋ค. ์์กด์ฑ์ ์ทจ์ฝ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฌ์ฉ์๋ฅผ ์ํํ๋ ๋ฐ ์ ์ฉ๋ ์ ์์ต๋๋ค.
1. ์์กด์ฑ ์ทจ์ฝ์ ์ดํดํ๊ธฐ
์์กด์ฑ ์ทจ์ฝ์ ์ ํ๋ก์ ํธ๊ฐ ์์กดํ๋ ์ 3์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ์ ๋ณด์ ๊ฒฐํจ์ ๋๋ค. ์ด๋ฌํ ์ทจ์ฝ์ ์ ์ฌ์ํ ๋ฌธ์ ๋ถํฐ ๊ณต๊ฒฉ์๊ฐ ์ ์ฉํ ์ ์๋ ์ฌ๊ฐํ ๋ณด์ ์ํ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ทจ์ฝ์ ์ ๊ณต๊ฐ์ ์ผ๋ก ๋ณด๊ณ ๋ ์ฌ๊ณ , ๋ด๋ถ์ ์ผ๋ก ๋ฐ๊ฒฌ๋ ๋ฌธ์ ๋๋ ์๋ํ๋ ์ทจ์ฝ์ ์ค์บ๋ ๋๊ตฌ๋ฅผ ํตํด ๋ฐ๊ฒฌ๋ ์ ์์ต๋๋ค.
2. `npm audit`์ ์ฌ์ฉํ์ฌ ์ทจ์ฝ์ ์๋ณํ๊ธฐ
`npm audit` ๋ช ๋ น์ด๋ ํ๋ก์ ํธ์ ์์กด์ฑ์์ ์๋ ค์ง ์ทจ์ฝ์ ์ ์ค์บํ๊ณ ์์ ๋ฐฉ๋ฒ์ ๊ถ์ฅํฉ๋๋ค.
- `npm audit`์ ์ ๊ธฐ์ ์ผ๋ก ์คํํ์ธ์: ์์กด์ฑ์ ์ค์นํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ๋๋ง๋ค `npm audit`์ ์คํํ๋ ์ต๊ด์ ๋ค์ด๊ณ , CI/CD ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก๋ ํฌํจ์ํค์ธ์.
- ์ฌ๊ฐ๋ ์์ค ์ดํดํ๊ธฐ: NPM์ ์ทจ์ฝ์ ์ ๋ฎ์, ๋ณดํต, ๋์, ์น๋ช ์ ์ผ๋ก ๋ถ๋ฅํฉ๋๋ค. ๊ฐ์ฅ ์ฌ๊ฐํ ์ทจ์ฝ์ ์ ๋จผ์ ์์ ํ๋ ๋ฐ ์ฐ์ ์์๋ฅผ ๋์ธ์.
- ๊ถ์ฅ ์ฌํญ ๋ฐ๋ฅด๊ธฐ: NPM์ ์ํฅ์ ๋ฐ๋ ํจํค์ง์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๊ฑฐ๋ ํจ์น๋ฅผ ์ ์ฉํ๋ ๋ฑ ์ทจ์ฝ์ ์ ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ถ์ฅ ์ฌํญ์ ์ ๊ณตํฉ๋๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์์ ์ฌํญ์ด ์์ ์๋ ์์ผ๋ฉฐ, ์ด๋๋ ์ทจ์ฝํ ํจํค์ง๋ฅผ ๊ต์ฒดํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ ์ ์์ต๋๋ค.
- `npm audit fix`: ํจํค์ง๋ฅผ ์์ ํ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ฌ ์ทจ์ฝ์ ์ ์๋์ผ๋ก ์์ ํ๋ ค๊ณ ์๋ํฉ๋๋ค. ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ๋ฐํ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํ์ธ์. `npm audit fix`๋ฅผ ์คํํ ํ์๋ ํญ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ธ์.
3. ์๋ํ๋ ์ทจ์ฝ์ ์ค์บ๋ ๋๊ตฌ ์ฌ์ฉํ๊ธฐ
`npm audit` ์ธ์๋, ์ ์ฉ ์ทจ์ฝ์ ์ค์บ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ๋ ํฌ๊ด์ ์ด๊ณ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์.
- Snyk: CI/CD ํ์ดํ๋ผ์ธ๊ณผ ํตํฉ๋๊ณ ์ทจ์ฝ์ ์ ๋ํ ์์ธํ ๋ณด๊ณ ์๋ฅผ ์ ๊ณตํ๋ ์ธ๊ธฐ ์๋ ์ทจ์ฝ์ ์ค์บ๋ ๋๊ตฌ์ ๋๋ค.
- OWASP Dependency-Check: ํ๋ก์ ํธ ์์กด์ฑ์์ ์๋ ค์ง ์ทจ์ฝ์ ์ ์๋ณํ๋ ์คํ ์์ค ๋๊ตฌ์ ๋๋ค.
- WhiteSource Bolt: GitHub ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ํ ๋ฌด๋ฃ ์ทจ์ฝ์ ์ค์บ๋ ๋๊ตฌ์ ๋๋ค.
4. ์์กด์ฑ ํผ๋ ๊ณต๊ฒฉ(Dependency Confusion Attacks)
์์กด์ฑ ํผ๋์ ๊ณต๊ฒฉ์๊ฐ ์กฐ์ง์์ ์ฌ์ฉํ๋ ๋น๊ณต๊ฐ ํจํค์ง์ ๋์ผํ ์ด๋ฆ์ ํจํค์ง๋ฅผ ๋ ๋์ ๋ฒ์ ๋ฒํธ๋ก ๊ฒ์ํ๋ ๊ณต๊ฒฉ ์ ํ์ ๋๋ค. ์กฐ์ง์ ๋น๋ ์์คํ ์ด ์์กด์ฑ์ ์ค์นํ๋ ค๊ณ ํ ๋, ๋น๊ณต๊ฐ ํจํค์ง ๋์ ์ค์๋ก ๊ณต๊ฒฉ์์ ์ ์ฑ ํจํค์ง๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์ํ ์ ๋ต:
- ์ค์ฝํ๊ฐ ์ง์ ๋ ํจํค์ง ์ฌ์ฉ: ์์์ ์ธ๊ธํ๋ฏ์ด, ๋น๊ณต๊ฐ ํจํค์ง์๋ ์ค์ฝํ๊ฐ ์ง์ ๋ ํจํค์ง(์: `@my-org/my-package`)๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๋ ๊ณต๊ฐ ํจํค์ง์์ ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- NPM ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ: ์ ๋ขฐํ ์ ์๋ ๋ ์ง์คํธ๋ฆฌ์์๋ง ํจํค์ง๋ฅผ ์ค์นํ๋๋ก NPM ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ์ฑํ์ธ์.
- ์ ๊ทผ ์ ์ด ๊ตฌํ: ๋น๊ณต๊ฐ ํจํค์ง ๋ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ์ ๊ทผ์ ์ ํํ์ธ์.
- ์์กด์ฑ ๋ชจ๋ํฐ๋ง: ์๊ธฐ์น ์์ ๋ณ๊ฒฝ์ด๋ ์ทจ์ฝ์ ์ด ์๋์ง ์์กด์ฑ์ ์ ๊ธฐ์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ธ์.
5. ๊ณต๊ธ๋ง ๋ณด์(Supply Chain Security)
๊ณต๊ธ๋ง ๋ณด์์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฐ๋ฐ์๋ถํฐ ์ด๋ฅผ ์๋นํ๋ ์ฌ์ฉ์์ ์ด๋ฅด๊ธฐ๊น์ง ์ ์ฒด ์ํํธ์จ์ด ๊ณต๊ธ๋ง์ ๋ณด์์ ์๋ฏธํฉ๋๋ค. ์์กด์ฑ ์ทจ์ฝ์ ์ ๊ณต๊ธ๋ง ๋ณด์์์ ์ฃผ์ ๊ด์ฌ์ฌ์ ๋๋ค.
๊ณต๊ธ๋ง ๋ณด์ ๊ฐ์ ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก:
- ํจํค์ง ๋ฌด๊ฒฐ์ฑ ํ์ธ: `npm install --integrity`์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ ํด์๋ก ๋ค์ด๋ก๋๋ ํจํค์ง์ ๋ฌด๊ฒฐ์ฑ์ ํ์ธํ์ธ์.
- ์๋ช ๋ ํจํค์ง ์ฌ์ฉ: ํจํค์ง ์ ์ง ๊ด๋ฆฌ์๊ฐ ์ํธํ ์๋ช ์ ์ฌ์ฉํ์ฌ ํจํค์ง์ ์๋ช ํ๋๋ก ์ฅ๋ คํ์ธ์.
- ์์กด์ฑ ๋ชจ๋ํฐ๋ง: ์ทจ์ฝ์ ์ด๋ ์์ฌ์ค๋ฌ์ด ํ๋์ด ์๋์ง ์์กด์ฑ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ธ์.
- ๋ณด์ ์ ์ฑ ๊ตฌํ: ์กฐ์ง์ ๋ํ ๋ช ํํ ๋ณด์ ์ ์ฑ ์ ์ ์ํ๊ณ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ด๋ฅผ ์ธ์งํ๋๋ก ํ์ธ์.
6. ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ ๋ณด ์ ์งํ๊ธฐ
๋ณด์ ํ๊ฒฝ์ ๋์์์ด ๋ณํํ๋ฏ๋ก ์ต์ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก์ ์ทจ์ฝ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๊ณ์ ํ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๋ณด์ ๋ธ๋ก๊ทธ ๋ฐ ๋ด์ค๋ ํฐ ํ๋ก์ฐ: ์ต์ ์ํ ๋ฐ ์ทจ์ฝ์ ์ ๋ํ ์ต์ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ๋ณด์ ๋ธ๋ก๊ทธ ๋ฐ ๋ด์ค๋ ํฐ๋ฅผ ๊ตฌ๋ ํ์ธ์.
- ๋ณด์ ์ปจํผ๋ฐ์ค ๋ฐ ์ํฌ์ ์ฐธ์: ๋ณด์ ์ปจํผ๋ฐ์ค ๋ฐ ์ํฌ์์ ์ฐธ์ํ์ฌ ์ ๋ฌธ๊ฐ๋ก๋ถํฐ ๋ฐฐ์ฐ๊ณ ๋ค๋ฅธ ๋ณด์ ์ ๋ฌธ๊ฐ์ ๊ต๋ฅํ์ธ์.
- ๋ณด์ ์ปค๋ฎค๋ํฐ ์ฐธ์ฌ: ์จ๋ผ์ธ ํฌ๋ผ ๋ฐ ์ปค๋ฎค๋ํฐ์ ์ฐธ์ฌํ์ฌ ์ง์์ ๊ณต์ ํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ์ ๋ฐฐ์ฐ์ธ์.
NPM์ ์ํ ์ต์ ํ ์ ๋ต
NPM ์ํฌํ๋ก๋ฅผ ์ต์ ํํ๋ฉด ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๊ณ ๋น๋ ์๊ฐ์ ๋จ์ถํ ์ ์์ต๋๋ค.
1. ๋ก์ปฌ NPM ์บ์ ์ฌ์ฉํ๊ธฐ
NPM์ ๋ค์ด๋ก๋ํ ํจํค์ง๋ฅผ ๋ก์ปฌ์ ์บ์ํ๋ฏ๋ก ํ์ ์ค์น๊ฐ ๋ ๋น ๋ฆ ๋๋ค. ๋ก์ปฌ NPM ์บ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ธ์.
- `npm cache clean --force`: NPM ์บ์๋ฅผ ์ง์๋๋ค. ์์๋ ์บ์ ๋ฐ์ดํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ด ๋ช ๋ น์ ์ฌ์ฉํ์ธ์.
- ์บ์ ์์น ํ์ธ: `npm config get cache`๋ฅผ ์ฌ์ฉํ์ฌ npm ์บ์์ ์์น๋ฅผ ์ฐพ์ผ์ธ์.
2. ํจํค์ง ๊ด๋ฆฌ์ ๋ฏธ๋ฌ ๋๋ ํ๋ก์ ์ฌ์ฉํ๊ธฐ
์ธํฐ๋ท ์ฐ๊ฒฐ์ด ์ ํ๋ ํ๊ฒฝ์์ ์์ ํ๊ฑฐ๋ ๋ค์ด๋ก๋ ์๋๋ฅผ ๊ฐ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ํจํค์ง ๊ด๋ฆฌ์ ๋ฏธ๋ฌ ๋๋ ํ๋ก์ ์ฌ์ฉ์ ๊ณ ๋ คํด ๋ณด์ธ์.
- Verdaccio: ๊ฒฝ๋ ๋น๊ณต๊ฐ NPM ํ๋ก์ ๋ ์ง์คํธ๋ฆฌ์ ๋๋ค.
- Nexus Repository Manager: NPM ๋ฐ ๊ธฐํ ํจํค์ง ํ์์ ์ง์ํ๋ ๋ ํฌ๊ด์ ์ธ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ด๋ฆฌ์์ ๋๋ค.
- JFrog Artifactory: ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ ๋ณดํธํ๊ธฐ ์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ด๋ฆฌ์์ ๋๋ค.
3. ์์กด์ฑ ์ต์ํํ๊ธฐ
ํ๋ก์ ํธ์ ์์กด์ฑ์ด ์ ์์๋ก ๋น๋ ์๋๊ฐ ๋นจ๋ผ์ง๊ณ ๋ณด์ ์ํ์ ๋ ์ทจ์ฝํด์ง๋๋ค. ๊ฐ ์์กด์ฑ์ ์ ์คํ๊ฒ ํ๊ฐํ๊ณ ์ ๋ง ํ์ํ ๊ฒ๋ง ํฌํจํ์ธ์.
- ํธ๋ฆฌ ์ ฐ์ดํน(Tree shaking): ํธ๋ฆฌ ์ ฐ์ดํน์ ์ฌ์ฉํ์ฌ ์์กด์ฑ์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ธ์. Webpack ๋ฐ Rollup๊ณผ ๊ฐ์ ๋๊ตฌ๋ ํธ๋ฆฌ ์ ฐ์ดํน์ ์ง์ํฉ๋๋ค.
- ์ฝ๋ ์คํ๋ฆฌํ (Code splitting): ์ฝ๋ ์คํ๋ฆฌํ ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋์ธ์. ์ด๋ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
- ๋ค์ดํฐ๋ธ ๋์ ๊ณ ๋ ค: ์์กด์ฑ์ ์ถ๊ฐํ๊ธฐ ์ ์ ๋ค์ดํฐ๋ธ ์๋ฐ์คํฌ๋ฆฝํธ API๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋์ง ๊ณ ๋ คํด ๋ณด์ธ์.
4. `node_modules` ํฌ๊ธฐ ์ต์ ํํ๊ธฐ
`node_modules` ๋๋ ํฐ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ฉด ์ฑ๋ฅ์ ๊ฐ์ ํ๊ณ ๋ฐฐํฌ ์๊ฐ์ ๋จ์ถํ ์ ์์ต๋๋ค.
- `npm dedupe`: ๊ณตํต ์์กด์ฑ์ ํธ๋ฆฌ ์์ชฝ์ผ๋ก ์ด๋ํ์ฌ ์์กด์ฑ ํธ๋ฆฌ๋ฅผ ๋จ์ํํ๋ ค๊ณ ์๋ํฉ๋๋ค.
- `pnpm` ๋๋ `yarn` ์ฌ์ฉ: ์ด ํจํค์ง ๊ด๋ฆฌ์๋ค์ ํ๋ ๋งํฌ๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ๋ก์ ํธ ๊ฐ์ ํจํค์ง๋ฅผ ๊ณต์ ํจ์ผ๋ก์จ `node_modules` ๋๋ ํฐ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
๊ฒฐ๋ก
NPM์ ์ฌ์ฉํ ์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง ๊ด๋ฆฌ๋ฅผ ๋ง์คํฐํ๋ ๊ฒ์ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋ฉฐ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๊ณ ์์กด์ฑ ๋ณด์์ ์ฐ์ ์ํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ํฌํ๋ก๋ฅผ ํฌ๊ฒ ๊ฐ์ ํ๊ณ ์ํ์ ์ค์ด๋ฉฐ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๊ณ ํ์ง ์ํํธ์จ์ด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ต์ ๋ณด์ ์ํ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ ๋ณด๋ฅผ ๊ณ์ ์ ๋ฐ์ดํธํ๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ ๊ทผ ๋ฐฉ์์ ์กฐ์ ํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.