NPM publish ๋ , ์์ ์ ํ๋ก์ ํธ ๋๋ ํจํค์ง๋ฅผ NPM ( Node Package Manager ) ์ ๋ฐฐํฌํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ด์ ๊ธ์์ workspace ์์ common ํจํค์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ์ฌ์ฉํ๋๋ฐ , ํด๋น ๋ฐฉ๋ฒ์ ๋๊ฐ์ง์ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์์์ต๋๋ค.
๋ฐ๋ผ์ , common ํจํค์ง๋ฅผ npm ์ ๋ฐฐํฌํด๋๊ณ ๋ฒ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , workspace ์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ค์ npm ๋ฒ์ ์ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ค๋ฉด ์๋์ผ๋ก ๋ณ๊ฒฝ๋์ง๋ ์๊ณ , ๋ฐฐํฌ ์์ ์ common ์ ๋ฒ์ ์ ์ฌ๋ฆฌ๊ฒ ๋์ด์ ์ค๋ฅ ์ถ์ ์ด ์ฉ์ดํฉ๋๋ค.
NPM ์ ๋ฐฐํฌํ๊ธฐ ์ํด์๋ NPM ์์ด๋์ ํ ํฐ์ด ํ์ํฉ๋๋ค.
https://www.npmjs.com/
์ ํ์ด์ง์ ์ ์ํด์ ๊ฐ์
ํ , ํ๋กํ ํด๋ฆญ ํ Access Tokens ๋ฅผ ํด๋ฆญํฉ๋๋ค.

๊ทธ ํ , Generate New Token > classic ์ ํ ํ , ์ด๋ฆ์ ์ง์ ํ๊ณ ์๋ ํ์
์์ publish ๋ฅผ ํด๋ฆญํ๊ณ ์์ฑํฉ๋๋ค.
local shell ์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
shell
npm login
๊ทธ ํ , ์ํฐ๋ฅผ ์ ๋ ฅํ๋ฉด ์๋์ ๊ฐ์ ์ฐฝ์ด ๋ฑ์ฅํ๋๋ฐ , ์ด๋ฉ์ผ๋ก ์จ otp ๋ฅผ ์ ๋ ฅํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
๋ก๊ทธ์ธ์ด ๋์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ , shell ์ ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
shell
npm whoami # who am i ?

project์ ์ด๋ฆ์ผ๋ก package ๊ฐ publish ๋๋๋ฐ , ๊ธฐ์กด publish ๋์ด์๋ package ์ ์ด๋ฆ์ด ๊ฒน์น๋ฉด ๋ฐฐํฌํ ์ ์๋ค. ๋ฐ๋ผ์ package ์ ์ด๋ฆ์ ๋ณ๊ฒฝํด ์ฃผ์ด์ผ ํ๋ค.
package ์ ์ด๋ฆ์ด ๊ฒน์น๋์ง ์ฌ๋ถ๋ ์๋ ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์๋ค.
shell
npm info {package_name}

๋ง์ฝ ์ด๋ฏธ publish ๋์ด์๋ ์ด๋ฆ์ด๋ผ๋ฉด , ์ด์ฒ๋ผ ๊ทธ package์ ๋ํ ์ ๋ณด๊ฐ ๋์จ๋ค.

ํ์ง๋ง ์ด์ฒ๋ผ ์ค๋ณต๋์ง ์๋๋ค๋ฉด , ์ด๋ฐ ์์ผ๋ก ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ทธ ์ด๋ฆ์ผ๋ก ์์ ํ๋ฉด ๋๋ค.
๋ํ , package.json ์์ private : true ์ต์
์ ์ ๊ฑฐํด์ผ ํ๋ค.
์ด์ yarnrc ํ์ผ์์ ํ ํฐ์ ์ง์ ํด์ค ์ฐจ๋ก์ด๋ค. ์๊น ๋ฐ๊ธํ ํ ํฐ์ yarnrc ํ์ผ์ ์ถ๊ฐํ๋ค.
yaml
npmAuthToken: '{token}'
๊ทธํ ๋ฐฐํฌํ ํด๋์ ๋ค์ด๊ฐ์ npm publish ๋ฅผ ์
๋ ฅํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง , ๊ณ์ ๋ค์ด๊ฐ์ผ ํ๋ ๊ท์ฐฎ์์ด ์์ผ๋ฏ๋ก ๋ฐฐํฌํ ํด๋์ script ๋ฅผ ์ถ๊ฐํด์ค๋ค.
json
...
"scripts": {
...
"publish": "npm publish",
...
},
...
๊ทธ ํ , yarn {package_name} publish ๋ฅผ ์
๋ ฅํ๋ฉด ..

