๐ Nexus npm repository ๊ตฌ์ถ
์ฌ๋ด์์ ์ฌ๋ฌ ํ๋ก์ ํธ๋ค์ ์งํํ๋ฉฐ ๊ณตํต ์ปดํฌ๋ํธ๋ค์ ๋ง๋ค์ด๋๊ณ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค.
ํญ์ ์ฌ์ฉํด์ผ ํ๋ ๊ณตํต ์ปดํฌ๋ํธ๋ค์ ๋ง๋ค์ด๋ง ๋๊ณ ๊ทธ์ ํ์ผ์ ๋ณต์ฌ ๋ถ์ฌ ๋ฃ๊ธฐ ํ๋ฉฐ ์กฐ๊ธ์ฉ ์์ ํ๋ค ๋ณด๋ ํ๋ก์ ํธ๊ฐ ๋์ด๋ ์๋ก ๊ฐ๋น์ด ์ ๋์ต๋๋ค.
๊ทธ๋์ ์ด ์ฐธ์ ๋ฐฑ์๋ ํ์์ ์ฌ์ฉํ๋ Nexus์๋ฒ๋ ์ด๋ฏธ ์๊ฒ ๋ค, ์ฌ๊ธฐ์ private npm repository๋ฅผ ๊ตฌ์ถํ๊ณ ์ ํธ, ๊ณตํต ์ปดํฌ๋ํธ, ๋์์ธ ์์คํ ์ ์ ๋๋ก ํจํค์งํํด์ ๊ด๋ฆฌํด ๋ณด๊ธฐ๋ก ๋ค์งํ์ต๋๋ค.
๊ทธ๋ผ ๊ทธ ํ๋ํ ๊ณผ์ ์ ์ฒซ ๋ฒ์งธ ๊ณผ์ .
npm repository ๊ตฌ์ถ๊ณผ ํจํค์ง ๋น๋ ๊ทธ๋ฆฌ๊ณ publish์ install ํ๋ ๊ณผ์ ์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค.
Nexus Repository๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ฌ์ฉ๋๋ ์ํฐํฉํธ ๊ด๋ฆฌ ์์คํ ์ผ๋ก, Maven, npm, NuGet ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ํจํค์ง ํ์์ ์ํฐํฉํธ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ค์ ํ์ํ ์ข ์์ฑ์ ์ฝ๊ฒ ์ฐพ๊ณ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํจ์จ์ ์ธ ํ์ ๋ฐ ๋น๋ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
๐ Blob Stores ์์ฑ
Nexus์ Blob Stores์ Repositories์ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Blob Store: ๋ฌผ๋ฆฌ์ ์ ์ฅ์
- Repositories: ๋ ผ๋ฆฌ์ ์ ์ฅ์
๊ทธ๋ ๊ธฐ์ ์ ์ฅ์ ๊ตฌ์ถ์ ์์ ์ค์ง์ ์ผ๋ก ํ์ผ์ด ์ ์ฅ๋๋ ๋ฌผ๋ฆฌ์ ๊ณต๊ฐ์ ๋ง๋ค์ด ์ค์ผ ํฉ๋๋ค.
Settings → Blob Stores → Create blob stroe
๐ Repository ์์ฑ
์ฐ๋ฆฌ๊ฐ ์ค์ง์ ์ผ๋ก ์ฌ์ฉํ๋ repository ์ฃผ์๋ ์ด Repository๋ฅผ ํตํด ๋ง๋ค์ด์ง๋๋ค.
repository๋ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ๋ก 3๊ฐ์ง ํ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
hosted
์ฌ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํจํค์ง๋ฅผ ์ ์ฅํ๊ณ ์ ๊ณตํฉ๋๋ค.proxy
maven์ด๋ npm์์ ์ ๊ณตํ๋ ํจํค์ง๋ฅผ ์บ์ ํ๊ฑฐ๋ proxy ํด์ ์ค์น ์๋์ ์ด์ ์ ๊ฐ์ง๋๋ค.group
Group ์ ์ฅ์๋ ์ฌ๋ฌ ๊ฐ์ ์ ์ฅ์(Hosted ๋ฐ Proxy ํฌํจ)๋ฅผ ํ๋์ URL๋ก ๊ทธ๋ฃนํํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ์ฌ๋ฌ ์ ์ฅ์์ ๊ฑธ์ณ ์๋ ์ํฐํฉํธ๋ฅผ ๋จ์ผ ์ ์ ์ ํตํด ๊ฒ์ํ๊ณ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
์ ํฌ๋ ์ด ์ค hosted๋ก repo๋ฅผ ์์ฑํฉ๋๋ค.
Setting → Create repository → npm (hosted) → Create repository
์ฌ๊ธฐ์ Name์ ์ด๋ฆ์ ์ ์ด์ฃผ๊ณ ์๊น ๋ง๋ค์ด๋์๋ Blob Storage์ ๋ฑ๋กํด ์ค ํ Create repository๋ฅผ ๋๋ฌ ์์ฑํด ์ค๋๋ค.
๐ Role ์์ฑ
์์ฑํ repo์ ์ ๊ทผํ๊ธฐ ์ํด์๋ role์ ์์ฑํ๊ณ ๊ณ์ ์ ๋ฑ๋กํด์ฃผ์ด์ผ ํฉ๋๋ค.
repo์ ๋ํ ๊ถํ์ 2๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
- nx-repository-admin-{์ ์ฅ์ ์ข ๋ฅ}-{์ ์ฅ์ ์ด๋ฆ}-{์์ }: ํด๋น ์ ์ฅ์์ ๋ํ ์ค์
- nx-repository-view-{์ ์ฅ์ ์ข ๋ฅ}-{์ ์ฅ์ ์ด๋ฆ}-{์์ }: ํด๋น ์ ์ฅ์์ ๋ํ ์ฌ์ฉ
admin ๊ถํ์ด ์์ผ๋ฉด ์๋จ ํฑ๋๋ฐํด ๋ฒํผ์์ ์ค์ ์ ๊ด๋ฆฌํ ์ ์๊ณ , view ๊ถํ์ด ์์ผ๋ฉด ํฑ๋๋ฐํด ์ข์ธก repo๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
์์์ ๋ง์ง๋ง์ ํด๋น๋๋ 5๊ฐ์ง ์์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- add (์ถ๊ฐ)
- ๊ธฐ๋ฅ: ์ด ๊ถํ์ ์ฌ์ฉ์๊ฐ ์๋ก์ด ์ํฐํฉํธ๋ ์ปจํ ์ธ ๋ฅผ Nexus ์ ์ฅ์์ ์ถ๊ฐํ ์ ์๊ฒ ํฉ๋๋ค.
- ์ ์ฉ: ๊ฐ๋ฐ์๋ ๋ฐฐํฌ ํ์ด ์๋ก์ด ๋น๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ฅ์์ ์ ๋ก๋ํ ๋ ํ์ํฉ๋๋ค.
- browse (ํ์)
- ๊ธฐ๋ฅ: Browse ๊ถํ์ ์ฌ์ฉ์๊ฐ ์ ์ฅ์์ ๋ด์ฉ์ ํ์ํ๊ณ , ์ํฐํฉํธ์ ๋ชฉ๋ก์ ๋ณผ ์ ์๊ฒ ํฉ๋๋ค. ํ์ง๋ง, ์ํฐํฉํธ์ ์ค์ ๋ด์ฉ์ ์ฝ๊ฑฐ๋ ๋ค์ด๋ก๋ํ ์ ์๋ ๊ถํ์ ํฌํจํ์ง ์์ต๋๋ค.
- ์ ์ฉ: ์ผ๋ฐ ์ฌ์ฉ์๋ ์ธ๋ถ ์ดํด๊ด๊ณ์๊ฐ ์ ์ฅ์์ ๋ด์ฉ์ ํ์ธํ ํ์๊ฐ ์์ ๋ ์ ์ฉํฉ๋๋ค.
- delete (์ญ์ )
- ๊ธฐ๋ฅ: ์ด ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๋ ์ ์ฅ์์์ ์ํฐํฉํธ๋ ์ปจํ ์ธ ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
- ์ ์ฉ: ๊ด๋ฆฌ์๋ ํน์ ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ์ค๋๋ ๋๋ ๋ถํ์ํ ์ํฐํฉํธ๋ฅผ ์ ๋ฆฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- edit (ํธ์ง)
- ๊ธฐ๋ฅ: Edit ๊ถํ์ ์ฌ์ฉ์๊ฐ ์ ์ฅ์์ ๋ฉํ๋ฐ์ดํฐ๋ ๊ตฌ์ฑ ์ค์ ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ์ํฐํฉํธ ์์ฒด์ ์์ ์ด ์๋๋ผ ์ ์ฅ์ ์ค์ ์ ์์ ์ ์๋ฏธํฉ๋๋ค.
- ์ ์ฉ: ์ ์ฅ์ ๊ด๋ฆฌ์๋ DevOps ํ์ด ์ ์ฅ์ ์ค์ ์ ์ต์ ํํ๊ฑฐ๋ ๋ณ๊ฒฝํด์ผ ํ ๋ ํ์ํฉ๋๋ค.
- read (์ฝ๊ธฐ)
- ๊ธฐ๋ฅ: Read ๊ถํ์ ์ํฐํฉํธ์ ์ค์ ๋ด์ฉ์ ์ฝ๊ณ ๋ค์ด๋ก๋ํ ์ ์๋ ๊ถํ์ ์ ๊ณตํฉ๋๋ค.
- ์ ์ฉ: ๋๋ถ๋ถ์ ๊ฐ๋ฐ์์ ์ฌ์ฉ์์๊ฒ ํ์ํ ๊ธฐ๋ณธ ๊ถํ์ผ๋ก, ์ํฐํฉํธ์ ์์กด์ฑ ํด๊ฒฐ์ด๋ ๋น๋ ํ๋ก์ธ์ค์์ ์ค์ํฉ๋๋ค.
๊ท๋ชจ๊ฐ ํด์๋ก ๊ถํ์ ์ธ๋ถํํ๋ ๊ฒ์ด ์ข์ง๋ง ์ ํฌ๋ ์๊ท๋ชจ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ํ ๊ณ์ ์ผ๋ก ํด๋น repo์ ๋ํ ๋ชจ๋ ๊ถํ์ ๋ถ์ฌํด ๊ด๋ฆฌํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ทธ๋ผ Role์ ์์ฑํด ์ฃผ๊ฒ ์ต๋๋ค.
view์ admin์ ๋ํ 5๊ฐ์ง ์์ ๊ถํ์ ์์ผ๋์นด๋๋ก ๋ชจ๋ ํฌํจ์ํจ npm-admin์ด๋ ๊ท์น์ ์ค์ ํ๊ณ ์์ฑํฉ๋๋ค.
๐ User ์์ฑ
Setting → Create local user
๋ญ ๊ทธ๋ฅ Id, Password, Email ์ ์ด์ฃผ๊ณ Status๋ฅผ Active, ๋ง์ง๋ง์ผ๋ก ์์์ ์ค์ ํ Roles๋ฅผ ๋ฑ๋กํ๊ณ Create local user ๋ฒํผ์ ๋๋ฌ ๊ณ์ ์ ์์ฑํด ์ค๋๋ค.
๐ Realms ์ค์
Realms์ npm Bearer Token Realm
์ Active๋ก ์ค์ ํฉ๋๋ค.
์ด๊ฑธ ์ค์ ํ์ง ์์ผ๋ฉด npm login ํ ํด๋ผ์ด์ธํธ ↔ nexus ๊ฐ ํ ํฐ ๋ฐฉ์์ ์ธ์ฆ์ด ๋์ง ์์ E401 ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๐ ํจํค์ง ๋ฐฐํฌ
์ฒ์์ ๋ง๋ค์ด๋ Repository ์ค์ ์ ๋ค์ด๊ฐ ๋ณด๋ฉด ํด๋น URL์ด ์์ต๋๋ค.
publish ํ๋ ค๋ ํจํค์ง์ package.json์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ์ ์ ๋ณด๋ฅผ ์ ์ด์ค๋๋ค.
{
...
"publishConfig": {
"registry": "์ ์ฅ์_npm_repository_์ฃผ์"
},
...
}
๐ npm login
์ค์ ์ ์๋ฃํ ํจํค์ง๋ฅผ ์ฌ๋ฆด ์ ์๊ฒ ์ URL๋ก ๋ก๊ทธ์ธํด ์ค๋๋ค.
$ npm login --registry=์์_์๋_์ ์ฅ์_URL
$ Username: ์์์_๋ง๋ _๊ณ์ _ID
$ Password: ์์์_๋ง๋ _๊ณ์ _PW
$ Email: ๋ณธ์ธ_์ด๋ฉ์ผ
๐ ๋ฐฐํฌ
$ npm publish
์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด ์ ์์ ์ผ๋ก ๋ฐฐํฌ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ต๋๋ค.
nexus์์ ํ์ธํด ๋ด๋ ์ ์ฌ๋ผ๊ฐ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๐ React+TS ์ปดํฌ๋ํธ ํจํค์ง ์ปดํ์ผ
React+TS ์ปดํฌ๋ํธ ํจํค์ง ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ ์ ์ ์ฌ๋ฆฐ ๊ธ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
๐ ์ค์น
์ฌ๋ ธ์ผ๋ ๋ฐ์ ์๋ ์์ด์ผ๊ฒ ์ฃ .
๊ทธ๋ฌ๋ ์๋ฌด ๊ณํ ์์ด ํจํค์ง ์ด๋ฆ์ ์ค์ ํ๋ฉด ๋์ค์ ๊ณจ์น ์ํ์ง๋๋ค.
์๋ํ๋ฉด ๊ทธ๋ฅ npm install xxx
ํ์ ๋๋ ์ฐ๋ฆฌ๊ฐ ์ฌ๋ฆฐ nexus๊ฐ ์๋๋ผ npm ๊ณต์ ์ ์ฅ์์์ ํจํค์ง๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์
๋๋ค.
ํจํค์ง๊ฐ ์ ์ฅ์๋ฅผ ์ ์ฐพ์ ์ ์๊ฒ .npmrc์ ํด๋น ํจํค์ง์ ๋ํ ์ ์ฅ์ ์ฃผ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด๋์ด์ผ ํฉ๋๋ค.
ํจํค์ง_์ด๋ฆ:registry=https://์ ์ฅ์_์ด๋ฆ.com
๊ทธ๋ฐ๋ฐ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ํ๋ค๋ฉด ํจํค์ง๊ฐ ๋ง์์ง์๋ก ๋ผ์ธ ์๊ฐ ๋์ด๋ ๊ด๋ฆฌํ๊ธฐ ํ๋ค๊ฒ ์ฃ ?
๊ทธ๋์ ํจํค์ง์ @์ค์ฝํ
๋ฅผ ์ฌ์ฉํด์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ๋ฌ ํจํค์ง ์ด๋ฆ ์์ @my-package ๋ผ๊ณ ์ค์ ํ์ ๊ฒฝ์ฐ ์ ์ฅ์ ์ฃผ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ์ ์์ต๋๋ค.
@my-package:registry=https://์ ์ฅ์_์ด๋ฆ.com
๊ทธ๋ฌ๋ฉด @my-package/util, @my-package/component์ ๊ฐ์ ํจํค์ง๋ค์ ์ค์ฝํ์ ์ํด ํด๋น ์ ์ฅ์์์ ํจํค์ง๋ฅผ ์ฐพ์์ค๊ฒ ๋ฉ๋๋ค.
๐ ๋ ๋ค๋ฅธ login ๋ฐฉ๋ฒ
์์์๋ .npmrc
ํ์ผ์ ์ ์ฅ์ ์์น๋ฅผ ์ค์ ํ๋๋ฐ์.
์ฌ์ค์ ์ฌ๊ธฐ์ ๊ณ์ ์ ๋ณด๋ฅผ ๋ฃ์ด๋์ด ํด๋น ์ ์ฅ์์์ ์์์ ์ธ์ฆ์ ํ๋๋ก ํ ์ ์์ต๋๋ค.
$ echo -n '๊ณ์ _ID:๊ณ์ _PW' | openssl base64
๋์ถฉ ํฐ๋ฏธ๋์์ ์ด๋ ๊ฒ ๊ณ์ ์ ๋ณด๋ฅผ base64๋ก ์ธ์ฝ๋ฉ ํ ๋ค .npmrc์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํฉ๋๋ค.
//์ ์ฅ์์ฃผ์:_auth=์ธ์ฝ๋ฉ_๊ฒฐ๊ณผ
์ ์ ์ฅ์ ์ฃผ์๋ ํด๋น ์ ์ฒด ์ฃผ์์์ https:
ํน์ http:
๋ฅผ ์ ์ธํ ๋ฌธ์์ด์
๋๋ค.
์ด์ ๊ฐ์ด ์ธ์ฆ์ ํ๋ค๋ฉด ์ถํ CI/CD ํ์ดํ๋ผ์ธ์ ํจํค์ง ๋ฐฐํฌ ๋ก์ง์ ํ์ธ ์๋ ์๊ฒ ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค์์ ํฐ ๋์์ด ๋๋ ๊ธ์ ๋๋ค.
https://devblog.kakaostyle.com/ko/2022-03-07-1-npm-private-repository/
๋๊ธ