NPM-SCOPE 패키지 어디까지 알고 있니?
이번 섹션에서는 npm scope
에 대해서 알아보고 이 scope 패키지를 통해서 어떻게 npm registry
에 배포하는지 파악해보고 npm 패키지를 실제로 배포까지 해보도록하자.
npm에는 scope라는 개념이 존재한다.
npm의 scope 개념은 조직 또는 그룹이다. 우리는 이 scope를 통해서 협업이 가능하며, 여러개의 분산된 패키지를 하나의 조직으로 관리 또는 배포 할 수 있다.
빠르게 배우는 Node.js와 NPM 설치부터 개념 잡기에서 NPM과 Node.js에 대한 개념을 잡고 빠르게 배우는 NPM 패키지 생성부터 배포까지 완벽 가이드에서 NPM 패키지를 실제로 생성하고 배포까지 해보았다면 이제는 NPM Scope
에 대해서 알아보자.
NPM Scope
NPM Scope 패키지는 NPM 패키지
와 같이 동일한 패키지이며 사용법도 같다. 다만 다른 게 있다면 NPM Scope 패키지
는 범위
또는 그룹
을 가진다. 이렇게 그룹을 가지게 되면 패키지 이름에 일반적인 규칙을 가지게 되며 패키지를 처리하는 방법에 약간의 영향을 준다.
각 NPM 사용자
와 조직(Organizations)
은 자체 범위를 가지고 이 범위에서 패키지를 추가할 수 있다. 이 범위는 그룹으로 볼 수 있으며, 그룹으로 지정된 패키지는 NPM 기본 Registry에 배포 및 설치된다. 그룹으로 지정되지 않은 패키지는 그룹으로 지정된 패키지에 종속적일 수 있으며 반대도 마찬가지며, 범위가 있는 패키지는 1개의 범위에 원하는 개수만큼 패키지를 포함 시킬 수 있다.
@
node module을 설치하고 node_modules
폴더를 보게 되면 **@
**가 붙은 패키지를 볼 수 있을 것이다. 이러한 패키지가 모두 범위가 있는 패키지이며, 아래와 같이 @
로 표현된다.
|
NPM Scope Install
NPM Scope
패키지도 일반 패키지와 설치하는 방법은 같다.
|
다른 게 있다면 위에서 말한 것과 같이 범위가 있는 패키지는 @
가 붙고 범위 명칭이 붙기 때문에 패키지 이름에 있어서 주의만 하면 되고 일반 패키지는 node_modules/packageName
설치가 된다면 범위가 있는 패키지는 node_modules/@scopeName/packageName
에 설치가 된다.
|
NPM Scope의 사용
require
를 통해 NPM Scope
패키지를 사용할 때도 동일하게 @
범위 이름으로 사용하면 된다.
|
NPM Scope의 배포
위 NPM Scope의 사용
하는 방법까지는 일반 패키지와 비슷하지만, 배포부터는 조금 까다롭고 다르다.
NPM Scope 패키지
는 일반 패키지와 동일하게 배포할 수는 없다. 배포를 위해서는 두 가지의 NPM Registry 형태로만 가능하다.
위 내용을 토대로 각 Registry에 배포하는 방법을 보자.
1. 비공개 패키지 게시 권한이 있는 개인 Registry
개인 비공개 패키지를 배포하기 위해서는 $7의 결제가 필요하다.
7가 아깝다면 여긴 넘어가자.
만약 개인 비공개 Registry로 업그레이드하였다면 npm publish
또는 npm publish --access=restricted
로 모듈을 게시 할 수 있다.
2. 조직(Organizations)으로 생성된 Registry
조직(Organizations) 생성
조직으로 생성된 Registry에 배포하기 위해서는 먼저 조직(Organizations)을 생성해야 한다. NPM에 로그인 후 개인 Package 항목으로 가서 생성하자.
조직을 생성하게 되면 아래 그림처럼 현재 계정을 조직으로 변경하거나 새로운 조직을 만들 수 있다. 현재 계정을 변경하게 되면 @계정명
과 같이 scope가 생성이 된다. 이 포스팅에서는 devdy
라는 새로운 조직으로 생성하겠다.
조직을 생성하게 되면 기본적으로 Members
탭이 보인다. 조직은 말 그대로 조직이기 때문에 여러 사용자를 포함할 수 있으니 참고하자. 또한 조직은 기본적으로 Public
범위를 가진다. Private
조직을 가지기 위해서는 결제가 필요하니 참고해두자.
조직(Organizations) 범위로의 배포
이제 생성된 조직에 배포해보자. 여기서 주의할 점은 조직을 생성하였으며 이 조직은 scope
가 되기 때문에 패키지 명을 범위에 맞게 지정해야 한다. 여기서 조직명을 devdy
로 했기 때문에 패키지 명을 **@devdy/sample-package
**로 하겠다.
scope
로 생성된 패키지는 일반 npm publish
명령으로 배포하면 오류가 출력된다. 조직 자체의 Registry는 공개이지만 배포에 있어서는 limited
로 설정되어 있기 때문에 범위 패키지를 배포하기 위해서는 --access=public
하거나 최초 게시 후 npm access public
명령어를 사용하여 해당 액세스를 공개로 설정해야 한다.
npm publish
시에 --access=public
옵션을 주도록 하자.
|
정상적으로 패키지가 배포된 것을 확인하자.
범위를 가진 Registry에 연결하기
이 부분은 NPM Registry가 registry.npmjs.org가 아닌 사설 Registry 이거나 여러 개의 Registry가 필요한 상황에서의 범위 연결 방법이다.
N개의 Registry가 존재할 경우 각 Registry는 범위를 지정할 수가 있는데 두 가지 형태로 지정할 수 있다. 이 두 가지에 대하여 간략하게 설명하겠다.
범위는 하나의 Registry와 N:1 관계를 맺는다. 하나의 Registry는 여러 범위에 호스팅할 수 있지만 하나의 범위(scope)는 하나의 Registry만 연결할 수 있다.
이렇게 범위와 Registry를 연결 후 npm install
을 통해 node module을 설치할 경우 만약 해당 Registry에 모듈이 없을 때 기본 Registry인 https://registry.npmjs.org/로 연결되게 되어있다.
1. 로그인 시 범위를 가진 Registry 연결
로그인 시 범위를 가진 Registry에 연결하는 방법은 명령어를 통해서 npm login
시 Registry와 범위(scope)를 직접 지정하는 방법이다.
|
2. npm config를 통하여 범위를 가진 Registry 연결
config를 통한 방법은 npm의 설정을 직접 변경하여 Registry 연결과 범위(scope)를 지정하는 방법이다.
|
지정된 registry와 범위(scope)는 .npmrc
를 확인해보자.
NPM 패키지의 scope
까지 배웠다면 NPM 패키지 배포에 있어서는 전반적으로 본 것이다.
필수조건으로 npm scope
가 필요한 것은 아니지만 특정 패키지는 협업이 필요할 수도 있다. 여러 패키지의 Owner를 각각 두고 말이다. 이럴 때는 범위(scope)를 가진 패키지
가 필요할 것이며, 또한 보통 혼자서 NPM 패키지를 만든다고 하더라도 하나만 만들지는 않을 것이다. 앞으로도 계속 만든다는 가정하에 이제는 범위(scope)가 있는 패키지를
만들도록 하자.