npm이란 무엇일까?

2020. 11. 3. 01:02Project-Review

package.json을 만들고, express를 설치하며, 실행시켜보는 것은 node.js기반 프로젝트를 만드는데 너무나 흔하고 당연한 일이었다. 하지만 그 과정속에 npm은 항상 그 사이에 자리 잡고 있었다. 그럼에도 너무 당연하게 사용했던 터라, npm이 무엇이고 어떤 특징을 가지고 있는지 전혀 알지 못했다. 그래서 이번에는 npm에 대해 알아보려고 한다.

 

1. npm의 정의

npm 공식 사이트에서 About npm(docs.npmjs.com/about-npm)을 들어가면 다음과 같이 npm을 정의하였다.

 

  • npm is the world's largest software registry. Open source developers from every continent use npm to share and borrow packages, and many organizations use npm to manage private development as well.

한글로 번역하자면, npm은 세계적으로 사용하는 큰 소프트웨어 저장소이며 npm을 패키지를 공유하고 차용하는 목적으로 사용하면서 많은 기관들이 npm을 비공개 개발로써도 사용한다고 되겠다.

 

2. npm의 3가지 특징

npm은 위와 같이 자신들을 소개하며 동시에 3가지의 명확한 특징(Component)을 갖고 있다고 말했다.

 

  • the website : 패키지를 찾기, 새로운 프로필을 작성 뿐만 아니라 npm에서의 다른 기능들도 모두 웹사이트에서 할 수 있다라고 설명한다. 개인적인 생각으로는 website를 사용하는 것이기 때문에 접근성이 매우 좋다는 것을 말하기 위해 넣은 것 같다.
  • Command Line Interface(CLI) : npm은 터미널을 통해 명령을 실행할 수 있으며, 이는 많은 개발자들이 npm과의 상호작용을 하는데 큰 도움을 준다고 한다. 그런데 뭔가 이 설명만으로는 애매한 것 같아 CLI에 달린 하이퍼링크에 들어가 더 많이 찾아보기로 하였다. 

    CLI링크에 들어가면 위의 npm정의보다는 조금 더(?) 이해하기 쉬운 방식으로 얘기하고 있다.

    Description : npm은 Node Javscript 플랫폼을 위한 패키지 매니저이며 모듈을 node가 찾을 수 있게끔 가져오며 의존성 충돌 문제를 해결해준다. 또한, 다양한 사용 사례를 지원해주며 개발, 설치, 출판(publish), 발견(discover)으로 주로 사용된다.

    그리고 Important 구문에서 우리가 라이브러리를 어디서 가져오는지 말해주고 있었다.

    Important : npm은 기본적으로 https://registry.npmjs.org 에서 공용 레지스트리를 사용되있도록 구성되었으며, 원하는 호환 가능한 레지스트리를 사용하도록 npm을 구성할 수 있으며 자체 레지스트리를 실행할 수 있다.
    즉, 우리가 원하는 입맛대로 npm을 조립하고, 설계하여 만들 수 있으며 이는 기본적으로 공용 레지스트리 사용을 기본으로 한다는 말로 생각된다. 그리고 이 방법은 CLI을 통해 npm과 상호작용하면서 실행되는 것으로 이해하였다.

    그 외에도 Dependency나 등등의 것들이 있지만 더 많으 것들은 차차 알아보기로 하였다.

  • registry : 우리가 npm에서 가져오는 것들은 자바스크립트 소프트웨어의 공용 데이터베이스에서 가져오는 것들로 meta-information으로 둘러싸여저 있다고 한다. 내 생각에는 사용자 입장에서는 아직 중요한 것은 아니며 다만 참고할 만한 점은 private registry를 통해 비공개적인 방법을 사용할 수 도 있다는 점은 생각해볼만 한 것 같다.



그저 npm을 사용하는 것으로 마칠 수 있었지만, 그래도 한 번쯤은 공식문서를 읽어보고 이런 것들도 있다는 것을 알면 좋을 것 같았다. 그리고 새롭게 알게된 사실 중 하나는, npm도 팀에서 협업하기 위해 사용할 수 있게끔 기능을 만들어 놓았으며 npm자체의 문제가 있으면 커뮤니티를 통해 알아보는 것도 좋을 것 같다.