본문 바로가기

JavaScript

npm은 뭘까?

안녕하세요 :)

 

자바스크립트 개발을 할 때 npm이라는 걸 자주 접하셨을 거라고 생각합니다. 이 npm은 뭘 하는 친구일까요? 

출처: https://www.ideas2it.com/blogs/executing-npm-install-the-right-way

 

npm은 JavaScript로 작성된 라이브러리와 도구들을 손쉽게 설치하고 관리할 수 있게 도와주는 패키지 매니저입니다. JavaScript 생태계에서는 거의 모든 프로젝트에서 npm을 사용하는데요, 왜냐하면 수많은 오픈소스 라이브러리들이 npm을 통해 공유되고, 이를 통해 개발자들이 필요할 때마다 다양한 기능을 손쉽게 추가할 수 있기 때문이죠.

이번 글에서는 npm이란 무엇이며, 어떻게 사용하는지, 그리고 npm 외의 대체 도구로 쓰이는 Yarn과 pnpm까지 함께 살펴보려 합니다.

 

npm 이란?

npm은 Node Package Manager의 약자로, JavaScript 언어로 작성된 소프트웨어 패키지를 관리하고 공유하기 위한 패키지 매니저입니다. Node.js와 함께 설치되며, JavaScript 생태계에서 패키지의 설치, 관리, 삭제를 맡고 있습니다. 간단히 말해, npm은 JavaScript 개발자들이 프로젝트에서 필요한 라이브러리와 도구를 쉽게 찾아 설치할 수 있도록 도와줍니다.

출처: https://medium.com/@dvru/what-is-npm-7111d1a18d08

 

Node.js와 함께 설치된다는 건 무슨 말일까요?

이건 Node.js를 설치하면 npm이 자동으로 포함된다는 의미입니다. npm은 Node.js와의 호환성을 위해 함께 제공되는 기본 패키지 매니저로, Node.js 설치 시 별도의 설치 과정 없이 사용할 수 있게 됩니다. Node.js는 JavaScript를 서버에서 실행하는 환경이고, npm은 그 환경에서 라이브러리와 도구를 관리하는 역할을 합니다.

 

또한, 둘은 같이 설치되지만 명확히 각자의 역할이 구분되어 있습니다. Node.js는 JavaScript를 서버에서 실행하는 런타임 환경이고, npm은 그 환경 위에서 사용할 수 있는 패키지와 라이브러리들을 설치하고 관리해주는 도구입니다.

 

 

그렇다면 왜 Node.js를 설치해야 할까요?

Node.js는 JavaScript를 서버에서도 실행할 수 있게 해주는 런타임 환경입니다. 원래 JavaScript는 브라우저에서만 동작하도록 설계되었기 때문에 서버에서는 JavaScript 대신 Java, PHP, Python 등이 주로 사용되었습니다.

조금 과거로 가보겠습니다. Node.js는 2009년에 개발되면서 JavaScript가 브라우저 밖에서도 실행될 수 있는 환경을 제공하게 되었습니다. Chrome V8 엔진을 기반으로 하여, JavaScript 하나로 프론트엔드와 백엔드를 모두 할 수 있는 새로운 길을 열어주었습니다.

Node.js를 설치하면 서버사이드 애플리케이션을 JavaScript로 개발할 수 있고, 함께 포함되는 npm을 통해 다양한 라이브러리와 빌드 도구를 관리할 수 있습니다. React, Vue와 같은 프레임워크나 Webpack, Babel 같은 빌드 도구들이 Node.js 환경에서 작동하므로, 서버사이드 JavaScript와 개발 도구 관리에 있어 필수적인 환경이라 할 수 있습니다.

 

npm의 기능과 사용 방법

npm은 JavaScript 생태계에서 패키지와 라이브러리를 설치 및 관리하는 역할을 맡습니다. 이를 통해 개발자는 필요에 맞는 패키지와 도구를 쉽게 추가하고, 관리하고, 업데이트 할 수 있죠.

출처: https://spectrumstutz.wordpress.com/2020/11/22/npm-node-package-manager/

 

1. 기본 명령어

npm에서 가장 기본적으로 제공되는 명령어들을 보겠습니다.

  • npm install < 패키지 이름 >
    • 프로젝트에 필요한 패키지를 설치하는 명령어입니다. 
    • 예를 들어, 'npm install react'라고 입력하면 react 패키지가 설치되고, react 패키지는 package.json의 dependencies 목록에 추가됩니다.
  • npm uninstall < 패키지 이름 >
    • 설치된 패키지를 삭제하는 명령어입니다.
    • 예를 들어, 'npm uninstall react'라고 입력하면 react 패키지가 삭제되고, react 패키지는 package.json의 dependencies 목록에서도 지워집니다.
  • npm update
    • 현재 설치되어 있는 모든 패키지를 최신 버전으로 업데이트시키는 명령어입니다.
  • npm list
    • 현재 개발 중인 프로젝트 내 설치된 모든 패키지 목록을 확인할 수 있는 명령어입니다.

 