์ด๋ฐ์์ ๋ฉ์์ง๊ฐ ๋ฑ์ฅํ๋ฉด ์ฑ๊ณต์ด๋ค. npm ์์ ๋ณธ์ธ package ํ์ธํด๋ณด๋ฉด

์ด๋ ๊ฒ ์ถ๊ฐ๊ฐ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด์ ๋ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๊ฒ ๋์ , npm ์์ import ํด์ค์ผ ํ๋ค.
import ํ package ์ ๋ค์ด๊ฐ์ {package_name} : {version} ์ ํ์์ผ๋ก ์
๋ ฅ ํ , yarn install ์ ์งํํ๋ค. ๊ทธ ํ , ๊ฐ์ ธ์ค๋ ๊ณณ์์ ์ด๋ฆ์ ๋ณ๊ฒฝํด์ฃผ๋ฉด ...

์ด๋ฐ์์ผ๋ก ์ถ๊ฐ๋๊ฒ ๋๊ณ , ์ ์์ ์ผ๋ก ์คํ ๋ฐ ์๋๋๋ค.
๋ง์ฝ ๋ฒ์ ์ ์ ๋ฐ์ดํธ ํ๊ณ ์ถ๋ค๋ฉด , ๋๊ฐ์ด ๊ณตํต ํ์ผ์ ์์ ํ ํ , ๋ฒ์ ์ ๋ณ๊ฒฝํด์ publish ๋ฅผ ์งํํด์ผ ํ๋ค. ์ด๋๋ ํธํ๊ฒ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋ฒ์ ์ ์ ๋ฐ์ดํธ ํ ์ ์๋๋ฐ ,
shell
yarn {package_name} version {patch | minor | major}
์ ๋ช
๋ น์ด๋ฅผ ํตํด์ ์ง์ package.json ์ ์์ ํ์ง ์๊ณ ๋ ๋ฒ์ ์ ์ฌ๋ฆด ์ ์๋ค. ์ดํ ๋๊ฐ์ด publish ๋ฅผ ์งํํ๋ฉด ์๋ก์ด ๋ฒ์ ์ด publish ๋๋ค.

์ค๋๋ง์ npm publish ๋ค ๋ณด๋ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ์์ด์ ํค๋ฉ ๋ถ๋ถ์ด ์์์ง๋ง , ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ์ ๋ง๋ฌด๋ฆฌ๋์ด์ ๋คํ์ด๋ค. ์ด์ workspace ์ ์ฌ๋ฌ ๋จ์ ์ผ๋ก ์ธํด npm ์ ์ฌ์ฉํด์ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ์ง๋ง , ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ์ด ๋ฐฉ๋ฒ์ ์ค๋ฌด์์ ์ฌ์ฉํ ์๋ ์์๋ค. ๊ทธ ์ด์ ๋ ๋ ๋ฌธ์ ์ธ๋ฐ, ๋์ ๋ด์ง ์์ผ๋ฉด public ์ผ๋ก๋ง ๊ด๋ฆฌํ ์ ์๋ค. ๋ฌผ๋ก ์์ ํ ์ํ๋ก ๋ฐฐํฌ๊ฐ ๋๋ค๊ณ ๋ ํ์ง๋ง public ์ด๋ผ๋ ์ ์ด ๋ถ๋ด์ด ๋์๊ณ , ๊ฒฐ๊ตญ์ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์์๋ค. ํ์ง๋ง ๋ด ๊ฐ์ธ ํ๋ก์ ํธ ๋ฑ๋ฑ์ผ๋ก boilerplate ๋ฅผ ์์ฑํ๋๋ฐ๋ ์ข์ ๋ฐฉ๋ฒ์ผ ๊ฒ ๊ฐ์์ ๋ฐ๋ก ๊ฐ์ธ component ๋ฑ์ ๋ง๋๋ ์์ ์ ์งํํ ๊ฒ ๊ฐ๋ค.
npm publish ๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ๋ ์์ค์ ๊ทธ ๋์ฒด์์ผ๋ก github ์์ ์ ๊ณตํ๋ github package publish ๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋ค. ์๋ง ๋ค์ ๊ธ๋ก ์์ฑ์ด ๋ ๊ฒ ๊ฐ์๋ฐ , github์์ ์ผ์ ๊ณต๊ฐ private ํ๊ฒ ๋ฐฐํฌ ์ง์์ ํด์ค๋ค. ๋๋ฌธ์ ๋์ ๋ด์ง ์๊ณ ๋ private ํ ๋ฐฐํฌ๊ฐ ๋์ด์ ์ ์ฉํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์๋ชป๋ ๋ถ๋ถ, ์ถ๊ฐํด์ผ ํ๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋ง์ํด์ฃผ์๋ฉด ๊ฐ์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค . ํด๋น repo๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค .