상세 컨텐츠

본문 제목

[노드 1팀] 5장. 패키지 매니저

24-25/Node.js 1

by gooroominuna 2024. 11. 15. 10:01

본문

728x90

5.1 npm 알아보기

npm

Node Package Manger의 약자로 노드 패키지 매니저를 말한다.

프로그래밍을 할 때 모든 기능을 직접 구현하는 것은 벅차기 때문에, 다른 사람들이 볼 수 있게 코드를 공개해 둔 서버이다.

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

 package.json

서비스에 필요한 패키지를 추가하다 보면 패키지가 많아지는데, 이 패키지는 각자 고유한 버전을 갖는다.

이때, 같은 패키지라도 버전별로 기능이 다를 수 있으므로 패키지 버전을 관리하는 것이 필요하다.

-> 패키지의 버전을 관리하는 파일이 바로 package.json이다.

 

package.json 만들기

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (폴더명) [프로젝트 이름 입력]
version: (1.0.0) [프로젝트 버전 입력]
description: [프로젝트 설명 입력]
entry point: index.js
test command: [엔터 키 클릭]
git repository: [엔터 키 클릭]
keywords: [엔터 키 클릭]
author: [여러분의 이름 입력]
license: (ISC) [엔터 키 클릭]
About to write to C:\Users\zerocho
pmtest\package.json:

{
  "name": "npmtest",
  "version": "0.0.1",
  "description": "hello package.json",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "ZeroCho",
  "license": "ISC"
}

Is this ok? (yes) yes

 

노드 프로젝트를 시작하기 전에는 폴더 내부에 무조건 package.json부터 만들고 시작해야 한다.

위처럼 npm init 명령어를 입력하면 package.json이 만들어진다.

아래는 입력해야 하는 각 항목을 설명한 것이다.

 

• package name: 패키지의 이름. package.json의 name 속성에 저장된다.
• version: 패키지의 버전. npm의 버전은 다소 엄격하게 관리되는데 5.3절에서 다룬다.
• entry point: 자바스크립트 실행 파일 진입점. 보통 마지막으로 module.exports를 하는 파일을 지정함. package.json의 main 속성에 저장된다.
• test command: 코드를 테스트할 때 입력할 명령어를 의미. package.json scripts 속성 안의 test 속성에 저장된다.
• git repository: 코드를 저장해 둔 깃(Git) 저장소 주소를 의미. 나중에 소스에 문제가 생겼을 때 사용자들이 이 저장소에 방문해 문제를 제기할 수도 있고, 코드 수정본을 올릴 수도 있다. package.json의 repository 속성에 저장된다.
• keywords: 키워드는 npm 공식 홈페이지(https://npmjs.com)에서 패키지를 쉽게 찾을 수 있게 함. package.json의 keywords 속성에 저장된다.
• license: 해당 패키지의 라이선스를 넣으면 된다.

 

 

그다음,  npm run test [스크립트 명령어]를 입력하면 해당 스크립트가 실행된다.

 

익스프레스(Express) 설치

$ npm install express
added 50 packages, and audited 51 packages in 1s

2 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

 

npm install express를 통해 익스프레스 패키지를 설치할 수 있다.

설치한 패키지는 package.json에 아래와 같이 기록된다.

{
  "name": "npmtest",
  ...
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.3",
  }
}

 

여기서 dependencies 속성이 새로 생기게 되고, express라는 이름과 함께 설치된 버전이 저장된다.

 

모듈 여러 개 동시에 설치하기

$ npm install morgan cookie-parser express-session
added 12 packages, and audited 63 packages in 2s

2 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

 

위처럼 npm install [패키지 1] [패키지 2] [패키지 3] [...]와 같이 패키지를 나열하면 된다.

 

5.3. 패키지 버전 이해하기

SemVer

노드 패키지의 버전은 SemVer 방식의 넘버링을 따른다.

SemVer이란, Sematic Versioning(유의적 버전)의 약어로, 버전을 구성하는 세 자리의 숫자가 모두 의미를 가진다는 뜻이다.

 

  1. 버전의 첫 번째 자리: 메이저(major) 버전 - 하위 호환이 안 될 정도로 패키지 내용이 수정되었을 때
  • 0: 초기 개발 중
  • 1: 정식 버전

    2. 버전의 두 번째 자리: 마이너(minor) 버전 - 하위 호환이 되는 기능 업데이트를 할 때

    3. 패치(patch) 버전: 기존 기능에 문제가 있어 수정한 것을 내놓았을 때

 

 

버전 앞에 붙는 문자

SemVer 식 세 자리 버전 외에도 버전 앞에 ^, ~, >, <와 같은 문자가 붙는다. 이는 설치/업데이트할 때 어떤 버전을 설치해야 하는지 알린다.

 

1. ^ : 가장 많이 보는 기호로 마이너 버전까지만 설치하거나 업데이트한다. ex) 버전이 1.1.1이라면 1.1.1~2.0.0 설치 가능하다.

2. ~ : 패치 버전까지만 설치하거나 업데이트한다. ex) 버전이 1.1.1이라면 1.1.1~1.2.0 설치 가능하다.

3. >, <, >=, <=, = : 초과, 미만, 이상, 이하, 동일을 의미한다. ex) 버전이 npm i express@>1.1.1이라면 1.1.1보다 높은 버전이 설치된다.