2. package.json과 package-lock.json의 역할

package.json과 package-lock.json은 설치된 패키지를 관리하기 위해 사용되는 파일입니다.

  • package.json 
    • 프로젝트의 핵심이 되는 설정 파일로, 프로젝트 이름과 버전, 필요한 패키지 목록(dependencies와 devDependencies), 스크립트를 정의를 기록하는 파일입니다.
  • package-lock.json
    • 설치된 패키지와 그 정확한 버전 정보가 포함된 파일로, 모든 개발 환경에서 패키지들이 일관된 버전을 유지하도록 돕습니다.

좌: package.json 예시, 우: package-lock.json 예시

package.json과 package-lock.json의 명확한 차이점을 볼까요?

package.json은 패키지를 처음 설치하거나 공유할 때 필요한 최소 정보로 활용됩니다. package-lock.json파일도 비슷하지만 다른 점이 뭐냐면, 설치된 패키지의 정확한 버전과 의존성 구조를 기록한다는 점입니다. 

 

package-lock.json은 package.json에 정의된 대략적인 버전 범위와 달리, 모든 패키지의 고정된 버전 정보를 포함하여 의존성 트리를 상세히 기록하는데요. 이 파일이 npm install을 통해 설치된 패키지의 버전을 고정하여, 다른 개발자가 동일한 환경에서 동일한 버전을 설치할 수 있도록 보장합니다.

 

3. 스크립트 관리

npm은 package.json의 "scripts" 섹션을 통해 프로젝트 작업을 자동화된 명령어로 정의할 수 있습니다. 

  • npm run < 스크립트 명 >
    • package.json에 정의된 스크립트를 실행할 수 있습니다. 예를 들어, "dev": "next dev" 스크립트가 있으면, npm run dev로 개발 서버를 실행할 수 있습니다.

 

4. 보안 및 기타 관리 기능

npm은 보안 검사와 지원 가능한 패키지 목록을 제공합니다.

좌: npm audit 예시, 우: npm fund 예시

  • npm audit
    • 설치된 패키지와 보안 취약점을 검사하는 명령어입니다.
  • npm fund
    • 설치된 패키지 중 후원이 가능한 프로젝트 목록을 보여줍니다.

 

npm 생태계와 대체제

npm은 JavaScript 생태계에서 가장 널리 쓰이는 패키지 매니저입니다. 수백만 개의 오픈소스 라이브러리를 제공하는 중앙 허브 역할을 하는 것이죠. JavaScript 개발을 할 때 npm을 통한 라이브러리를 쉽게 설치하고 관리할 수 있습니다.

출처: https://krauser085.github.io/yarn/, https://pnpm.io/logos

 

하지만 JavaScript 개발을 할 때 쓰이는 패키지 관리자는 npm만 있는 건 아닙니다. Yarn과 pnpm같은 대체 매니저가 있습니다.

  • Yarn
    • 페이스북에서 개발한 Yarn은 병렬 설치와 캐싱 기능이 강화되어 npm보다 빠르게 패키지 설치할 수 있어 대규모 프로젝트에 적합합니다.
  • pnpm
    • 저장 공간을 절약하고, 중복 파일을 줄이는 방식으로 성능을 개선하여 더 빠르고 효율적인 설치를 제공합니다.

그럼 기존 npm과 대체제 중 어떤 걸 사용해야 할까요?

프로젝트 특성에 따라서 선택하거나 단순 취향에 맞춰서 선택하시면 좋을 거 같습니다..ㅎ.ㅎ

 

 

끝내는 말

오늘은 npm에 대해 알아보았습니다. npm은 JavaScript 개발에서 필수적인 도구로 자리 잡았고, 그만큼 사용 방법도 간단합니다. 하지만 Yarn이나 pnpm 같은 대체 도구들도 충분히 안정적이고, 각자의 장점을 갖고 있으니 프로젝트나 개인 취향에 맞춰 사용해보는 것도 좋습니다. 이런저런 도구들을 경험하면서, 본인에게 가장 편리한 도구를 선택하시면 좋을 거 같습니다...!

 

읽어주셔서 감사합니다 :)