์ด์ NPM publish ์ ๊ฒฝ์ฐ , ๋์ ๋ด์ง ์์ผ๋ฉด private ํ publish ๋ ๋ถ๊ฐ๋ฅ ํ๋๋ฐ , github ์์ ์ ๊ณตํ๋ github package ์ ๊ฒฝ์ฐ , ์ผ์ ํฌ๊ธฐ๋งํผ private ํ๊ฒ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ๋ง์ฝ ๊ณตํต ํ์ผ์ ํฌ๊ธฐ๊ฐ ํฌ์ง ์๊ณ , private ํ๊ฒ ๊ด๋ฆฌํด์ผ ํ๋ค๋ฉด github package publish ๊ฐ ๊ทธ ํด๋ต์ด ๋ ์ ์์ต๋๋ค.
์ด์ ๊ธ์์๋ ์์ฑํ์ง๋ง , ์ ํ์ฌ์์ ๊ณตํต ํ์ผ์ ํฌ๊ธฐ๊ฐ ๊ทธ๋ ๊ฒ ํฌ์ง ์์๊ณ private ํ๊ฒ ๋ฐฐํฌํ๊ณ ์ถ์ ๋ง์์ด ์์๊ธฐ ๋๋ฌธ์ github package๊ฐ ์ข์ ์ ํ์ด ๋์์ต๋๋ค. github action ๊ณผ ์ฐ๊ฒฐ๋ ๊ฐ๋ฅํ๊ณ , ๊ณตํต ํ์ผ ๊ด๋ฆฌ๊ฐ ์ฌ์์ ธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ๊ฐ์ฅ ์ข์ ์ ํ์ด ๋์์ต๋๋ค. ๋ค๋ง ๊ณตํต ํ์ผ์ ํฌ๊ธฐ๊ฐ ํฐ ๊ฒฝ์ฐ ๋น์ฉ์ ์ง๋ถํ ์ ์์ด์ ๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ NPM ์์ ๋์ ๋ด๊ณ private ์๋น์ค๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ์ ๋น๊ตํด์ผ ํ ์๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ฅ ๋จผ์ github ํ ํฐ์ ๋ฐ๊ธ๋ฐ์์ผ ํฉ๋๋ค. github ์ค์ ์ ๋ค์ด๊ฐ์ settings > developer settings > personal access tokens > tokens ์ ๊ฒฝ๋ก๋ก ๋ค์ด๊ฐ๋๋ค.
settings ์ ๊ฐ์ฅ ์๋์ developer settings๊ฐ ์กด์ฌํฉ๋๋ค.

๊ทธ ํ , generate new token ์ ํด๋ฆญํด์ ์๋ก์ด ํ ํฐ์ ๋ฐ๊ธํฉ๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ read:package write:package ๊ถํ์ด ์์ด์ผ ํ๋ค๋ ์ ์
๋๋ค. ๋ฌผ๋ก ์ถํ์ ์์ ๋ ๊ฐ๋ฅํฉ๋๋ค.