4. @latest : 안정된 최신 버전의 패키지를 설치한다.

5. @next : 가장 최근 배포판을 사용할 수 있다.

 

패키지 버전의 주의사항

  1. 새 버전을 배포한 후에는 그 버전의 내용을 수정하면 안 된다. 만약 수정사항이 생기면 메이저, 마이너, 패치 버전 중 하나를 의미에 맞게 올려 새로운 버전으로 배포해야 한다.
  2. 버전의 숫자마다 의미가 부여되어 있어 버전만 보고도 에러 발생 여부를 가늠할 수 있다. 단, 의존하는 패키지의 메이저 버전이 업데이트되면 기존 코드와 호환이 되지 않을 가능성이 크기에 주의해야 한다.

5.4 기타 npm 명령어

npm outdated // 업데이트할 수 있는 패키지가 있는지 확인
npm uninstall [패키지 이름] // 해당 패키지를 제거하는 명령어
npm rm [패키지 이름] // npm unistall [패키지 이름]과 같음
npm search [검색어] // npm 패키지 검색
npm info [패키지 이름] // 패키지의 세부 정보 파악
npm login // npm 로그인
npm whoami // 로그인한 사용자가 누구인지 알림
npm logout // npm login으로 로그인한 계정을 로그아웃
npm version [버전] // package.json의 버전을 올림
npm deprecate [패키지 이름] [버전] [메세지] // 해당 패키지를 설치할 때 경고 메세지를 띄우게 함
npm publish // 자신이 만든 패키지를 배포
npm unpublish // 배포한 패키지를 제거

 

5.5 패키지 배포하기

패키지를 배포하는 방법은 다음과 같다.

 

1. npm 계정을 만든다.

2. 패키지로 만들 코드를 작성한다. 이때, package.json의 main 부분의 파일명과 일치해야 한다.

3. num publish 명령어를 사용해 패키지를 배포한다.

$ npm publish
npm  notice
// notice 생략
npm ERR! code E403
npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/npmtest - You do not have permission to publish "npmtest". Are you logged in as the correct user?
npm ERR! 403 In most cases, you or one of your dependencies are requesting
npm ERR! 403 a package version that is forbidden by your security policy, or
npm ERR! 403 on a server you do not have access to.

npm ERR! A complete log of this run can be found in:
npm ERR!      C:\Users\speak\AppData\Roaming
pm-cache\_logs\2022-04-24T17_52_25_852Z-debug.log

 

4. 배포한 패키지가 npm에 제대로 등록되었는지 확인한다.

$ npm publish
// notice 생략
+ npmtest-1234@0.0.1
$ npm info npmtest-1234
npmtest-1234@0.0.1 | ISC | deps: none | versions: 1
hello package.json
// 중략
maintainers:
- zerocho <zerohch0@gmail.com>

dist-tags:
latest: 0.0.1

published 51 seconds ago by zerocho <zerohch0@gmail.com>

 


Quiz

1. 노드의 패키지 매니저의 이름은 (         npm         )이다.

2. 서비스를 개발하다 보면 우리는 많은 패키지를 이용하게 된다. 각각의 패키지는 각자 고유한 (         버전         )을 가지므로 관리가 필요하다. 이때, 관리를 위해 사용하는 파일의 이름은 (     package.json     )이다.

3. 폴더 내에 packagae.json을 만들기 위해서는 명령어 '(       npm init       )'를 입력해야 한다.

4. 노드 패키지의 버전은 (       SemVer   ) 넘버링 방식을 따른다.

5. 버전이 npm i express@~0.1.1인 경우, (       0.1.1~0.2.0       ) 범위의 버전이 설치 가능하다.

6. npm에 로그인하기 위해서는 '(       npm login      )' 명령어를, npm을 로그아웃하기 위해서는 '(      npm logout      )' 명령어를 입력해야 한다.

7. 패키지의 버전에 수정사항이 생기면 기존 버전을 그대로 수정하여 다시 배포해도 된다. (      X       ) 

8. 패키지의 버전 번호만 참조하면 에러 발생 여부를 알 수 있다. (      X       ) 

 

Programming Quiz

1. 다음과 같이 test 폴더에서 package.json을 만들었다. package.json 미리 보기 속 빈칸을 채우시오.

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (test) Node_prac
version: (1.0.0) 1.2.1
description: node practice
entry point: test.js
test command:
git repository:
keywords:
author: coconut
license: (ISC)
About to write to C:\Users\coconut
pmtest\package.json:

{
  "name": "       ",
  "version": "       ",
  "description": "        ",
  "main": "         ",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "        ",
  "license": "        "
}

Is this ok? (yes) yes

 

2. 4개의 모듈을 한 번에 설치하고자 한다. 모듈의 이름을 각각 'Bbacoconut', 'Krong', 'Oze', 'Snoopy'라고 할 때, 입력할 명령어를 쓰시오.


Answer

1. (위에서부터 순서대로) Node_prac, 1.2.1, node practice, test.js, coconut, ISC

2. 

$ npm install Bbacoconut Krong Oze Snoopy

 

 

 

출처 :  조현영,  Node.js 교과서 개정 3판, 길벗(2022)

Corner Node.js 1
Editor : 빠다코코넛

728x90

관련글 더보기