Private NPM Registry의 필요성과 Verdaccio로 구축하는 방법

현대 소프트웨어 개발에서 패키지 관리는 더욱 중요해지고 있다. JavaScript 생태계, 특히 NPM은 이러한 패키지 관리의 핵심 요소 중 하나이다. 대부분의 개발자들은 공개된 NPM Registry를 이용하여 필요한 패키지를 손쉽게 다운로드하고 업데이트한다. 그렇지만, 모든 패키지를 공개적으로 관리하는 것이 항상 좋은 선택은 아니다. 여기서 Private NPM Registry의 필요성이 대두되는데, 그 이유에는 몇 가지 중요한 포인트가 있다. 이 포인트들은 기업의 특정 상황 및 요구에 따라 더욱 명확해진다. 이 포스트에서는 Private NPM Registry의 중요성에 대한 근본적인 이유를 살펴보고 그 방법에 대해서도 간략히 소개할 것이다.

왜 Private NPM Registry가 필요한가?

NPM Registry는 다양한 JavaScript 패키지들을 저장하고 공유하는 중앙 장소이다. 우리가 일반적으로 알고 있는 NPM Registry는 공개적이기 때문에 전세계의 개발자들이 자유롭게 패키지를 다운로드하거나 업로드 할 수 있다. 그렇다면, 왜 Private NPM Registry가 필요한 것일까?

1. 기업의 비밀 정보 보호

많은 기업들은 자체적인 비즈니스 로직이나 특정 기술을 패키지로 만들어 관리하곤 한다. 이러한 패키지에는 회사만의 독특한 기술이나 아이디어가 포함되어 있을 수 있기 때문에, 이를 외부에 공개하는 것은 경쟁력 손실을 가져올 수 있다. Private NPM Registry를 사용하면, 이러한 중요한 패키지를 안전하게 보호하면서 내부적으로만 공유하고 사용할 수 있다.

2. 통제된 접근 권한

프로젝트나 팀마다 필요한 패키지와 접근 권한이 다를 수 있다. Private NPM Registry를 사용하면, 특정 패키지에 대한 접근 권한을 세밀하게 제어할 수 있다. 이를 통해, 불필요한 접근이나 변경을 예방할 수 있다.

3. 안정성 및 빠른 속도

공개 NPM Registry는 전세계 수많은 사용자들에게 서비스를 제공하기 때문에 때때로 네트워크 지연이나 다운타임이 발생할 수 있다. 반면, Private NPM Registry는 내부 네트워크에서 운영되기 때문에, 더 빠른 속도로 패키지를 설치하거나 배포할 수 있다. 또한, 외부의 영향을 받지 않기 때문에 보다 안정적으로 서비스를 제공할 수 있다.

결론적으로, Private NPM Registry는 기업의 중요한 정보를 보호하고, 세밀한 접근 제어를 통해 안정성을 높일 수 있는 방법이다. 초보자라도 이러한 이유들을 통해 Private NPM Registry의 중요성을 쉽게 이해할 수 있을 것이다.


Verdaccio를 이용한 Private NPM Registry 구축하기

Verdaccio는 Node.js로 작성된 가벼운 npm Private Registry로서, 장치가 있는 어디서든 간편하게 설치하고 실행할 수 있다. Verdaccio는 공개 npm registry의 캐시 역할도 하므로, 인터넷 연결이 끊기더라도 이미 다운로드한 패키지는 계속해서 사용할 수 있다. 이제 Verdaccio를 사용하여 Private NPM Registry를 구축하는 방법을 알아보자.

Verdaccio 설치하기

Verdaccio는 npm을 통해 전역적으로 설치할 수 있다.

bash
npm install -g verdaccio

Verdaccio 서버 실행하기

아래의 명령어를 사용하여 Verdaccio 서버를 실행한다.

bash
verdaccio

서버가 실행되면 기본적으로 http://localhost:4873 주소로 접근할 수 있다.

브라우저로 Verdaccio 서버에 엑세스 한 스크린샷
서버를 실행 한 뒤 http://localhost:4873 주소로 접근하면 서버에 업로드된 패키지들을 확인할 수 있다.

사용자 추가 및 로그인

Verdaccio는 기본적으로 패키지를 발행하기 전에 사용자 인증을 요구한다.

bash
npm adduser --registry http://localhost:4873
npm login --registry http://localhost:4873
npm logout --registry http://localhost:4873

패키지 발행하기

자신의 프로젝트 폴더로 이동한 뒤 package.json에 다음과 같은 publishConfig를 추가한다.

json
{
  "publishConfig": {
    "registry": "http://localhost:4873"
  }
}

패키지를 발행합니다.

bash
npm publish

패키지 설치하기

다른 프로젝트에서 이 패키지를 설치하려면 다음과 같이 명령한다.

bash
npm install [패키지명] --registry http://localhost:4873

혹은, 프로젝트의 .npmrc 파일에 아래와 같이 추가하여 기본 registry로 사용할 수도 있다.

