์ ์ธ๊ณ ๊ฐ๋ฐ์๋ฅผ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์ํ๊ณ์ ํจํค์ง ๊ด๋ฆฌ์ ํต์ฌ ์ญํ ์ ์ดํดํ๊ณ ํ์ฉํ๊ธฐ ์ํ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์ํ๊ณ ํ์: ํจํค์ง ๊ด๋ฆฌ์ ๋ํ ์ฌ์ธต ๋ถ์
์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ๋ ์ง๋ 10๋ ๊ฐ ๊ทน์ ์ธ ๋ณํ๋ฅผ ๊ฒช์์ต๋๋ค. ์น ๋ธ๋ผ์ฐ์ ์์ ์ฃผ๋ก ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์คํฌ๋ฆฝํ ์ ์ํด ์ฌ์ฉ๋๋ ์ธ์ด์์, ๋ณต์กํ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํฐ ๊ฒฌ๊ณ ํ ์๋ฒ ์ฌ์ด๋ ์ธํ๋ผ, ์ฌ์ง์ด ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ์ฑ๊น์ง ๋ชจ๋ ๊ฒ์ ๊ตฌ๋ํ๋ ๋ค์ฌ๋ค๋ฅํ ๊ฐ์๋ก ๋ฐ์ ํ์ต๋๋ค. ์ด ๋ฐ์ ์ ์ค์ฌ์๋ ์ ๊ตํ๊ณ ๋์์์ด ํ์ฅ๋๋ ๋ชจ๋ ์ํ๊ณ๊ฐ ์์ผ๋ฉฐ, ๊ทธ ์ํ๊ณ์ ํต์ฌ์ ํจํค์ง ๊ด๋ฆฌ์ ๋๋ค.
์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ ์ธ๋ถ ์ฝ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์์ ์ ์ฝ๋๋ฅผ ๊ณต์ ํ๋ฉฐ, ํ๋ก์ ํธ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด ๊ธ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์ํ๊ณ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํ๊ณ , ํนํ ํจํค์ง ๊ด๋ฆฌ์ ์ค์ํ ์ญํ ์ ์ด์ ์ ๋ง์ถ์ด ๊ทธ ์ญ์ฌ, ํต์ฌ ๊ฐ๋ , ์ธ๊ธฐ ์๋ ๋๊ตฌ ๋ฐ ์ ์ธ๊ณ ๋ ์๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ์ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ๊ธฐ์
์๋ฐ์คํฌ๋ฆฝํธ ์ด๊ธฐ์๋ ์ฌ๋ฌ ํ์ผ์ ๊ฑธ์ณ ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ด๋ณด์ ์ธ ์์ค์ด์์ต๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ข ์ข ์ ์ญ ์ค์ฝํ, ์คํฌ๋ฆฝํ ํ๊ทธ, ์๋์ ์ธ ํ์ผ ๋ณํฉ์ ์์กดํ์ผ๋ฉฐ, ์ด๋ ์ ์ฌ์ ์ธ ์ด๋ฆ ์ถฉ๋, ์ด๋ ค์ด ์ ์ง๋ณด์, ๋ช ํํ ์์กด์ฑ ๊ด๋ฆฌ์ ๋ถ์ฌ๋ก ์ด์ด์ก์ต๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ํ๋ก์ ํธ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๊ธ๋ฐฉ ์ง์ ๋ถ๊ฐ๋ฅํด์ก์ต๋๋ค.
์ฝ๋๋ฅผ ๋ณด๋ค ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์ฑํ๊ณ ์ฌ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ๋ํ ํ์์ฑ์ด ๋ช ๋ฐฑํด์ก์ต๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ๋ชจ๋ ํจํด์ ๊ฐ๋ฐ๋ก ์ด์ด์ก์ต๋๋ค:
- ์ฆ์ ์คํ ํจ์ ํํ์ (IIFE): ๋น๊ณต๊ฐ ์ค์ฝํ๋ฅผ ๋ง๋ค๊ณ ์ ์ญ ๋ค์์คํ์ด์ค ์ค์ผ์ ๋ฐฉ์งํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๋ชจ๋ ๊ณต๊ฐ ํจํด (Revealing Module Pattern): ๋ชจ๋์ ํน์ ๋ฉค๋ฒ๋ง ๋ ธ์ถํ๊ณ ๊ณต๊ฐ ๋ฉ์๋๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๋ชจ๋ ํจํด์ ๊ฐ์ ๋ ํํ์ ๋๋ค.
- CommonJS: ์๋ ์๋ฒ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ(Node.js)๋ฅผ ์ํด ๊ฐ๋ฐ๋์์ผ๋ฉฐ,
require()
์module.exports
๋ฅผ ์ฌ์ฉํ๋ ๋๊ธฐ์ ๋ชจ๋ ์ ์ ์์คํ ์ ๋์ ํ์ต๋๋ค. - ๋น๋๊ธฐ ๋ชจ๋ ์ ์ (AMD): ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํด ์ค๊ณ๋์์ผ๋ฉฐ, ์น ํ๊ฒฝ์์ ๋๊ธฐ์ ๋ก๋ฉ์ ํ๊ณ๋ฅผ ํด๊ฒฐํ๋ฉฐ ๋ชจ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ต๋๋ค.
์ด๋ฌํ ํจํด๋ค์ ์๋นํ ๋ฐ์ ์ ์๋ฏธํ์ง๋ง, ์ข ์ข ์๋ ๊ด๋ฆฌ๋ ํน์ ๋ก๋ ๊ตฌํ์ด ํ์ํ์ต๋๋ค. ์ง์ ํ ๋ํ๊ตฌ๋ ECMAScript ์ฌ์ ์์ฒด ๋ด์์ ๋ชจ๋์ด ํ์คํ๋๋ฉด์ ์ฐพ์์์ต๋๋ค.
ECMAScript ๋ชจ๋ (ESM): ํ์คํ๋ ์ ๊ทผ ๋ฐฉ์
ECMAScript 2015 (ES6)์ ๋ฑ์ฅ๊ณผ ํจ๊ป, ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ณต์์ ์ผ๋ก ์์ฒด ๋ค์ดํฐ๋ธ ๋ชจ๋ ์์คํ ์ ๋์ ํ์ผ๋ฉฐ, ์ด๋ ์ข ์ข ECMAScript ๋ชจ๋ (ESM)์ด๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ์ด ํ์คํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ๊ฐ์ ธ์์ต๋๋ค:
import
์export
๊ตฌ๋ฌธ: ํ์ผ ๊ฐ์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋ด๋ณด๋ด๋ ๋ช ํํ๊ณ ์ ์ธ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค.- ์ ์ ๋ถ์: ๋๊ตฌ๊ฐ ์คํ ์ ์ ๋ชจ๋ ์์กด์ฑ์ ๋ถ์ํ์ฌ ํธ๋ฆฌ ์์ดํน(tree shaking)๊ณผ ๊ฐ์ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฅ๋ ฅ์ ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๋ฐ Node.js ์ง์: ESM์ ์ด์ ์ต์ ๋ธ๋ผ์ฐ์ ์ Node.js ๋ฒ์ ์์ ๋๋ฆฌ ์ง์๋์ด ํต์ผ๋ ๋ชจ๋ ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
import
์ export
๊ตฌ๋ฌธ์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ์ด์์
๋๋ค. ์๋ฅผ ๋ค์ด:
mathUtils.js
:
export function add(a, b) {
return a + b;
}
export const PI = 3.14159;
main.js
:
import { add, PI } from './mathUtils.js';
console.log(add(5, 3)); // Output: 8
console.log(PI); // Output: 3.14159
์ด ํ์คํ๋ ๋ชจ๋ ์์คํ ์ ๋ ๊ฒฌ๊ณ ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ๋ฅผ ์ํ ๊ธฐ๋ฐ์ ๋ง๋ จํ์ต๋๋ค.
ํจํค์ง ๊ด๋ฆฌ์ ์ค์ํ ์ญํ
์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ๊ฐ ์ฑ์ํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ์๊ฐ ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํจ์ ๋ฐ๋ผ, ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๊ฐ ๋ํ๋ฌ์ต๋๋ค: ๊ฐ๋ฐ์๋ค์ ์ด๋ป๊ฒ ์ด๋ฌํ ์ธ๋ถ ์ฝ๋ ํจํค์ง๋ฅผ ํจ์จ์ ์ผ๋ก ๋ฐ๊ฒฌ, ์ค์น, ๊ด๋ฆฌ, ์ ๋ฐ์ดํธํ ์ ์์๊น? ๋ฐ๋ก ์ด ์ง์ ์์ ํจํค์ง ๊ด๋ฆฌ๊ฐ ํ์ ๋ถ๊ฐ๊ฒฐํด์ง๋๋ค.
ํจํค์ง ๊ด๋ฆฌ์๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ ์ ๊ตํ ๋๊ตฌ์ ๋๋ค:
- ์์กด์ฑ ๊ด๋ฆฌ: ํ๋ก์ ํธ๊ฐ ์์กดํ๋ ๋ชจ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ์ ํ์ฌ ์ฌ๋ฐ๋ฅธ ๋ฒ์ ์ด ์ค์น๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ํจํค์ง ์ค์น: ์ค์ ๋ ์ง์คํธ๋ฆฌ์์ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
- ํจํค์ง ์ ๋ฐ์ดํธ: ํจํค์ง๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์๊ฒ ํ๋ฉฐ, ์ข ์ข ์ ๋ฐ์ดํธ ๋ฒ์๋ฅผ ์ ์ดํ๋ ์ต์ (์: ๋ง์ด๋ ๋ฒ์ ๋ ๋ฉ์ด์ ๋ฒ์ )์ ์ ๊ณตํฉ๋๋ค.
- ํจํค์ง ๊ฒ์: ๊ฐ๋ฐ์๊ฐ ์์ ์ ์ฝ๋๋ฅผ ๋ ๋์ ์ปค๋ฎค๋ํฐ์ ๊ณต์ ํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
- ์ฌํ์ฑ ๋ณด์ฅ: ๋ค๋ฅธ ์ปดํจํฐ์ ๋ค๋ฅธ ํ์๋ค ๊ฐ์ ์ผ๊ด๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๋๋ ๋ฐ ๋์์ ์ค๋๋ค.
ํจํค์ง ๊ด๋ฆฌ์๊ฐ ์๋ค๋ฉด, ๊ฐ๋ฐ์๋ค์ ๋ชจ๋ ์ธ๋ถ ์ฝ๋๋ฅผ ์๋์ผ๋ก ๋ค์ด๋ก๋, ์ฐ๊ฒฐ, ๊ด๋ฆฌํด์ผ ํ ๊ฒ์ด๋ฉฐ, ์ด๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ณ ์๊ฐ์ด ๋ง์ด ์์๋๋ฉฐ ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์์๋ ์ ํ ์ค์ฉ์ ์ด์ง ์์ ๊ณผ์ ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง ๊ด๋ฆฌ์ ๊ฑฐ์ธ๋ค
์๋ ์ ๊ฑธ์ณ ์ฌ๋ฌ ํจํค์ง ๊ด๋ฆฌ์๊ฐ ๋ฑ์ฅํ๊ณ ๋ฐ์ ํ์ต๋๋ค. ์ค๋๋ , ์๋ฐ์คํฌ๋ฆฝํธ ์ธ๊ณ์์ ๋ช๋ช์ด ์ง๋ฐฐ์ ์ธ ์ธ๋ ฅ์ผ๋ก ๋๊ฐ์ ๋ํ๋ด๊ณ ์์ต๋๋ค:
1. npm (Node Package Manager)
npm์ Node.js์ ๊ธฐ๋ณธ ํจํค์ง ๊ด๋ฆฌ์์ด๋ฉฐ ์ค๋ซ๋์ ์ฌ์ค์์ ํ์ค์ด์์ต๋๋ค. ์ธ๊ณ์์ ๊ฐ์ฅ ํฐ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํ๊ณ์ ๋๋ค.
- ์ญ์ฌ: Isaac Z. Schlueter์ ์ํด ๋ง๋ค์ด์ ธ 2010๋ ์ ์ถ์๋ npm์ Node.js ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๊ณผ์ ์ ๋จ์ํํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค.
- ๋ ์ง์คํธ๋ฆฌ: npm์ ์๋ฐฑ๋ง ๊ฐ์ ํจํค์ง๊ฐ ํธ์คํ ๋๋ ๊ฑฐ๋ํ ๊ณต๊ฐ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ด์ํฉ๋๋ค.
package.json
: ์ด JSON ํ์ผ์ npm ํ๋ก์ ํธ์ ์ฌ์ฅ์ ๋๋ค. ๋ฉํ๋ฐ์ดํฐ, ์คํฌ๋ฆฝํธ, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ๊ฒ๋ ํ๋ก์ ํธ์ ์์กด์ฑ์ ์ ์ํฉ๋๋ค.package-lock.json
: ๋์ค์ ๋์ ๋ ์ด ํ์ผ์ ์ ์ด ์์กด์ฑ์ ํฌํจํ ๋ชจ๋ ์์กด์ฑ์ ์ ํํ ๋ฒ์ ์ ๊ณ ์ ํ์ฌ ์ฌํ ๊ฐ๋ฅํ ๋น๋๋ฅผ ๋ณด์ฅํฉ๋๋ค.- ์ฃผ์ ๋ช ๋ น์ด:
npm install <package_name>
: ํจํค์ง๋ฅผ ์ค์นํ๊ณpackage.json
์ ์ถ๊ฐํฉ๋๋ค.npm install
:package.json
์ ๋์ด๋ ๋ชจ๋ ์์กด์ฑ์ ์ค์นํฉ๋๋ค.npm update
:package.json
์ ๋ฐ๋ผ ํ์ฉ๋ ์ต์ ๋ฒ์ ์ผ๋ก ํจํค์ง๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.npm uninstall <package_name>
: ํจํค์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค.npm publish
: npm ๋ ์ง์คํธ๋ฆฌ์ ํจํค์ง๋ฅผ ๊ฒ์ํฉ๋๋ค.
์ฌ์ฉ ์์ (package.json
):
{
"name": "my-web-app",
"version": "1.0.0",
"description": "A simple web application",
"main": "index.js",
"dependencies": {
"react": "^18.2.0",
"axios": "~0.27.0"
},
"scripts": {
"start": "node index.js"
}
}
์ด ์์์ "react": "^18.2.0"
๋ React ๋ฒ์ 18.2.0 ๋๋ ๊ทธ ์ดํ์ ๋ง์ด๋/ํจ์น ๋ฒ์ (์๋ก์ด ๋ฉ์ด์ ๋ฒ์ ์ ์ธ)์ ์ค์นํด์ผ ํจ์ ๋ํ๋
๋๋ค. "axios": "~0.27.0"
๋ Axios ๋ฒ์ 0.27.0 ๋๋ ๊ทธ ์ดํ์ ํจ์น ๋ฒ์ (์๋ก์ด ๋ง์ด๋ ๋๋ ๋ฉ์ด์ ๋ฒ์ ์ ์ธ)์ ์๋ฏธํฉ๋๋ค.
2. Yarn
Yarn์ 2016๋ ํ์ด์ค๋ถ(ํ ๋ฉํ)์ ์ํด ๊ฐ๋ฐ๋์์ผ๋ฉฐ, ์ฃผ๋ก ์๋, ์ผ๊ด์ฑ, ๋ณด์๊ณผ ๊ด๋ จ๋ npm์ ๋ฌธ์ ์ ์ ๋ํ ๋์์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค.
- ์ฃผ์ ํน์ง:
- ์ฑ๋ฅ: Yarn์ ๋ณ๋ ฌ ํจํค์ง ์ค์น์ ์บ์ฑ์ ๋์ ํ์ฌ ์ค์น ๊ณผ์ ์ ํฌ๊ฒ ๋จ์ถํ์ต๋๋ค.
- ์ผ๊ด์ฑ: npm์
package-lock.json
๊ณผ ์ ์ฌํyarn.lock
ํ์ผ์ ์ฌ์ฉํ์ฌ ๊ฒฐ์ ๋ก ์ ์ธ ์ค์น๋ฅผ ๋ณด์ฅํ์ต๋๋ค. - ์คํ๋ผ์ธ ๋ชจ๋: Yarn์ ์ธํฐ๋ท ์ฐ๊ฒฐ ์์ด๋ ์บ์์์ ํจํค์ง๋ฅผ ์ค์นํ ์ ์์์ต๋๋ค.
- ์ํฌ์คํ์ด์ค: ๋ชจ๋ ธ๋ ํฌ(์ฌ๋ฌ ํจํค์ง๋ฅผ ํฌํจํ๋ ์ ์ฅ์) ๊ด๋ฆฌ๋ฅผ ์ํ ๋ด์ฅ ์ง์ ๊ธฐ๋ฅ์ ๋๋ค.
- ์ฃผ์ ๋ช ๋ น์ด: Yarn์ ๋ช ๋ น์ด๋ ์ผ๋ฐ์ ์ผ๋ก npm๊ณผ ์ ์ฌํ๋ฉฐ, ์ข ์ข ์ฝ๊ฐ ๋ค๋ฅธ ๊ตฌ๋ฌธ์ ๊ฐ์ง๋๋ค.
yarn add <package_name>
: ํจํค์ง๋ฅผ ์ค์นํ๊ณpackage.json
๊ณผyarn.lock
์ ์ถ๊ฐํฉ๋๋ค.yarn install
: ๋ชจ๋ ์์กด์ฑ์ ์ค์นํฉ๋๋ค.yarn upgrade
: ํจํค์ง๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.yarn remove <package_name>
: ํจํค์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค.yarn publish
: ํจํค์ง๋ฅผ ๊ฒ์ํฉ๋๋ค.
Yarn Classic (v1)์ ๋งค์ฐ ์ํฅ๋ ฅ์ด ์์์ง๋ง, ์ดํ Yarn์ ํ๋ฌ๊ทธํ ์ํคํ
์ฒ์ Plug'n'Play (PnP) ์ค์น ์ ๋ต์ ์ ๊ณตํ๋ Yarn Berry (v2+)๋ก ๋ฐ์ ํ์ต๋๋ค. PnP๋ node_modules
ํด๋๊ฐ ์ ํ ํ์ ์๊ฒ ๋ง๋ค์ด ํจ์ฌ ๋น ๋ฅธ ์ค์น์ ํฅ์๋ ์์ ์ฑ์ ์ ๊ณตํฉ๋๋ค.
3. pnpm (Performant npm)
pnpm์ ๋์คํฌ ๊ณต๊ฐ ํจ์จ์ฑ๊ณผ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ๋ ๋ค๋ฅธ ํ๋์ ์ธ ํจํค์ง ๊ด๋ฆฌ์์ ๋๋ค.
- ์ฃผ์ ํน์ง:
- ์ฝํ
์ธ ์ฃผ์ ์ง์ ๊ฐ๋ฅ ์คํ ๋ฆฌ์ง: pnpm์ ํจํค์ง๋ฅผ ์ํ ์ ์ญ ์ ์ฅ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ํ๋ก์ ํธ์
node_modules
์ ํจํค์ง๋ฅผ ๋ณต์ฌํ๋ ๋์ , ์ ์ญ ์ ์ฅ์์ ์๋ ํจํค์ง๋ก ํ๋ ๋งํฌ๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ํนํ ๊ณตํต ์์กด์ฑ์ด ๋ง์ ํ๋ก์ ํธ์์ ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ๋์ ํฌ๊ฒ ์ค์ ๋๋ค. - ๋น ๋ฅธ ์ค์น: ํจ์จ์ ์ธ ์ ์ฅ ๋ฐ ์ฐ๊ฒฐ ๋ฉ์ปค๋์ฆ ๋๋ถ์ pnpm ์ค์น๋ ์ข ์ข ํจ์ฌ ๋น ๋ฆ ๋๋ค.
- ์๊ฒฉํจ: pnpm์ ๋ ์๊ฒฉํ
node_modules
๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ์ฌ ์ ๋ น ์์กด์ฑ(package.json
์ ๋ช ์์ ์ผ๋ก ๋์ด๋์ง ์์ ํจํค์ง์ ์ ๊ทผํ๋ ๊ฒ)์ ๋ฐฉ์งํฉ๋๋ค. - ๋ชจ๋ ธ๋ ํฌ ์ง์: Yarn๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก pnpm์ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ํ๋ฅญํ๊ฒ ์ง์ํฉ๋๋ค.
- ์ฃผ์ ๋ช ๋ น์ด: ๋ช ๋ น์ด๋ npm ๋ฐ Yarn๊ณผ ์ ์ฌํฉ๋๋ค.
pnpm install <package_name>
pnpm install
pnpm update
pnpm remove <package_name>
pnpm publish
์ฌ๋ฌ ํ๋ก์ ํธ์์ ์์ ํ๊ฑฐ๋ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃจ๋ ๊ฐ๋ฐ์์๊ฒ pnpm์ ํจ์จ์ฑ์ ์๋นํ ์ด์ ์ด ๋ ์ ์์ต๋๋ค.
ํจํค์ง ๊ด๋ฆฌ์ ํต์ฌ ๊ฐ๋
๋๊ตฌ ์์ฒด๋ฅผ ๋์ด, ํจ๊ณผ์ ์ธ ํจํค์ง ๊ด๋ฆฌ๋ฅผ ์ํด์๋ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
1. ์์กด์ฑ๊ณผ ์ ์ด ์์กด์ฑ
์ง์ ์์กด์ฑ์ ํ๋ก์ ํธ์ ๋ช ์์ ์ผ๋ก ์ถ๊ฐํ๋ ํจํค์ง(์: React, Lodash)์ ๋๋ค. ์ ์ด ์์กด์ฑ(๋๋ ๊ฐ์ ์์กด์ฑ)์ ์ง์ ์์กด์ฑ์ด ์์กดํ๋ ํจํค์ง์ ๋๋ค. ํจํค์ง ๊ด๋ฆฌ์๋ ํ๋ก์ ํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋๋ก ์ด ์ ์ฒด ์์กด์ฑ ํธ๋ฆฌ๋ฅผ ๊ผผ๊ผผํ๊ฒ ์ถ์ ํ๊ณ ์ค์นํฉ๋๋ค.
'A' ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ๋ฅผ ์๊ฐํด๋ณด์ญ์์ค. 'A'๋ ๋ค์ 'B'์ 'C' ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. 'B'์ 'C'๋ ํ๋ก์ ํธ์ ์ ์ด ์์กด์ฑ์ ๋๋ค. npm, Yarn, pnpm๊ณผ ๊ฐ์ ํ๋์ ์ธ ํจํค์ง ๊ด๋ฆฌ์๋ ์ด๋ฌํ ์ฐ์์ ์ธ ์์กด์ฑ์ ํด๊ฒฐ๊ณผ ์ค์น๋ฅผ ์ํํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
2. ์๋งจํฑ ๋ฒ์ ๋ (SemVer)
์๋งจํฑ ๋ฒ์ ๋์ ์ํํธ์จ์ด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ท์ฝ์
๋๋ค. ๋ฒ์ ์ ์ผ๋ฐ์ ์ผ๋ก MAJOR.MINOR.PATCH
(์: 1.2.3
)๋ก ํํ๋ฉ๋๋ค.
- MAJOR: ํ์ ํธํ๋์ง ์๋ API ๋ณ๊ฒฝ์ด ์์ ๋ ์ฌ๋ฆฝ๋๋ค.
- MINOR: ํ์ ํธํ์ฑ์ ์ ์งํ๋ฉด์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋ ์ฌ๋ฆฝ๋๋ค.
- PATCH: ํ์ ํธํ์ฑ์ ์ ์งํ๋ ๋ฒ๊ทธ ์์ ์ด ์์ ๋ ์ฌ๋ฆฝ๋๋ค.
ํจํค์ง ๊ด๋ฆฌ์๋ package.json
์ ๋ช
์๋ SemVer ๋ฒ์(์: ํธํ๋๋ ์
๋ฐ์ดํธ๋ฅผ ์ํ ^
, ํจ์น ์
๋ฐ์ดํธ๋ฅผ ์ํ ~
)๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํ ์์กด์ฑ ๋ฒ์ ์ ๊ฒฐ์ ํฉ๋๋ค. SemVer๋ฅผ ์ดํดํ๋ ๊ฒ์ ์
๋ฐ์ดํธ๋ฅผ ์์ ํ๊ฒ ๊ด๋ฆฌํ๊ณ ์๊ธฐ์น ์์ ์ค๋ฅ๋ฅผ ํผํ๋ ๋ฐ ํ์์ ์
๋๋ค.
3. ์ ๊ธ ํ์ผ (Lock Files)
package-lock.json
(npm), yarn.lock
(Yarn), pnpm-lock.yaml
(pnpm)์ ํ๋ก์ ํธ์ ์ค์น๋ ๋ชจ๋ ํจํค์ง์ ์ ํํ ๋ฒ์ ์ ๊ธฐ๋กํ๋ ์ค์ํ ํ์ผ์
๋๋ค. ์ด ํ์ผ๋ค์:
- ๊ฒฐ์ ๋ก ๋ณด์ฅ: ํ์ ๋ชจ๋ ์ฌ๋๊ณผ ๋ชจ๋ ๋ฐฐํฌ ํ๊ฒฝ์ด ์ ํํ ๋์ผํ ์์กด์ฑ ๋ฒ์ ์ ๊ฐ๋๋ก ๋ณด์ฅํ์ฌ "๋ด ์ปดํจํฐ์์๋ ๋๋๋ฐ" ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ํ๊ท ๋ฐฉ์ง: ํน์ ๋ฒ์ ์ ๊ณ ์ ํ์ฌ ํธํ๋์ง ์๋ ๋ฒ์ ์ผ๋ก์ ์๊ธฐ์น ์์ ์ ๋ฐ์ดํธ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค.
- ์ฌํ์ฑ ์ง์: CI/CD ํ์ดํ๋ผ์ธ๊ณผ ์ฅ๊ธฐ์ ์ธ ํ๋ก์ ํธ ์ ์ง๋ณด์์ ํ์์ ์ ๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก: ํญ์ ์ ๊ธ ํ์ผ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (์: Git)์ ์ปค๋ฐํ์ญ์์ค.
4. package.json
์ ์คํฌ๋ฆฝํธ
package.json
์ scripts
์น์
์์๋ ์ฌ์ฉ์ ์ ์ ๋ช
๋ น์ค ์์
์ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ์๋ํํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
"start": "node index.js"
"build": "webpack --mode production"
"test": "jest"
"lint": "eslint ."
๊ทธ๋ฐ ๋ค์ npm run start
, yarn build
, pnpm test
์ ๊ฐ์ ๋ช
๋ น์ด๋ก ์ด๋ฌํ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
๊ณ ๊ธ ํจํค์ง ๊ด๋ฆฌ ์ ๋ต ๋ฐ ๋๊ตฌ
ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์ ๋ฐ๋ผ ๋ ์ ๊ตํ ์ ๋ต๊ณผ ๋๊ตฌ๊ฐ ํ์ํ๊ฒ ๋ฉ๋๋ค:
1. ๋ชจ๋ ธ๋ ํฌ (Monorepos)
๋ชจ๋ ธ๋ ํฌ๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ณ ํ๋ก์ ํธ๋ ํจํค์ง๋ฅผ ํฌํจํ๋ ์ ์ฅ์์ ๋๋ค. ์ด๋ฌํ ์ํธ ์ฐ๊ฒฐ๋ ํ๋ก์ ํธ๋ค ๊ฐ์ ์์กด์ฑ ๋ฐ ๋น๋๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ณต์กํ ์ ์์ต๋๋ค.
- ๋๊ตฌ: Yarn Workspaces, npm Workspaces, pnpm Workspaces๋ ์์กด์ฑ ํธ์ด์คํ , ๊ณต์ ์์กด์ฑ ํ์ฑํ, ํจํค์ง ๊ฐ ์ฐ๊ฒฐ ๋จ์ํ๋ฅผ ํตํด ๋ชจ๋ ธ๋ ํฌ ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ ๋ด์ฅ ๊ธฐ๋ฅ์ ๋๋ค.
- ์ด์ : ์ฌ์ด ์ฝ๋ ๊ณต์ , ๊ด๋ จ ํจํค์ง์ ๋ํ ์์์ ์ปค๋ฐ, ๋จ์ํ๋ ์์กด์ฑ ๊ด๋ฆฌ, ํฅ์๋ ํ์ .
- ๊ธ๋ก๋ฒ ๊ณ ๋ ค์ฌํญ: ๊ตญ์ ์ ์ธ ํ์ ๊ฒฝ์ฐ, ์ ๊ตฌ์กฐํ๋ ๋ชจ๋ ธ๋ ํฌ๋ ํ ์์น๋ ์๊ฐ๋์ ๊ด๊ณ์์ด ๊ณต์ ์ปดํฌ๋ํธ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋จ์ผ ์ ๋ณด ์์ค๋ฅผ ๋ณด์ฅํ์ฌ ํ์ ์ ๊ฐ์ํํ ์ ์์ต๋๋ค.
2. ๋ฒ๋ค๋ฌ์ ํธ๋ฆฌ ์์ดํน
Webpack, Rollup, Parcel๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค. ์ด๋ค์ ๋ชจ๋ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ํ๋ ์ด์์ ์ต์ ํ๋ ํ์ผ๋ก ๊ฒฐํฉํฉ๋๋ค.
- ํธ๋ฆฌ ์์ดํน (Tree Shaking): ์ฌ์ฉ๋์ง ์๋ ์ฝ๋(์ฃฝ์ ์ฝ๋)๋ฅผ ์ต์ข ๋ฒ๋ค์์ ์ ๊ฑฐํ๋ ์ต์ ํ ๊ธฐ์ ์ ๋๋ค. ESM์ import ๋ฐ export ์ ์ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ์ฌ ์๋ํฉ๋๋ค.
- ํจํค์ง ๊ด๋ฆฌ์ ๋ฏธ์น๋ ์ํฅ: ํจ๊ณผ์ ์ธ ํธ๋ฆฌ ์์ดํน์ ์ต์ข ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์์ ๋ก๋ ์๊ฐ์ ๋จ์ถ์ํต๋๋ค. ํจํค์ง ๊ด๋ฆฌ์๋ ๋ฒ๋ค๋ฌ๊ฐ ์ฒ๋ฆฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
3. ๋น๊ณต๊ฐ ๋ ์ง์คํธ๋ฆฌ (Private Registries)
๋ ์ ์ ์ธ ํจํค์ง๋ฅผ ๊ฐ๋ฐํ๊ฑฐ๋ ์์กด์ฑ์ ๋ ๊ฐ๋ ฅํ๊ฒ ์ ์ดํ๊ณ ์ ํ๋ ์กฐ์ง์๊ฒ ๋น๊ณต๊ฐ ๋ ์ง์คํธ๋ฆฌ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ์๋ฃจ์ : npm Enterprise, GitHub Packages, GitLab Package Registry, Verdaccio(์คํ์์ค ์์ฒด ํธ์คํ ๋ ์ง์คํธ๋ฆฌ)์ ๊ฐ์ ์๋น์ค๋ฅผ ํตํด ์์ฒด ๋น๊ณต๊ฐ npm ํธํ ์ ์ฅ์๋ฅผ ํธ์คํ ํ ์ ์์ต๋๋ค.
- ์ด์ : ํฅ์๋ ๋ณด์, ๋ด๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ ๊ทผ ์ ์ด, ์กฐ์ง์ ํ์์ ๋ง๋ ์์กด์ฑ ๊ด๋ฆฌ ๋ฅ๋ ฅ. ์ด๋ ๋ค์ํ ๊ธ๋ก๋ฒ ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์๊ฒฉํ ๊ท์ ์ค์ ๋๋ ๋ณด์ ์๊ตฌ ์ฌํญ์ด ์๋ ๊ธฐ์ ์ ํนํ ๊ด๋ จ์ด ์์ต๋๋ค.
4. ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ
Lerna ๋ฐ Nx์ ๊ฐ์ ๋๊ตฌ๋ ์ฌ๋ฌ ํจํค์ง๊ฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ, ํนํ ๋ชจ๋ ธ๋ ํฌ ๊ตฌ์กฐ ๋ด์์ ๊ด๋ฆฌํ๋ ๋ฐ ํนํ๋์ด ์ค๊ณ๋์์ต๋๋ค. ์ด๋ค์ ๋ง์ ํจํค์ง์ ๊ฑธ์ณ ๋ฒ์ ๊ด๋ฆฌ, ๊ฒ์, ์คํฌ๋ฆฝํธ ์คํ๊ณผ ๊ฐ์ ์์ ์ ์๋ํํฉ๋๋ค.
5. ํจํค์ง ๊ด๋ฆฌ์ ๋์ ๋ฐ ๋ฏธ๋ ๋ํฅ
ํ๊ฒฝ์ ํญ์ ์งํํ๊ณ ์์ต๋๋ค. npm, Yarn, pnpm์ด ์ง๋ฐฐ์ ์ด์ง๋ง ๋ค๋ฅธ ๋๊ตฌ์ ์ ๊ทผ ๋ฐฉ์์ด ๊ณ์ํด์ ๋ฑ์ฅํ๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํตํฉ๋ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ณด๋ค ํตํฉ๋ ๋น๋ ๋๊ตฌ ๋ฐ ํจํค์ง ๊ด๋ฆฌ์์ ๊ฐ๋ฐ์ ์ฃผ๋ชฉํ ๋งํ ์ถ์ธ์ ๋๋ค.
๊ธ๋ก๋ฒ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ ์ธ๊ณ์ ๋ถ์ฐ๋ ํ์ ์ํด ์ํํ๊ณ ํจ์จ์ ์ธ ํจํค์ง ๊ด๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ์ผ๊ด๋ ํจํค์ง ๊ด๋ฆฌ์ ์ฌ์ฉ: ์ ์ฒด ํ๊ณผ ๋ชจ๋ ํ๋ก์ ํธ ํ๊ฒฝ์์ ๋จ์ผ ํจํค์ง ๊ด๋ฆฌ์(npm, Yarn ๋๋ pnpm)๋ฅผ ์ ํ๊ณ ๊ณ ์ํ์ญ์์ค. ์ด๋ ํผ๋๊ณผ ์ ์ฌ์ ์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค.
- ์ ๊ธ ํ์ผ ์ปค๋ฐ: ํญ์
package-lock.json
,yarn.lock
, ๋๋pnpm-lock.yaml
ํ์ผ์ ๋ฒ์ ๊ด๋ฆฌ์ ์ปค๋ฐํ์ญ์์ค. ์ด๋ ์ฌํ ๊ฐ๋ฅํ ๋น๋๋ฅผ ์ํ ๊ฐ์ฅ ์ค์ํ ๋จ๊ณ ์ค ํ๋์ ๋๋ค. - ์คํฌ๋ฆฝํธ ํจ์จ์ ํ์ฉ:
package.json
์scripts
์น์ ์ ํ์ฉํ์ฌ ๊ณตํต ์์ ์ ์บก์ํํ์ญ์์ค. ์ด๋ ๊ฐ๋ฐ์๋ค์๊ฒ ์ด์ ์ฒด์ ๋ ์ ํธํ๋ ์ ธ์ ๊ด๊ณ์์ด ์ผ๊ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. - ๋ฒ์ ๋ฒ์ ์ดํด:
package.json
์ ๋ช ์๋ ๋ฒ์ ๋ฒ์(์:^
,~
)์ ์ ์ํ์ญ์์ค. ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ๋ ๋ณ๊ฒฝ์ ๋์ ํ ์ํ์ ์ต์ํํ๋ฉด์ ํ์ํ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํ๋ ๊ฐ์ฅ ์ ํ์ ์ธ ๋ฒ์๋ฅผ ์ฌ์ฉํ์ญ์์ค. - ์ ๊ธฐ์ ์ธ ์์กด์ฑ ๊ฐ์ฌ:
npm audit
,yarn audit
,snyk
์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ์์ ์๋ ค์ง ๋ณด์ ์ทจ์ฝ์ ์ ํ์ธํ์ญ์์ค. - ๋ช ํํ ๋ฌธ์ํ: ์ ํํ ํจํค์ง ๊ด๋ฆฌ์ ์ค์น ๋ฐ ์์กด์ฑ ๊ฐ์ ธ์ค๊ธฐ ์ง์นจ์ ํฌํจํ์ฌ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ํํ ๋ฌธ์๋ฅผ ์ ์งํ์ญ์์ค. ์ด๋ ์ด๋ค ์ง์ญ์์๋ ์๋ก์ด ํ์์ ์จ๋ณด๋ฉํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- ๋ชจ๋ ธ๋ ํฌ ๋๊ตฌ ํ๋ช ํ๊ฒ ํ์ฉ: ์ฌ๋ฌ ํจํค์ง๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ, ๋ชจ๋ ธ๋ ํฌ ๋๊ตฌ๋ฅผ ์ดํดํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๋ ๋ฐ ์๊ฐ์ ํฌ์ํ์ญ์์ค. ์ด๋ ๊ฐ๋ฐ์ ๊ฒฝํ๊ณผ ํ๋ก์ ํธ ์ ์ง ๊ด๋ฆฌ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ ๊ณ ๋ ค: ์ ์ธ๊ณ์ ํผ์ ธ ์๋ ํ์ ๊ฒฝ์ฐ ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ผ๋ก ์ธํด ํจํค์ง ์ค์น ์๊ฐ์ด ์ํฅ์ ๋ฐ์ ์ ์์ต๋๋ค. ํจ์จ์ ์ธ ์บ์ฑ ๋ฐ ์ค์น ์ ๋ต์ ๊ฐ์ถ ๋๊ตฌ(pnpm ๋๋ Yarn Berry์ PnP ๋ฑ)๊ฐ ํนํ ์ ์ฉํ ์ ์์ต๋๋ค.
- ๊ธฐ์ ์๊ตฌ๋ฅผ ์ํ ๋น๊ณต๊ฐ ๋ ์ง์คํธ๋ฆฌ: ์กฐ์ง์ด ๋ฏผ๊ฐํ ์ฝ๋๋ฅผ ๋ค๋ฃจ๊ฑฐ๋ ์๊ฒฉํ ์์กด์ฑ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋น๊ณต๊ฐ ๋ ์ง์คํธ๋ฆฌ ์ค์ ์ ๊ฒํ ํ์ญ์์ค.
๊ฒฐ๋ก
npm, Yarn, pnpm๊ณผ ๊ฐ์ ๊ฒฌ๊ณ ํ ํจํค์ง ๊ด๋ฆฌ์์ ์ํด ๊ตฌ๋๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์ํ๊ณ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ปค๋ฎค๋ํฐ ๋ด์ ์ง์์ ์ธ ํ์ ์ ์ฆ๋ช ํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ค์ ๋จ์ํ ์ ํธ๋ฆฌํฐ๊ฐ ์๋๋ผ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ด ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์จ์ ์ด๊ณ ์์ ์ ์ผ๋ก ๊ตฌ์ถ, ๊ณต์ , ์ ์ง ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์ ๋๋ค.
๋ชจ๋ ํด์, ์์กด์ฑ ๊ด๋ฆฌ, ์๋งจํฑ ๋ฒ์ ๋์ ๊ฐ๋ ๊ณผ ํจํค์ง ๊ด๋ฆฌ์ ๋ฐ ๊ด๋ จ ๋๊ตฌ์ ์ค์ ์ฌ์ฉ๋ฒ์ ์๋ฌํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ค์ ๋ฐฉ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์ ์์ ์๊ฒ ํ์ํ ์ ์์ต๋๋ค. ๊ธ๋ก๋ฒ ํ์๊ฒ ํจํค์ง ๊ด๋ฆฌ์์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํ๋ ๊ฒ์ ๊ธฐ์ ์ ํจ์จ์ฑ์ ๊ดํ ๊ฒ์ผ ๋ฟ๋ง ์๋๋ผ, ํ์ ์ ์ด์งํ๊ณ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ฉฐ ๊ถ๊ทน์ ์ผ๋ก ์ง๋ฆฌ์ ๊ฒฝ๊ณ๋ฅผ ๋์ด ๊ณ ํ์ง ์ํํธ์จ์ด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๊ดํ ๊ฒ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ธ๊ณ๊ฐ ๊ณ์ ์งํํจ์ ๋ฐ๋ผ ํจํค์ง ๊ด๋ฆฌ์ ์๋ก์ด ๋ฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์์ฐ์ฑ์ ์ ์งํ๊ณ ์ด ์ญ๋์ ์ธ ์ํ๊ณ์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ํ์ฉํ๋ ์ด์ ๊ฐ ๋ ๊ฒ์ ๋๋ค.