본문 바로가기
엘리스 AI 트랙 4기/elice AI track

[5주차] Node.js 모듈

by _sweep 2022. 2. 16.

2월 16일 자 학습 내용 정리입니다.

 

 

Node.js 모듈

모듈은 기능에 맞게 코드를 분리한 것이다.
패키지는 모듈의 모음이다.
Node.js는 다양한 모듈을 기본적으로 제공한다.

 

✔️ console

브라우저에서 제공되는 console과 유사한 디버깅도구이다.
log, warn, error 등으로 로그 레벨을 표시할 수 있고 time, timeLog, timeEnd로 시간을 추적할 수 있다.

 

✔️ process

현재 실행 프로세스 관련 기능을 제공한다.
arch, argv, env 등으로 실행 환경 및 변수 관련 값을 제공하며 abort, kill, exit 등으로 프로세스 동작 관련 함수를 제공한다.

 

✔️ fs

파일 입출력을 하기 위해 사용된다.
readFile, writeFile 함수로 파일을 읽고 쓸 수 있으며 readFileSync, writeFileSync 함수로 이들을 동기동작 할 수 있다.
watch로 파일/디렉터리 변경 이벤트를 감지한다.

 

✔️ http

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

 

 

이외에도 url을 파싱하는 url 모듈, 운영체제 정보를 가져오는 os 모듈, 암호화와 hash 관련 함수를 제공하는 crypto 모듈 등이 존재한다.

 

 

Node.js 모듈 작성법

Node.js 모듈은 exports로 모듈을 만들고 require로 모듈을 load한다.

Node.js 모듈의 작성법은 다음과 같다.

 

✔️ exports

const name = '파이리';
const height = 60;
const weight = 8.5;

module.exports = {
    name,
    height,
    weight
};

 

모듈이 load될 때 사용될 값을 module.exports로 내보낸다.

위의 코드처럼 선언 후 이들을 묶어 한 번에 module.exports로 내보낼 수도 있지만 아래와 같이 각각 내보낼 값을 선언하는 것도 가능하다.

 

const name = '파이리';
const height = 60;
const weight = 8.5;

exports.name = name;
exports.height = height;
exports.weight = weight;

 

이때는 모듈을 object로 만들고 각 key-value를 지정하여 내보낸다.

 

const name = '파이리';
const height = 60;
const weight = 8.5;

module.exports = (name, height, weight) => {
    return {
        name,
        height,
        weight
    }
};

 

위와 같이 모듈울 함수로 만들어 내보낼 수도 있다.

모듈을 함수로 만들어 모듈 사용 시 값을 정할 수 있게 리턴한다.

 

✔️ require

require 함수를 통해 모듈을 load 할 수 있다.
의존성 패키지나 직접 작성한 모듈, json파일 모두 require로 가져올 수 있다.

이때 json 파일은 object로 자동 파싱된다.

require할 때 모듈 코드가 실행된다.
Node.js의 모듈은 첫 require 시에 실행되고 그 다음부터는 cache된 모듈을 가져와 쓴다.
모듈 코드를 여러 번 실행하기 위해서는 함수 모듈로 작성할 필요가 있다.

 

const express = require('express')
const Router = express.Router();

 

의존성 패키지를 사용하는 경우 require('package-name')으로 패키지를 로드할 수 있다.

패키지를 사용하기 위해서는 node_modules에 이미 패키지가 내려받아져 있어야 한다.

 

const pokemon = require('./pokemon')
console.log(pokemon);

 

직접 작성한 모듈은 require('path')로 모듈을 가져올 수 있다.

이때 path는 현재 파일과의 상대 디렉터리 경로이다.

위의 예시에서 pokemon이 .js 파일인 경우 해당 파일이 로드되며 pokemon이 디렉터리인 경우 pokemon 디렉터리 안의 index.js 파일이 로드된다.

 

const pokemonFunc = require('./pokemon');
console.log(pokemonFunc(name, height, weight));

 

만약 함수형 모듈을 로드한 경우에는 모듈이 바로 실행되지 않는다.

따라서 필요한 시점에 load된 함수를 실행하여 모듈을 사용할 수 있다.

 

 

ES Module

ES Module은 ES6에서 등장한 JavaScript의 공식적인 표준 모듈이다.
JavaScript는 기본적으로 모듈을 제공하고 있지 않았고 Node.js는 독자적인 방식을 통해 모듈(commonjs)을 지원하고 있었다.
하지만 ES Module의 등장으로 Node.js에서는 두 가지의 모듈을 지원할 필요가 생겼다.

 

ES Module과 commonjs는 문법과 기본적인 동작 방식이 다르다.
commonjs는 module.exports와 require로 모듈을 만들고 사용하는 반면 ES Module은 export와 import로 모듈을 만들고 사용한다.

 

Node.js가 14버전부터 ES Module을 안정적으로 지원하기는 하지만 commonjs가 일반적으로 더 많이 사용되고 있고 두 모듈의 동작 방식이 크게 달라 require를 import로 대체할 수 없다.

따라서 아직까지 Node.js는 ES Module과 commonjs를 같이 사용하기에는 부적절하다.

 

 

 

 

 

'엘리스 AI 트랙 4기 > elice AI track' 카테고리의 다른 글

[5주차] Express.js  (0) 2022.02.18
[5주차] 웹과 웹 프레임워크  (0) 2022.02.18
[5주차] NPM  (0) 2022.02.16
[5주차] Node.js와 ES6  (0) 2022.02.16
[4주차] Axios  (0) 2022.02.12

댓글