registry=http://localhost:4873

이렇게 설정하면 npm install [패키지명]만으로도 Verdaccio를 통해 패키지를 설치할 수 있다.


Verdaccio의 config.yaml 설정하기

Verdaccio를 이용한 Private NPM Registry의 핵심은 config.yaml 파일이다. 이 파일을 통해 Verdaccio의 동작 방식, 사용자 권한, 패키지 엑세스 규칙 등을 정의하고 조절할 수 있다. 이제 초보자를 위한 기본적인 config.yaml 설정 방법을 알아볼 것이다.

파일 위치

처음 Verdaccio를 설치하고 실행하면, 기본 설정 파일인 config.yaml은 보통 사용자의 홈 디렉토리 아래 .config/verdaccio/ 폴더에 위치하게 된다.

기본 구조

config.yaml 파일을 열어보면 여러 섹션으로 나누어져 있다. 각 섹션은 Verdaccio의 특정 기능 또는 설정을 다룬다.

  • storage & packages: 데이터 저장 방식과 패키지 접근 규칙 설정
  • web: 웹 인터페이스 관련 설정
  • auth: 사용자 인증 방식 설정
  • middlewares: 추가적인 기능을 활성화하거나 구성
  • uplinks: 다른 registry로의 링크 설정
  • logs: 로깅 설정

기본 설정 변경

아래는 몇 가지 기본적인 설정을 변경하는 방법이다.

Port 변경하기

yaml
listen: 0.0.0.0:6000 

위 설정은 Verdaccio 서버가 6000 포트에서 수신 대기하도록 변경한다.

Private 패키지 설정하기

Private 패키지는 특정 사용자나 그룹만이 접근하거나 배포할 수 있는 패키지를 말한다. 즉, 이러한 패키지는 인증된 사용자만이 다운로드하거나 업로드할 수 있다.

예를 들어, 회사의 내부 프로젝트나 특정 팀만이 사용해야 하는 코드를 npm 패키지 형태로 관리하고 싶을 때 이 기능을 사용한다.

config.yaml에서 다음과 같이 설정하면 특정 패키지를 Private으로 설정할 수 있다:

yaml
packages:
  '@mycompany/*':
    access: $authenticated
    publish: $authenticated
    unpublish: $authenticated

위의 설정은 패키지 이름이 @mycompany/* 형태로 시작하는 모든 패키지를 Private으로 만들어, 인증된 사용자만이 해당 패키지에 접근하고 발행하거나 삭제할 수 있도록 한다.

Public 패키지 설정하기

Public 패키지는 아무런 제한 없이 누구나 접근하거나 다운로드할 수 있는 패키지를 말한다. 하지만, 패키지를 발행하거나 수정하기 위해서는 인증이 필요할 수 있다.

예를 들어, 오픈 소스 프로젝트나 내부에서 널리 사용되는 유틸리티 패키지 같은 경우 Public 패키지로 설정할 수 있다.

config.yaml에서 다음과 같이 설정하면 모든 패키지를 Public으로 설정할 수 있다.

yaml
packages:
  '**':
    access: $all
    publish: $authenticated

이 설정은 모든 패키지를 누구나 접근할 수 있도록 하지만, 발행이나 수정은 인증된 사용자만 가능하게 한다.

외부 npmjs.org 사용하기

Verdaccio는 기본적으로 npm의 공식 registry인 npmjs.org와 연결된다. 이 말은, Verdaccio에서 제공하지 않는 패키지를 요청하면 npmjs.org에서 해당 패키지를 찾아서 다운로드 받아 사용자에게 제공하고, 동시에 그 패키지를 캐싱한다는 의미이다.

uplinks 섹션에서는 이러한 외부 연결 설정을 관리한다. 기본 설정은 다음과 같다:

yaml
uplinks:
  npmjs:
    url: https://registry.npmjs.org/

이를 통해 Verdaccio는 npmjs.org와 연결되며, 필요한 경우 여기에서 추가적인 외부 registry를 연결할 수도 있다.

저장하고 재시작하기

설정을 변경한 후에는 Verdaccio 서버를 재시작해야 적용된다.


Private NPM Registry는 현대 기업 환경에서 소프트웨어 개발을 보다 안전하고 효율적으로 진행하기 위한 필수 도구로 각광받고 있다. 공개된 저장소만을 사용하는 것의 한계와 위험성을 깨닫는 조직들이 증가하면서, 내부적으로 자신들만의 패키지 저장소를 구축하는 흐름이 확산되고 있다. 이렇게 Private NPM Registry를 도입함으로써, 기업은 자신의 핵심 기술과 정보를 효과적으로 보호하며, 동시에 개발 효율성을 극대화할 수 있다. 따라서, Private NPM Registry의 도입은 단순히 선택의 문제가 아닌, 현대 개발 환경에서의 필수적인 전략으로 볼 수 있다.

© Copyright 2023 CLONE CODING