์๋น์ค์ ํ์ํ ํจํค์ง๋ฅผ ํ๋์ฉ ์ถ๊ฐํ๋ค ๋ณด๋ฉด ํจํค์ง ์๊ฐ 100๊ฐ๋ฅผ ํ์ฉ ๋์ด ๋ฒ๋ฆฌ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ ํจํค์ง๋ ์ ๋ง๋ค ๊ณ ์ ํ ๋ฒ์ ์ด ์์ผ๋ฏ๋ก ์ด๋๊ฐ์ ๊ธฐ๋กํด๋์ด์ผ ํ๋ค. ๊ฐ์ ํจํค์ง๋ผ๋ ๋ฒ์ ๋ณ๋ก ๊ธฐ๋ฅ์ด ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ๋์ผํ ๋ฒ์ ์ ์ค์นํ์ง ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ์ด ๋ ์ค์นํ ํจํค์ง์ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ํ์ผ์ด package.json์ด๋ค.
๋ฐ๋ผ์ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ ์ ์ package.json๋ถํฐ ๋ง๋ค๊ณ ์์ํ๋ ๊ฒ์ด ์ข๋ค. npm์ package.json์ ๋ง๋๋ ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํ๋ค.
โ package.json ๋ง๋ค๊ธฐ
- package name : ํจํค์ง์ ์ด๋ฆ์ด๋ค. package.json์ name ์์ฑ์ ์ ์ฅ๋๋ค.
- version : ํจํค์ง์ ๋ฒ์ ์ด๋ค. npm์ ๋ฒ์ ์ ๋ค์ ์๊ฒฉํ๊ฒ ๊ด๋ฆฌ๋๋ค.
- entry point : ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ํ์ผ ์ง์ ์ ์ด๋ค. ๋ณดํต ๋ง์ง๋ง์ผ๋ก module.exports๋ฅผ ํ๋ ํ์ผ์ ์ง์ ํ๋ค. package.json์ main ์์ฑ์ ์ ์ฅ๋๋ค.
- test command : ์ฝ๋๋ฅผ ํ ์คํธํ ๋ ์ ๋ ฅํ ๋ช ๋ น์ด๋ฅผ ์๋ฏธํ๋ค. package.json scripts ์์ฑ ์์ test ์์ฑ์ ์ ์ฅ๋๋ค.
- git repository : ์ฝ๋๋ฅผ ์ ์ฅํด๋ git ์ ์ฅ์ ์ฃผ์๋ฅผ ์๋ฏธํ๋ค. package.json์ repository ์์ฑ์ ์ ์ฅ๋๋ค.
- keywords : ํค์๋๋ npm ๊ณต์ ํํ์ด์ง์์ ํจํค์ง๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๊ฒ ํด์ค๋ค. package.json์ keywords ์์ฑ์ ์ ์ฅ๋๋ค.
- license : ํด๋น ํจํค์ง์ ๋ผ์ด์ ์ค๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
โ Note ๋ผ์ด์ ์ค
- ์คํ ์์ค๋ผ๊ณ ํด์ ๋ชจ๋ ํจํค์ง๋ฅผ ์๋ฌด๋ฐ ์ ์ฝ ์์ด ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋ค. ๋ผ์ด์ ์ค๋ณ๋ก ์ ํ ์ฌํญ์ด ์์ผ๋ฏ๋ก ์ค์น ์ ์ ๋ฐ๋์ ๋ผ์ด์ ์ค๋ฅผ ํ์ธํด์ผ ํ๋ค.
- ISC, MIT๋ BSD ๋ผ์ด์ ์ค๋ฅผ ๊ฐ์ง ํจํค์ง๋ฅผ ์ฌ์ฉํ ๋๋ ์ฌ์ฉํ ํจํค์ง์ ๋ผ์ด์ ์ค๋ง ๋ฐํ์ฃผ๋ฉด ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
- Apache ๋ผ์ด์ ์ค ํจํค์ง๋ ์ฌ์ฉ์ ์์ ๋กญ์ง๋ง ํนํ๊ถ์ ๋ํ ์ ํ์ด ํฌํจ๋์ด ์๋ค.
- GPL ๋ผ์ด์ ์ค ํจํค์ง๋ฅผ ์ฌ์ฉํ ๋๋ ์กฐ์ฌํด์ผ ํ๋ค. GPL ๊ณ์ด์ ํจ๋น์ง๋ฅผ ์ฌ์ฉํ ํจํค์ง๋ฅผ ๋ฐฐํฌํ ๋๋ ์์ ์ ํจํค์ง๋ GPL๋ก ๋ฐฐํฌํ๊ณ ์์ค ์ฝ๋๋ ๊ณต๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ผ์ด์ ์ค๋ณ๋ก ํน์ง์ด ๋ค๋ฅด๋ฏ๋ก ์คํ ์์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฐ๋์ ๋ผ์ด์ ์ค๋ฅผ ํ์ธํ๊ณ ์ธ๋ถ ๋ด์ฉ์ ์ฝ์ด๋ด์ผ ํ๋ค.
scripts ๋ถ๋ถ์ npm ๋ช ๋ น์ด๋ฅผ ์ ์ฅํด๋๋ ๋ถ๋ถ์ด๋ค. ์ฝ์์์ npm run [์คํฌ๋ฆฝํธ ๋ช ๋ น์ด]๋ฅผ ์ ๋ ฅํ๋ฉด ํด๋น ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ค. ์๋ฅผ ๋ค์ด npm run test๋ฅผ ํ๋ฉด echo "Error: no test speicified" && exit 1๊ฐ ์คํ๋๋ค. echo "Error: no test speicified"๋ ์ฝ์์ ํป์ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ผ๋ ๋ป์ด๊ณ , exit 1์ ์๋ฌ์ ํจ๊ป ์ข ๋ฃํ๋ผ๋ ๋ป์ด๋ค.
test ์คํฌ๋ฆฝํธ ์ธ์๋ scripts ์์ฑ์ ๋ช ๋ น์ด ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ฑ๋กํด๋๊ณ ์ฌ์ฉํ ์ ์๋ค. ๋ณดํต start ๋ช ๋ น์ด์ node [ํ์ผ๋ช ]์ ์ ์ฅํด๋๊ณ npm start๋ก ์คํํ๋ค. start๋ test ๊ฐ์ ์คํฌ๋ฆฝํธ๋ run์ ๋ถ์ด์ง ์์๋ ์คํ๋๋ค.
โ ํจํค์ง ์ค์นํ๊ธฐ
express ํจํค์ง๋ฅผ ์ค์นํด๋ณด์. npm install [ํจํค์ง ์ด๋ฆ] ์ package.json์ด ์๋ ํด๋์ ์ฝ์์์ ์ ๋ ฅํ๋ฉด ๋๋ค.
์ค์นํ ํจํค์ง๊ฐ package.json์ ๊ธฐ๋ก๋๋ค.
dependencies๋ผ๋ ์์ฑ์ด ์๋ก ์๊ฒผ๊ณ , express๋ผ๋ ์ด๋ฆ๊ณผ ํจ๊ป ์ค์น๋ ๋ฒ์ ์ด ์ ์ฅ๋์๋ค. ๋ฒ์ ์์ ^ ํ์๊ฐ ๋ถ์ด์๋๋ฐ, ์ฌ๊ธฐ์๋ ํน๋ณํ ์๋ฏธ๊ฐ ์๋ค. (์ถํ ์ค๋ช ์์ )
โ Note npm WARN npmtest@0.0.1 No repository field.
- ์ด ๊ฒฝ๊ณ ๋ package.json์ repository ์์ฑ์ด ์์ด์ ๋ฐ์ํ ๊ฒ์ด๋ค. ๋์ค์ ์์ค ์ฝ๋๋ฅผ GitHub์ด๋ Gitlab ๋ฑ๊ณผ ๊ฐ์ ์ ์ฅ์์ ์ ์ฅํ ํ, repository ์์ฑ์ ๋ง๋ค๊ณ GitHub์ด๋ Gitlab ์ฃผ์๋ฅผ ์ ์ด์ฃผ๋ฉด ๋๋ค.
โ Note --save ์ต์
- ํจํค์ง๋ฅผ ์ค์นํ ๋ npm install ๋ช ๋ น์ด์ --save ์ต์ ์ ๋ถ์ด๋ ์ฑ ์ด๋ ๋ธ๋ก๊ทธ๋ฅผ ๋ง์ด ๋ณผ ์ ์๋ค. dependencies์ ํจํค์ง ์ด๋ฆ์ ์ถ๊ฐํ๋ ์ต์ ์ด์ง๋ง npm@5๋ถํฐ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋์ด ์์ผ๋ฏ๋ก ๋ฐ๋ก ๋ถ์ด์ง ์์๋ ๋๋ค.
์ถ๊ฐ๋ก node_modules๋ผ๋ ํด๋๋ ์์ฑ๋์๋ค. ๊ทธ ์์ ์ค์นํ ํจํค์ง๋ค์ด ๋ค์ด ์๋ค.
Express ํ๋๋ง ์ค์นํ๋๋ฐ ํจํค์ง๊ฐ ์ฌ๋ฌ ๊ฐ ๋ค์ด ์๋ค. ์ด๋ Express๊ฐ ์์กดํ๋ ํจํค์ง๋ค์ด๋ค. ํจํค์ง ํ๋๊ฐ ๋ค๋ฅธ ์ฌ๋ฌ ํจํค์ง์ ์์กดํ๊ณ , ๊ทธ ํจํค์ง๋ค์ ๋ ๋ค๋ฅธ ํจํค์ง๋ค์ ์์กดํ๋ค. ์ด๋ ๊ฒ ์์กด ๊ด๊ณ๊ฐ ๋ณต์กํ๊ฒ ์ฝํ ์์ด package.json์ด ํ์ํ ๊ฒ์ด๋ค.
package-lock.json์ด๋ผ๋ ํ์ผ๋ ์์ฑ๋์๋ค.
์ง์ ์ค์นํ express ์ธ์๋ node_modules์ ๋ค์ด ์๋ ํจํค์ง๋ค์ ์ ๋ณด๊ฐ ๋ด๊ฒจ ์๋ค. npm์ผ๋ก ํจํค์ง๋ฅผ ์ค์น, ์์ , ์ญ์ ํ ๋๋ง๋ค ๋ด๋ถ ์์กด ๊ด๊ณ๋ฅผ ์ด ํ์ผ์ ์ ์ฅํ๋ค.
โ ๋ชจ๋ ์ฌ๋ฌ ๊ฐ ๋์์ ์ค์นํด๋ณด๊ธฐ
npm install [ํจํค์ง1] [ํจํค์ง2] [ํจํค์ง3] [...] ์ ๊ฐ์ด ํจํค์ง๋ค์ ๋์ดํ๋ฉด ๋๋ค.
์ค์นํ ํจํค์ง๋ค์ด dependencies ์์ฑ์ ๊ธฐ๋ก๋๋ค.
โ ๊ฐ๋ฐ์ฉ ํจํค์ง ์ค์นํ๊ธฐ
์ค์ ๋ฐฐํฌ ์์๋ ์ฌ์ฉ๋์ง ์๊ณ , ๊ฐ๋ฐ ์ค์๋ง ์ฌ์ฉ๋๋ ํจํค์ง๋ฅผ ์ค์นํ ์ ์๋ค. npm install --save-dev [ํจํค์ง] [...] ๋ก ์ค์นํ๋ค.
package.json์ devDependencies๋ผ๋ ์๋ก์ด ์์ฑ์ด ์๊ฒผ๋ค. devDependencies ์์ฑ์์๋ ๊ฐ๋ฐ์ฉ ํจํค์ง๋ค๋ง ๋ฐ๋ก ๊ด๋ฆฌํ๋ค.
โ npm ์ ์ญ ํจํค์ง ์ค์นํ๊ธฐ
npm์๋ ์ ์ญ ์ค์น๋ผ๋ ์ต์ ๋ ์๋ค. ํจํค์ง๋ฅผ ํ์ฌ ํด๋์ node_modules์ ์ค์นํ๋ ๊ฒ์ด ์๋๋ผ npm์ด ์ค์น๋์ด ์๋ ํด๋(Windows์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ C:\Users\์ฌ์ฉ์์ด๋ฆ\AppData\Roamng\npm, macOS์ ๊ฒฝ์ฐ์๋ /usr/local/lib/node_modules)์ ์ค์นํ๋ค. ์ด ํด๋์ ๊ฒฝ๋ก๋ ๋ณดํต ์์คํ ํ๊ฒฝ ๋ณ์์ ๋ฑ๋ก๋์ด ์์ผ๋ฏ๋ก ์ ์ญ ์ค์นํ ํจํค์ง๋ ์ฝ์์ ์ปค๋งจ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
- rimraf ํจํค์ง : ๋ฆฌ๋ ์ค๋ macOS์ rm -rf ๋ช ๋ น์ด๋ฅผ ์๋์์๋ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ํจํค์ง์ด๋ค. rm -rf๋ ์ง์ ํ ํ์ผ์ด๋ ํด๋๋ฅผ ์ง์ฐ๋ ๋ช ๋ น์ด์ด๋ค. ์ ์ญ ์ค์นํ์ผ๋ฏ๋ก rimraf ๋ช ๋ น์ด๋ฅผ ์ฝ์์์ ์ฌ์ฉํ ์ ์๋ค. ์ ์ญ ์ค์นํ ํจํค์ง๋ package.json์ ๊ธฐ๋ก๋์ง ์๋๋ค.
โ rimraf๋ก node_modules ํด๋ ์ญ์ ํด๋ณด๊ธฐ
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ธํฐ๋ท์ ์ฐพ์๋ณด๋ ํด๊ฒฐ์ฑ ์ด ์์๋ค. (https://singa-korean.tistory.com/21)
โ PowerShell ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ์คํ
โก get-help Set-ExecutionPolicy๋ก ์ค์ ํ ์ ์๋ ๊ถํ ํ์ธ
โข RemoteSigned ๊ถํ์ผ๋ก ์ ์ฑ ์ค์
โฃ ์๋ ํ๋ ค๊ณ ํ๋ ๊ฑฐ ๋ค์ ํด๋ณด๊ธฐ
์ค์นํ ํจํค์ง๋ฅผ ์ง์๋ฒ๋ ธ์ง๋ง package.json์ ์ค์นํ ํจํค์ง ๋ด์ญ์ด ๋ค์ด ์์ผ๋ฏ๋ก ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค. npm install๋ง ํ๋ฉด ์์์ ๋ค์ ์ค์น๋๋ค.
์ฆ, node_modules๋ ์ธ์ ๋ ์ง npm install๋ก ์ค์นํ ์ ์์ผ๋ฏ๋ก node_modules๋ ๋ณด๊ดํ ํ์๊ฐ ์๋ค๋ ์ ์ ์ ์ ์๋ค. Git ๊ฐ์ ๋ฒ์ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ๊ณผ ๊ฐ์ด ์ฌ์ฉํ ๋๋ node_modules๋ ์ปค๋ฐํ์ง ์๋๋ค. ์ค์ํ ํ์ผ์ package.json์ด๋ค.
โ Note npx ๋ช ๋ น์ด
- ์ ์ญ ์ค์น๋ฅผ ๊ธฐํผํ๋ ๊ฐ๋ฐ์๋ค๋ ์๋ค. ์ ์ญ ์ค์นํ ํจํค์ง๋ package.json์ ๊ธฐ๋ก๋์ง ์์ ๋ค์ ์ค์นํ ๋ ์ด๋ ค์์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ๋ฅผ ์ํ ๋ช ๋ น์ด๋ก npx๊ฐ ์๋ค.
- ์๋์ ๊ฐ์ด rimraf ๋ชจ๋์ package.json์ devDependencies ์์ฑ์ ๊ธฐ๋กํ ํ, ์์ npx ๋ช
๋ น์ด๋ฅผ ๋ถ์ฌ ์คํํ๋ฉด ๋๋ค. ํจํค์ง๋ฅผ ์ ์ญ ์ค์นํ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
npm install --save-dev rimrafโ npx rimraf node_modules
โ Note npm์ ๋ฑ๋ก๋์ง ์์ ํจํค์ง
- ๋ชจ๋ ํจํค์ง๊ฐ npm์ ๋ฑ๋ก๋์ด ์๋ ๊ฒ์ ์๋๋ค. ์ผ๋ถ ํจํค์ง๋ ์คํ ์์ค๊ฐ ์๋๊ฑฐ๋ ๊ฐ๋ฐ ์ค์ธ ํจํค์ง๋ผ์ GitHub๋ nexus ๋ฑ์ ์ ์ฅ์์ ๋ณด๊ด๋์ด ์์ ์๋ ์๋ค. ๊ทธ๋ฌํ ํจํค์ง๋ค๋ npm install [์ ์ฅ์ ์ฃผ์] ๋ช ๋ น์ด๋ฅผ ํตํด ์ค์นํ ์ ์๋ค.
โ Note ๋ช ๋ น์ด ์ค์ฌ์ฐ๊ธฐ
- npm install ๋ช ๋ น์ด๋ npm i๋ก ์ค์ฌ์ธ ์ ์๋ค. --save-dev ์ต์ ์ -D๋ก, --global ์ต์ ์ -g๋ก ์ค์ฌ์ ์จ๋ ๋๋ค.
'Dev.log > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js ๊ต๊ณผ์] #16. ๊ธฐํ npm ๋ช ๋ น์ด (0) | 2021.07.03 |
---|---|
[Node.js ๊ต๊ณผ์] #15. ํจํค์ง ๋ฒ์ ์ดํดํ๊ธฐ (0) | 2021.07.02 |
[Node.js ๊ต๊ณผ์] #13. npm ์์๋ณด๊ธฐ (0) | 2021.07.02 |
[Node.js ๊ต๊ณผ์] #12. cluster (0) | 2021.07.02 |
[Node.js ๊ต๊ณผ์] #11. https์ http2 (0) | 2021.07.02 |