Backend/Node.js

Node.js - NPM과 모듈

yxemsy 2022. 2. 18. 16:56

1) NPM

Node Package Manager의 약자로 Node.js 프로젝트를 관리하는 필수 도구다.
(온라인 저장소 + 커맨드라인 도구)

온라인 저장소: 오픈소스 라이브러리와 도구들이 업로드되는 저장소
커맨드라인 도구: 프로젝트 관리를 위한 다양한 명령어 제공

 


2) NPM 사용 ( 간단한 프로젝트 시작에만 필요한 내용만을 함축적으로 다루겠다.)

 - 프로젝트 생성하기

$npm init

프로젝트 디렉터리를 생성한 뒤, 해당 디렉터리 안에서 init 명령어를 사용하여 프로젝트가 생성 가능하다.

사진 처럼 몇 개의 질문이 나올 텐데 처음엔 필요한 거 빼고 그냥 모두 엔터.

그럼 package.json 이라는 파일을 만들어준다. 

 

* 여기서 package.json이란?

프로젝트 관련 정보들이 저장되는 파일로, 파일을 직접 수정하거나 명령어를 사용해 프로젝트 정보 수정이 가능하다.

프로젝트 버전, 이름, 설명, 의존성 패키지 등등으로 구성되어있다.

package.json

 

- 의존성 관리하기

프로젝트 내에서 사용하는 라이브러리를 관리하는 것이다.

프로젝트 실행은 라이브러리에 의존하기에, 이런 라이브러리들을 의존성(dependency)이라고 한다.

 

- 라이브러리란?

특정 기능을 수행하는 코드의 묶음으로, 패키지라고도 부른다. 

 

- npm install

이 명령어를 통해 프로젝트 의존성을 관리할 수 있다.

(npm i 로도 사용 가능하다.)

$npm install [패키지 이름]

install 뒤에 필요한 패키지 명만 붙여주면 설치가 가능하다.

package.json의 dependencies 안에 추가되고, node_modules 디렉토리에 저장됨.

node_modules 예시

 

- package-lock.json

프로젝트에 의존성을 추가하면 생성되는 파일이다.

의존성 버전이 갑자기 변경되지 않도록 설치된 버전을 고정하는 역할을 한다.

 

- 스크립트 실행하기

스크립트란 간단한 동작을 수행하는 코드로,

package.json의 scripts에 선언된 스크립트를 npm run [스크립트 이름]으로 실행한다.

scripts

 

$npm run start // 이렇게 실행
"nodemon app" // 이렇게 출력

 


3) Node.js의 모듈

프로젝트가 커지면 기능에 맞게 코드를 분리하는 것이 중요하다.
모듈은 코드를 분리하기 위한 방법이다.
 *(참고로 패키지는 모듈의 모음이라고 할 수 있음!)

 

기본 제공모듈 몇 가지를 알아보자!

  • process

현재 실행 프로세스 관련 기능을 제공하며, arch, argv, env등 실행환경 및 변수 관련 값과

abort, kill, exit등 프로세스 동작 관련 함수 제공

 

  • fs

파일 입출력을 위해 사용한다. readFile, writeFile 함수로 파일을 읽거나 쓴다.

watch 로 파일/디렉터리 변경 이벤트를 감지할 수도 있다.

 

  • http

http서버, 클라이언트를 위해 사용한다. createServer 함수로 서버를 생성하며,

Request 함수로 http 요청을 생성한다.

 


4) 모듈의 기본 작성법

// index.js
const name = 'hayan'
const age = 25

module.exports = {
    name,
    age
}
=================================================
const user = require('./index.js')

====== 위의 코드는 index.js 안의 코드이다. name과 age 값을 쓰고싶으면

name과 age를 module.exports로 내보내야 한다.

====== 아래가 다른 파일이라 가정하면, require('경로') 를 통해 module을 불러올 수 있다.

 

즉, 모듈은 require할 때 모듈 코드가 실행된다.

 

* 모듈 작성은 아래처럼 변수명으로도 가능하다.

모듈을 객체로 만들고, 각 key와 value를 지정해서 내보낸다.

exports.name = name
exports.age = age

 

* 또한 아래처럼 함수로도 작성이 가능하다.

module.exports = (name, age) => {
    return {
    	name,
        age
        }
   }

 

직접 작성한 모듈 외에도 npm 패키지를 설치하고 load 할 때는

마찬가지로 require('패키지 이름') 으로 하면 된다. 예를 들어

const express = require('express')

express를 설치하고 require하여 모듈 사용이 가능하다.