note ๋ ํ ํฐ์ ์์๋ณผ ์ ์๋๋ก ๊ฐ๋จํ ์ค๋ช
์ ์
๋ ฅํด์ฃผ๋ฉด ์ข์ต๋๋ค.expiration ์ ๊ฒฝ์ฐ ํ ํฐ ์ ํจ ๊ธฐ๊ฐ์ธ๋ฐ , no expiration ์ ๊ฒฝ์ฐ๋ ๊ธฐ๊ฐ ์ ํ ์๋ ํ ํฐ์ ์์ฑํ ์ ์์ต๋๋ค. ์ ํจ๊ธฐ๊ฐ์ด ์๋ค๋ฉด ํ ํฐ์ด ๊ณ์ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ์ ์ด ์์ด์ ํด๋น ๋ฐฉ๋ฒ๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ง ์ ํจ๊ธฐ๊ฐ์ด ์๋ ๋งํผ ํดํน ๋ฑ์ผ๋ก ์ทจ์ฝํ ์๋ ์์ด์ ์ฃผ์๊น๊ฒ ์ฌ์ฉ์ด ํ์ํฉ๋๋ค.write:packages ๋ฅผ ํด๋ฆญํ๋ฉด ๋ค๋ฅธ ์กฐ๊ฑด๋ค์ด ์๋์ผ๋ก ์ฒดํฌ๋ฉ๋๋ค. ํ์ฌ๊ฐ ๊ธฐ๋ณธ ์ต์
์ด๊ณ , ๋ค๋ฅธ ์กฐ๊ฑด๋ค์ด ํ์ํ๋ค๋ฉด ๋ง์ถฐ์ ์ฒดํฌํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ด๋ จ ์ ๋ณด๋ ์ฌ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์.๊ทธ ํ , ํ ํฐ์ ๋ฐ๊ธํ๋ฉด ๋ฉ๋๋ค.
package.json ์์ package ๋ฐฐํฌ๋ฅผ ์ํด์ package.json ์ ์๋์ ๊ฐ์ด ์์ ํฉ๋๋ค.
json
{
"name": "@{username}/common",
...
"repository": {
"type": "git",
"url": "https://github.com/{username}/{repo-name}.git"
},
"publishConfig": {
"registry": "https://npm.pkg.github.com/"
},
...
}
name : ๋ฐฐํฌ๋ฅผ ์ํด์ ์ด๋ฆ์ ์์ ํด์ผ ํฉ๋๋ค. @{username}/{package-name} ์ ํํ๋ก ์์ฑํ๋๋ฐ , ๋ง์ฝ ์กฐ์ง์ด๋ผ๋ฉด username ๋์ ์ organization-name ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.repository : ๋ฐฐํฌ๋ repogitory ์ ์ ๋ณด๋ฅผ ๋ํ๋
๋๋ค. git ์ ์ฌ์ฉ์ค์ด๋ฏ๋ก type์ git , url ์ ๋ฐฐํฌํ username ๋๋ organization-name ๊ณผ repo-name ์ ์ฐจ๋ก๋ก ์
๋ ฅํด์ค๋๋ค.publishConfig : ๊ทธ๋ฅ npm ์ด ์๋ , github ๋ฐฐํฌ์ด๋ฏ๋ก ํด๋น url์ ์ถ๊ฐํด์ค๋๋ค.๋ฐฐํฌ๋ฅผ ์ํด์ .yarnrc ํ์ผ๋ ์์ ํด์ค์ผ ํฉ๋๋ค.
yml
---
npmRegistries:
'https://npm.pkg.github.com':
npmAuthToken: { github token }
npmAlwaysAuth: true
npmScopes:
{ username }:
npmAlwaysAuth: true
npmAuthToken: { github token }
npmRegistryServer: 'https://npm.pkg.github.com'
npmRegistries : ํน์ registry ์์ ๋ฐ์์ฌ ๋ ์ถ๊ฐํ๋ ์ค์ ์
๋๋ค. github ๋ฐฐํฌ์ด๋ฏ๋ก url ์ github ๋ก ์ง์ ํด์ฃผ๊ณ , ํ ํฐ๊ณผ ์ธ์ฆ์ ์ถ๊ฐํฉ๋๋ค. ๊ณต์๋ฌธ์npmScopes : ํน์ ํจํค์ง๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ์ค์ ์
๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก username ์๋ organization-name ์ด ์ถ๊ฐ๋ ์ ์์ต๋๋ค.๊ทธ ์ธ , ํจํค์ง์ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์์ผ๋ฏ๋ก root ์์ ๊ฒฝ๋ก๋ ์์ ํด ์ค๋๋ค.
๋ฐฐํฌ๋ฅผ ์ํด์ npm ๋ก๊ทธ์ธ์ด ์ ํ๋์ผ ํฉ๋๋ค. ๊ณต์๋ฌธ์ ์์๋ ์๋์ ๊ฐ์ด ๋ก๊ทธ์ธํ๋๋ก ์ค์ ํ๊ณ ์์ต๋๋ค.
shell
$ npm login --scope=@NAMESPACE --auth-type=legacy --registry=https://npm.pkg.github.com
> Username: USERNAME
> Password: TOKEN
namespace ์๋ ๋ณธ์ธ์ github ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๊ทธ ํ , ๋ก๊ทธ์ธํ ๋ username ์ ๋ณธ์ธ์ name , password ์๋ ์๊น ๋ฐ๊ธํ ํ ํฐ์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
๋ฐฐํฌ๋ ๋์ผํฉ๋๋ค. npm ๊ณผ ๊ฐ์ด publish ๋ช
๋ น์ด๋ฅผ ํตํด ๋ฐฐํฌํฉ๋๋ค.
์ฑ๊ณต
์คํจ
๊ฐ์ ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ ์๊ฑฐ๋ , ์ฌ๋ฌ ์ด์ ๋ก ์คํจํ๋ฉด ์๋ ์ฌ์ง์ฒ๋ผ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ทธ ํ , github package ๋ฅผ ํ์ธํด๋ณด๋ฉด

์ด์๊ฐ์ด ์ถ๊ฐ๋์๊ณ , ๋ฒ์ ์ด ์ฐํ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ดํ p1 ์ผ๋ก ๋์์์ , import ๋ฅผ ์ํด package.json ์ ์์ ํฉ๋๋ค.
json
"dependencies": {
...
"@{username}/{package-name}": "0.0.1",
...
},
๋ํ , import ํ ํ์ผ์์๋ ๊ฒฝ๋ก๋ฅผ ์์ ํด์ค๋๋ค.
import { useCount } from '@{username}/{package-name}/hooks';
์์๊ฐ์ ํ์์ผ๋ก import ํ ์คํํด๋ณด๋ฉด ์ ์์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
github package ๋ฐฐํฌ์ ์ฅ์ ์
๋ ์ ์ ๋๋ค. ๋ค๋ง ํฌ๊ธฐ๊ฐ ์ปค์ง ๊ฒฝ์ฐ์๋ ๋์ ๋ด์ผํด์ npm ์์ ์ง๋ถํ๋ ๊ฒ์ด ๋์ ์๋ ์์ต๋๋ค. ํ์ง๋ง ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ค๋ฉด ์ถฉ๋ถํ ์ฌ์ฉํ ๋งํ ๊ฐ์น๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ๋ monorepo๋ก ๋ฐฐํฌํ๊ธฐ ์ํด์ package ๋ฅผ ์ฌ์ฉํ์ง๋ง , ๋ค์ ์๊ฐํด๋ณด๋ฉด ๊ตณ์ด monorepo ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ? ๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค. ์คํ๋ ค package ๋ฐฐํฌ๋ฅผ ์ํ repo ๋ฅผ ๋ง๋ค์๋ค๋ฉด monorepo ์ ์ด๋ ค์ด ์ธํ ์ ์ ์ฉํ์ง ์์๋ ๋์ด์ ๋ ํธ๋ฆฌํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ง์ฝ ๋ค์์ ์์ ์ ํ๊ฒ ๋๋ค๋ฉด ๋ถ๋ฆฌํด์ ์์ ํ ๊ฒ ๊ฐ๋ค์.
์๋ชป๋ ๋ถ๋ถ, ์ถ๊ฐํด์ผ ํ๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋ง์ํด์ฃผ์๋ฉด ๊ฐ์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค . ํด๋น repo๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค .