본문 바로가기
개발/FRONT

NPM이란?

by 잠킴98 2024. 1. 13.
반응형

 

 

1. npm 알아보기


npm은 Node Package Manager의 약어로, 이름 그대로 노드 패키지 매니저입니다.

대부분의 자바스크립트 프로그램은 패키지라는 이름으로 npm에 등록되어 있으므로 특정 기능을 하는 패
키지가 필요하다면 npm에서 찾아 설치하면 됩니다.


npm에는 60만 개(2018년 5월 기준)에 달하는 패키지가 등록되어 있습니다. 이는 세계 최대 규모입니다. 방대한 양의 패키지들은 노드와 자바스크립트의 생태계를 더욱 견고하게 만들고 있습니다. 게다가 대부분 오픈 소스여서 노드를 사용해 웹을 개발할 때 많은 도움이 됩니다. npm에 업로드된 노드 모듈을 패키지라고 부릅니다. 모듈이 다른 모듈을 사용할 수 있는 것처럼, 패키지가 다른 패키지를 사용할 수도 있습니다. 이런 관계를 의존 관계라고 부릅니다. 


* yarn
npm의 대체자로 yarn이 있습니다. yarn은 페이스북이 내놓은 패키지 매니저입니다.

React나 React Native 같은 페이스북 진영의 프레임워크를 사용할 때 종종 볼 수 있습니다. npm의 사용 방법을 안다면 yarn도 쉽게 익힐 수 있습니다. npm과 비교해서 편리한 기능이 몇 가지 들어 있지만, 따로 설치해야 합니다.

npm 서버가 너무 느릴 경우 yarn으로 패키지를 대신 설치할 수 있습니다.

 

 

2. package.json으로 패키지 관리하기


서비스에 필요한 패키지를 하나씩 추가하다 보면 패키지 수가 100개를 훌쩍 넘어 버리게 됩니다. 그리고 사용할 패키지는 저마다 고유한 버전이 있으므로 어딘가에 기록해두어야 합니다.

 

같은 패키지라도 버전별로 기능이 다를 수 있으므로 동일한 버전을 설치하지 않으면 문제가 생깁니다. 이때 설치한 패키지의 버전을 관리하는 파일이 바로 package.json입니다. 따라서 프로젝트를 시작하기 전에 package.json부터 만들고 시작하는 것이 좋습니다. npm은 package.json을 만드는 명령어를 제공합니다.

 

 

3. 패키지 버전 이해하기


노드 패키지들의 버전은 항상 세 자리로 이루어져 있습니다. 심지어 노드의 버전도 세 자리입니다. 버전이 세 자리인 이유는 SemVer 방식의 버전 넘버링을 따르기 때문입니다.


SemVer는 Semantic Versioning(유의적 버전)의 약어입니다. 버전을 구성하는 세 자리가 모두 의미를 가지고 있다는 뜻입니다. 각각 패키지는 모두 버전이 다르고 패키지 간의 의존 관계도 복잡합니다.

 

만약 어떤 패키지의 버전을 업그레이드했는데 그것을 사용하는 다른 패키지에서 에러가 발생한다면 문제가 됩니다. 많은 패키지가 서로 얽히다 보면 이 문제는 점점 더 심각해집니다. 따라서 버전 번호를 어떻게 정하고 올려야 하는지를 명시하는 규칙이 등장했습니다. 이것이 바 SemVer입니다.


버전의 첫 번째 자리는 major 버전입니다. 주 버전이 0이면 초기 개발 중이라는 뜻입니다. 1부터는 정식 버전이라는 뜻입니다. major 버전은 하위 호환이 안 될 정도로 패키지의 내용이 수정되었을 때 올립니다. 예를 들어 1.5.0에서 2.0.0으로 올렸다는 것은, 1.5.0 버전 패키지를 사용하고 있던 사람들이 2.0.0으로 업데이트했을 때 에러가 발생할 확률이 크다는 뜻입니
다.


두 번째 자리는 minor 버전입니다. minor 버전은 하위 호환이 되는 기능 업데이트 시에 올립니다. 버전을 1.5.0에서 1.6.0으로 올렸다면 1.5.0 사용자가 1.6.0으로 업데이트했을 때 아무 문제가 없어야 합니다.


세 번째 자리는 patch 버전입니다. 새로운 기능이 추가되었다기보다는 기존 기능에 문제가 있어 수정한 것을 내놓았을 때 patch 버전을 올립니다. 1.5.0에서 1.5.1처럼요. 당연히 업데이트 후 아무 문제가 없어야 합니다.


새 버전을 배포한 후에는 그 버전의 내용을 절대 수정하면 안 됩니다. 만약 수정 사항이 생기면 major 버전, minor 버전, patch 버전 중 하나를 의미에 맞게 올려서 새로운 버전으로 배포해야 합니다. 배포된 버전 내용이 바뀌지 않기 때문에 패키지 간 의존 관계에 큰 도움이 됩니다.

 

특정 버전이 정상적으로 동작하고, 같은 버전을 사용한다면 어떠한 경우라도 정상적으로 동작할 것이라 믿을 수 있습니다.


버전의 숫자마다 의미가 부여되어 있으므로 다른 패키지를 사용할 때도 버전만 보고 에러 발생 여부를 가늠할 수 있습니다. 의존하는 패키지의 major 버전이 업데이트 되었다면 기존 코드와 호환이 되지 않을 확률이 크기 때문에 미리 주의를 기울여야 합니다.

 

minor나 patch 버전 업데이트는 비교적 안심하고 버전을 올릴 수 있습니다.


package.json에는 SemVer식 세 자리 버전 외에도 버전 앞에 ^나 ~ 또는 >, < 같은 문자가 붙어있습니다. 이 문자는 버전에는 포함되지 않지만 설치 또는 업데이트 시 어떤 버전을 설치해야 하는지 알려줍니다.


가장 많이 보는 기호는 ^입니다. minor 버전까지만 설치 또는 업데이트합니다. npm i express@^1.1.1이라면 1.1.1 < = 버전 < 2.0.0까지 설치됩니다. 2.0.0은 설치되지 않습니다. 1.x.x와 같이 표현할 수도 있습니다.


~ 기호를 사용한다면 patch 버전까지만 설치 또는 업데이트합니다.

 

npm i express@~1.1.1이라면 1.1.1 < = 버전 < 1.2.0까지 설치됩니다. 1.1.x와 같은 표현도 가능합니다. ~보다 ^가 많이 사용되는 이유는 minor 버전까지는 하위 호환이 보장되기 때문입니다.


>, <, > =, < =, =는 알기 쉽게 초과, 미만, 이상, 이하, 동일을 뜻합니다. npm i express@>1.1.1처럼 사용합니다.

반드시 1.1.1 버전보다 높은 버전이 설치됩니다.


추가로 @latest도 사용하는데, 항상 최신 버전의 패키지를 설치합니다. x로도 표현할 수 있습니다(예: npm i express@latest 또는 npm i express@x).

 

 

반응형

'개발 > FRONT' 카테고리의 다른 글

VUE HTTP 통신  (0) 2024.01.20
vue 라이프 사이클에 대하여  (0) 2024.01.14
jquery json을 form으로, form을 json으로  (0) 2024.01.13
data attribute와 dataset  (0) 2024.01.07
ES2015+(async, await)  (0) 2024.01.07