Node.js은 오픈 소스 크로스 플랫폼 JavaScript 런타임 환경입니다. 지난 몇 년 동안 빠른 입력/출력(I/O) 성능과 타의 추종을 불허하는 JavaScript 문법 덕분에 백엔드 웹 개발을 위한 인기 있는 선택지가 되었습니다. 또한, 유연한 특성 덕분에 신속한 커스터마이징이 가능하여 이 서버 기술은 경쟁 기술들 사이에서 단연 돋보입니다.
Node.js 패키지 매니저 — 개요
Node.js Package Manager 또는 npm은 JavaScript의 기본 패키지 매니저입니다. Npm은 흔히 프로젝트 스크립트를 설치하고 Node.js 프로젝트에서 외부 모듈을 작동하는 데 사용됩니다. 게다가, 프로젝트의’ 디렉토리에 위치한 package.json 파일을 사용하여 프로젝트에 설치된 모듈을 추적합니다. Npm은 다음과 같은 정보를 저장하고 기록합니다:
- 프로젝트에 필요한 모듈 및 설치된 버전(있는 경우).
- 작성자, 라이선스 등의 세부 정보를 포함하는 프로젝트의 메타데이터 설명.
- 프로젝트 관련 또는 목표 지향적 작업을 자동화하기 위한 실행 가능한 스크립트.
이 튜토리얼에서는 Node.js 모듈을 npm 및 package.json.
과 함께 사용하는 단계를 안내합니다. 시작해 봅시다!
사전 요구 사항
이 튜토리얼을 진행하려면 다음이 필요합니다:
- Node.js가 시스템에 설치되어 있어야 합니다.
- 다음을 따라 Ubuntu 18.04에 Node.js를 설치
-
하십시오. 시스템에 설치된 Ubuntu의 최신 버전.
1단계: package.json 파일 생성
Node.js locator 모듈을 사용하는 더미 프로젝트의 예를 들어 튜토리얼을 시작하겠습니다. 이 프로젝트는 사용자의 IP 주소를 수집하고 사용자의 출신 국가로 출력을 공유하는 것을 목표로 합니다. 여기서는 Node.js 모듈을 npm과 함께 사용하는 방법을 이해하는 데 중점을 두고 있으므로, 모듈을 수동으로 작성할 필요가 없습니다. 대신 프로젝트에서 사전 설치되고 커스터마이징 가능한 패키지를 사용할 것입니다.
JSON 또는 JavaScript Object Notation(JavaScript Object Notation)은 데이터를 공유하고 전송하는 데 사용되는 표준 형식입니다. 처음에는 JSON 파일을 생성하여 소프트웨어 의존성을 저장하고 관리할 것입니다. 하지만 package.json을 수동으로 생성하는 것은 번거롭고 시간이 많이 걸립니다. 간단하게 하기 위해, 처음부터 init 명령어를 사용하여 package.json 파일을 생성할 것이며, JSON을 처음부터 작성하기 위해 추가 코드 블록을 작성하는 수고를 덜 것입니다.
-
init 명령어
먼저, mkdir 명령어를 사용하여 새 폴더를 생성하고 이름을 locator:
|
1 |
mkdir locator |
다음으로, cd 명령어를 사용하여 새로 생성된 폴더로 이동합니다:
|
1 |
cd locator |
그런 다음, ENTER npm 을 입력하여 대화형 프롬프트를 초기화합니다:
|
1 |
npm init |
그 후, 다음과 같은 출력이 표시됩니다:

1. name
새 프로젝트의 name(즉, 현재 폴더)으로 안내됩니다. 괄호 안에 기본값이 표시됩니다 (). 이 튜토리얼을 간단하고 이해하기 쉽게 유지하기 위해 기본 옵션을 그대로 사용하겠습니다. ENTER 키를 눌러 수락하고 계속 진행합니다.
2. version
다음 값은 version 이름으로, 프로젝트를 npm 패키지 저장소에 공유할 때 필수 요구 사항입니다.
|
참고: Node.js 패키지는 Semantic Versioning (semver) 가이드를 따릅니다. 첫 번째 숫자: MAJOR 버전이며, API가 변경될 때만 변경됩니다. 두 번째 숫자: MINOR 버전이며, 추가 기능이 더해질 때 변경됩니다. 마지막 숫자: PATCH 버전이며, 오류나 버그가 해결될 때 변경됩니다. |
3. description
The description은 Node.js 모듈의 작업 프로세스를 설명하는 정보 문자열입니다. 이번 데모에서 locator 프로젝트는 사용자의 IP 주소를 가져와 출신 국가를 반환합니다.
|
참고: 대부분의 모듈은 진입점으로 index.js 파일을 가집니다. 이는 또한 npm 모듈의 진입점인 main 속성이기도 합니다. package.json의 속성입니다. 하지만 package.json 파일을 찾을 수 없으면, Node.js가 자동으로 index.js 파일을 로드합니다. |
4. test command
프로젝트 테스트를 실행하기 위한 실행 가능한 스크립트 또는 명령어입니다. 테스트는 이 튜토리얼의 범위를 벗어나므로 건너뛰고 ENTER.
5. init command
The init 명령어는 프로젝트의 GitHub Repository를 요청할 것입니다. 이 부분도 건너뛰고 계속 진행하겠습니다.
6. keywords
키워드 은(는) 저장소를 검색하는 데 사용되는 문자열 배열입니다. 키워드를 프로젝트와 정확하고 관련성 있게 유지하여 원활하게 추적할 수 있도록 하는 것이 좋습니다.
이러한 키워드들을 문자열로 나열하고 쉼표를 사용하여 구분합니다. 우리 프로젝트에서는 프롬프트에 ip, country, latitude, 그리고 longitude를 프롬프트에 입력하면 이들이 다음 파일에 키워드로 포함된 것을 볼 수 있습니다: package.json.
7. author
Treat the author 필드를 피드백 및 사용자와 소통하는 방법으로 취급하세요. 예를 들어, 사용자가 모듈에서 오류를 발견하면 이 필드를 사용하여 귀하에게 알리고 오류를 해결할 수 있습니다.
-
형식: "이름 \<이메일\> (웹사이트)".
-
데모: "Paul\<paul@your_domain\> (https://your_domain)"
-
이메일 및 웹사이트 데이터를 추가하는 것은 선택 사항입니다. 하지만 유효한 작성자를 지정하고 연락처 정보를 author 필드에 추가할 수 있습니다. 세부 정보를 확인하고 ENTER.
8. license
The license 필드는 사용자가 모듈을 사용하는 동안 알아야 하는 법적 이용 약관을 설명합니다. Node.js 모듈은 오픈 소스이므로, npm은(는) 이를 자동으로 ISC-license으로 구성합니다.
오픈 소스 라이선스 페이지로 이동하여 귀하의 요구에 가장 잘 맞는 Open Source Initiative 라이선스를 선택하세요. 저장소에 라이선스가 필요하지 않은 경우 프롬프트에 UNLICENSED를 입력하세요. 이 튜토리얼에서는 기본 ISC 라이선스를 사용합니다. 이 프로세스를 완료하려면 ENTER 를 누르세요.
The init 명령은 package.json 파일을 생성하고 결과를 표시합니다:

다음으로, ENTER를 눌러 계속 진행하고 package.json 파일을 생성합니다. 우리의 JSON 파일은 프로젝트에 설치할 모든 모듈과 패키지의 기록을 유지합니다.
다음 단계에서는 종속성과 Node.js 모듈을 설치하겠습니다.
2단계: 종속성 및 모듈 설치
맞춤형 외부 라이브러리를 만드는 것은 시간이 많이 걸리고 힘든 노력이 필요합니다. 대신 가장 효과적인 방법은 미리 정의된 종속성과 외부 라이브러리를 설치하는 것입니다. 이 튜토리얼에서는 데모 로케이터 모듈이 지리적 데이터를 수집하기 위해 외부 API 요청을 할 수 있도록 HTTP 라이브러리를 사용하여 데모 로케이터 모듈이 지리적 데이터를 수집하기 위해 외부 API 요청을 할 수 있도록 할 것입니다.
이 가이드에서는 axios 라이브러리를 사용하여 HTTP 요청을 보냅니다. 먼저, axios를 설치하겠습니다:
|
1 |
npm install axios --save |
먼저 npm 패키지를 설치하고 공백으로 구분하여 나열합니다. 또한, 프로젝트가 프로젝트 종속성으로 저장되도록 --save 태그를 포함하세요.
다음과 같은 출력이 표시됩니다:

Open the package.json 파일을 nano 또는 원하는 텍스트 편집기를 사용하여 엽니다:
|
1 |
nano package.json |
코드 블록 하단에 강조 표시된 새로 추가된 속성을 확인하세요:

-
개발 종속성 다운로드
개발 종속성은 프로젝트 개발에 사용되는 패키지이며 프로젝트의 프로덕션 또는 유지 관리에는 사용되지 않습니다. 이러한 종속성이 프로덕션 영역에서는 비효율적으로 보일 수 있지만, 코드를 작성하고 재작성하는 데 중요한 역할을 합니다.
코드 린터와 마찬가지로 개발 종속성은 소프트웨어 개발에서 중요한 역할을 합니다. 대부분의 경우 개발자는 프로젝트 개발 중에 스타일의 일관성과 통일성을 유지하기 위해 code linters를 사용하며, 이는 프로덕션 단계에서는 무용지물입니다.
프로젝트의 개발 종속성으로 린터를 설치해 보겠습니다. 또한, --save-dev 플래그를 사용하여 eslint 을 개발에 필요한 종속성으로 저장합니다:
|
1 |
npm i eslint@6.0.0 --save-dev |
모듈을 업데이트할 때 버전이 태그되도록 종속성에 @6.0.0을(를) 추가했습니다. 기호 @ 은(는) npm에 설치하려는 특정 태그를 검색하도록 알립니다. 이제 package.json 파일을 다시 엽니다:
|
1 |
nano package.json |
다음과 같은 출력이 표시됩니다:

- 자동 생성된 파일: node_modules 및 package-lock.json
처음에 Node.js 프로젝트에 패키지를 설치하는 동안 package.json 및 package-lock.json 파일이 자동으로 생성됩니다. 작업 디렉토리에서 이 파일들을 확인하세요:
![]()
설치된 대부분의 종속성은 node_modules 폴더의 경우, 버전 관리 저장소에 이 폴더를 커밋하지 않는 것이 좋습니다. 설치된 종속성 수가 증가함에 따라 node_modules 의 크기도 커집니다.
반대로, package-lock.json 파일은 설치된 정확한 버전의 기록을 유지하므로, node_modules을 명시적으로 포함할 필요가 없습니다. node_modules 폴더와 달리, 이 파일은 버전과 함께 모든 종속성에 대한 자세한 표현을 제공하므로 버전 관리 저장소에 커밋할 수 있습니다.
- 다음으로 설치: package.json
The package.json 및 package-lock.json 파일들을 사용하면 프로젝트 개발을 시작하기 전에 동일한 프로젝트 종속성을 설정할 수 있습니다. 디렉터리 트리로 이동하여 locator와 동일한 디렉터리 수준에 새 폴더를 만듭니다. 새 폴더의 이름을 cloned_locator:
|
1 2 |
cd .. mkdir cloned_locator |
다음으로, cloned_locator:
|
1 |
cd cloned_locator |
가져오기: package.json 및 package-lock.json 파일 (위치: locator, 대상: cloned_locator:
|
1 |
cp ../locator/package.json ../locator/package-lock.json . |
The . 은 현재 폴더를 나타냅니다. 다음 명령어를 사용하여 필요한 모듈을 설치합니다:
|
1 |
npm i |
처음에는 npm이 package-lock.json 파일을 확인하여 모듈을 설치합니다. lock 파일이 없는 경우, package.json 파일을 읽어 설치할 항목을 결정합니다.
일반적으로 package-lock.json에서 설치하는 것이 간단합니다. lock 파일에 모듈 및 해당 종속성의 정확한 버전이 포함되어 있기 때문입니다. 즉, package.json을 사용하여 설치할 때, , npm은 호환 가능하고 안정적인 버전을 찾는 데 필요한 추가 시간을 절약해 줍니다.
다음 --production 태그를 추가하여 개발 종속성을 무시합니다:
|
1 |
npm i --production |
그 후, locator로 돌아갑니다:
|
1 |
cd ../locator |
- 전역 설치
지금까지는 npm 모듈을 로컬에 설치했습니다. 하지만 패키지를 전역으로 설치하고 셸 명령어나 CLI를 통해 사용하는 대안도 있습니다. 예를 들어, Hexo 라이브러리를 사용하여 현재 locator 프로젝트를 탐색하고 정적 웹사이트를 관리할 수 있습니다. 전역으로 -g 태그와 함께 다음 명령어를 사용하여 Hexo CLI를 설치하십시오:
|
1 |
npm i hexo-cli -g |
|
참고: 패키지를 전역으로 설치하는 동안 오류가 발생하면, 루트 권한으로 다음 명령어 sudo npm i hexo-cli -g 를 시도해 보십시오. |
패키지가 성공적으로 설치되었는지 확인하려면 다음 명령어를 사용하십시오:
|
1 |
hexo --version |
다음과 같은 출력이 표시됩니다:

3단계: 모듈 관리 및 업데이트
패키지 관리자는 단순히 Node.js 모듈을 설치하는 것 이상의 역할을 합니다. 편의에 따라 목록 표시, 업데이트, 제거 또는 보안 레이어 추가까지 할 수 있는 다양한 사용자 정의 옵션이 있습니다.
이 섹션에서는 다음 방법을 배웁니다:
-
모듈 목록 표시
-
모듈 업데이트
-
모듈 제거
-
모듈 감사(Audit)
각각에 대해 자세히 알아보겠습니다:
-
모듈 목록 표시
모듈 목록 표시는 이름에서 알 수 있듯이 프로젝트에 설치된 모든 모듈에 대한 세부 정보를 제공합니다. package.json 파일을 읽는 대신, ls 또는 list 명령어를 사용하여 프로젝트 모듈을 자세히 파악할 수 있습니다:
|
1 |
npm ls |
다음과 같은 출력이 표시됩니다:

기본적으로 ls 명령어는 프로젝트 종속성과 해당 모듈이 의존하는 모듈을 포함한 전체 종속성 트리를 나열합니다. 하지만 전체적인 개요만 보거나 특정 모듈을 명시적으로 지정할 수도 있습니다. 종속성 없이 설치한 모듈만 확인하려면 다음 명령어를 사용하십시오:
|
1 |
npm ls --depth 0 |
다음과 같은 출력이 표시됩니다:

-
모듈 업데이트
소프트웨어 충돌이나 오류가 발생하지 않도록 항상 npm 모듈을 최신 상태로 유지하는 것이 좋습니다. 업데이트가 필요한지 확인하려면 다음 명령어를 사용하십시오:
|
1 |
npm outdated |
다음과 같은 출력이 표시됩니다:

각 용어에 대해 자세히 알아보겠습니다:
- 패키지(Package): 프로젝트에 설치된 현재 Package 를 나열합니다.
- 현재(Current): 패키지의 Current 버전을 보여줍니다.
- 필요 버전(Wanted): 필요한 npm 버전 요구 사항에 가장 잘 맞는 버전 package.json.
- 최신: 이는 최신 npm 버전을 보여주며, 필요한 경우 업데이트해야 합니다.
- 위치: 패키지 위치 의존성 트리에서의 위치.
제안된 대로, npm을(를) 안정적인 버전으로 업데이트할 수 있습니다. 다음 명령어를 사용하여 현재 패키지를 업데이트하세요:
|
1 |
npm up eslint |
다음과 같은 출력이 표시됩니다:

하나씩 업데이트하는 대신, 다음 up 명령어를 사용하여 모든 모듈을 한 번에 업데이트할 수도 있습니다:
|
1 |
npm up |
-
모듈 삭제
의존성이 예상한 출력을 보여주지 않아 맞춤형 의존성을 만들어야 하는 경우가 많습니다. 이러한 시나리오에서는 package.json 및 package-lock.json 파일에서 의존성을 삭제할 수 있는 옵션이 있습니다. 예를 들어, axios 가 의존성으로 등록되어 있는데 만족스러운 결과를 제공하지 못한다고 가정해 보겠습니다. 의심할 여지 없이 프로젝트에서 이 저장소를 제거할 것입니다. 다음 uninstall 또는 un 명령어를 사용하여 axios:
|
1 |
npm un axios |
다음과 같은 출력이 표시됩니다:

Though the uninstall 명령어가 의존성을 제거했지만, 제거되었다는 알림은 받지 못했습니다. 현재 의존성이 몇 개 남아 있는지 확인하기 위해 의존성 목록을 나열해 보겠습니다:
|
1 |
npm ls --depth 0 |
목록에 axios 의존성이 없는 출력이 표시됩니다:

-
모듈 감사
프로젝트에 설치된 의존성이 잠재적인 보안 위협에 취약한 경우, 이를 감지할 수 있습니다. 먼저, 감사 모듈이 어떻게 작동하는지 확인하기 위해 오래된 버전의 request 모듈을 설치해야 합니다:
|
1 |
npm i request@2.60.0 |
위협이나 취약점을 해결하라는 출력이 표시됩니다:

취약점 및 위협에 대한 자세한 내용을 보려면 audit 명령어를 사용하세요:
|
1 |
npm audit |
자세한 보안 보고서가 표시됩니다:

이러한 취약점을 해결하려면 fix 명령어를 사용하세요:
|
1 |
npm audit fix |
다음과 같은 출력이 표시됩니다:

9개의 취약점 중 2개가 해결된 것을 확인하셨을 것입니다. 하지만 audit fix 가 모든 문제를 해결하지는 못하기 때문에 나머지 7개의 취약점은 의존성에 여전히 남아 있습니다. 이 문제를 해결하려면 다른 API를 사용하여 의존성을 더 높은 버전으로 업데이트해야 할 수 있습니다. 업데이트할 때는 의존성 트리의 상위 코드가 손상될 가능성이 있으므로 주의해야 합니다. 취약점이 사라졌는지 확인하려면 다음 명령어를 사용하세요:
|
1 |
npm audit fix --force |
취약점 위협을 해결하기 위해 다른 API를 사용할 때는 주의하세요. 확실하지 않은 경우 코드 기능이 손상될 수 있습니다.
결론
결론적으로, 우리는 Node.js 모듈을 npm 및 package.json과(와) 함께 사용하는 방법을 살펴보았습니다. 또한 패키지 의존성을 나열, 업데이트, 관리, 감사 및 삭제하는 방법도 알아보았습니다. 다음 도전 과제로, 이 가이드에서 다룬 개념을 활용하여 패키지를 직접 설치하고 테스트해 보시기 바랍니다. 또한 학습 효과를 높이기 위해 build Node.js applications하고 configure dependencies해 볼 수도 있습니다.
그 외에도 Node.js 및 Javascript 주제에 대한 다양한 학습 자료를 our blog:
- CentOS 8에 Node.js 설치하기: 전체 가이드
- PostgreSQL과 Node.js 애플리케이션 연결하기: 튜토리얼
- React 애플리케이션에서 HTTP 클라이언트 Axios 사용하기: 튜토리얼
- Ubuntu 20.04에서 Docker를 사용하여 Node.js (Express.js) 앱 배포하는 방법
즐거운 컴퓨팅 되세요!
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.