Back
Featured image of post [Node.js] 자주 사용하는 모듈 정리

[Node.js] 자주 사용하는 모듈 정리

이것만큼은 꼭 알아두자

global

브라우저의 window와 같은 전역 객체 역할, 하지만 브라우저와 관련된 객체(document 등)들은 사용하지 못한다. global객체 역시 생략해서 사용 가능하다. 그리고 브라우저의 window객체와 마찬가지로 global에 값을 주입하면 프로젝트 내 모든 파일에서 전역 변수로 사용할 수 있다 . (하지만 이러한 패턴은 지양한다, module을 통해 관리하자)

global.console.log('hello Node!');
console.log('hello Node!');

console

로그를 출력하는 객체, 흔히 사용하는 log, error 말고 신기한 것을 소개한다.

console.time

수행 시점에 time을 찍어 해당 코드를 수행한 시간을 알아낼 수 있다. (효율성 측정에 용이하다.)

function add(a, b) {
    console.timeEnd('add'); //add: 0.098ms
    return a + b;
}

console.time('add');

add(1, 3);

console.dir

객체 형태의 데이터를 출력하기 용이하다.

const fruit = {
    name: 'apple',
    icon: '🍎'
};

console.dir(fruit);

setImmediate

기존 setTimeout을 사용해 초를 0으로 두더라도 비동기 상황에서는 정확한 0초가 아닐 수도 있다. 이벤트 루프 내의 다른 실행 코드가 타임아웃의 순서를 블로킹할 수 있기 때문이다. 따라서 즉시 함수를 출력하려면 setImmediate를 사용하는 것이 유리하다.

setImmediate(() => {
    console.log('hi');
});

setImmediate((message) => {
    console.log(message);
}, 'hello'); //"hello"

사용 방법은 첫 인자에 실행 함수를 전달하고, 두번째 인자에 함수로 전달할 값을 적어주면된다.

**filename, **dirname

현재 파일에 대한 경로나 파일명을 반환해준다.

const currentFilePath = __filename;
const currentDirPath = __dirname;
// file명 포함
console.log(currentFilePath); // C:\Users\user\Desktop\node\test.js

// file 디렉토리명 까지 포함
console.log(currentDirPath); // C:\Users\user\Desktop\node

this

(module.exports == exports) == {};

웹 브라우저 상에서의 this 체계와 조금 다르다. (웹 브라우저에서의 전역 this == window 객체) node.js 상에서는 전역 스코프상에서의 this는 module 객체를 가르킨다. 함수 내부에서의 this는 global 객체를 가르킨다. (나머지 내부함수에서의 this 참조 스코프, 객체에서의 this등 다른 부분에서는 동일하다.)

require

외부 파일 import시에 사용, 파일 맨 상단에 굳이 위치할 필요는 없다. 한번 require한 파일은 require.cache에 저장됨 → 다시 불러올 때 require.cache 탐색 후 해당 js파일을 읽어온다. (캐싱)

require('./module'); //사용은 안하고 스크립트 실행만 하는 경우
const module = require('./module'); //변수에

process

현재 실행중인 노드 프로세스에 접근하는 모듈

  • version : 노드 버전
  • platform : 운영체제 정보
  • pid : 프로세스 id
  • uptime() : 프로세스 시작 후 흐른 시간(second)
  • exePath : 노드 실행 경로
  • cwd() : 프로세스 실행 위치
  • env : 환경 변수들이 들어있는 객체 (외부에 노출되면 안되는 정보들을 저장하는 용도로 사용)
    const db_password = process.env.MYSQL_PW;
    
  • nextTick() : event loop task queue에서 우선권 부여 (promise then과 같이 micro-taskqueue 우선 처리)
  • exit(0) : node 정상 종료 (exit(1)은 에러가 발생했다는 것을 명시하면서 종료)

OS

운영체제에 대한 정보

const osInfo = require('os');
  • arch() : 아키텍쳐
  • freemem() : 사용가능한 memory 용량
  • totalmem() : 전체 memory 용량

Path

OS마다 다른 디렉토리 경로를 다루기위해 많이 사용 (Windows 또는 POSIX)

// /Users/choeseungjin/Mydoc/02_Code/02_JavaScript/backend/process.js
path.join(__dirname, '..', '/process.js');
// /process.js
path.resolve(__dirname, '..', 'process.js');
  • parse(‘path..') : 파일 구조 분해 (root-dir-base-ext..)
  • isAbsolute(‘path’) : 절대경로인지 상대경로인지 true/false
  • join(‘path’,’..') : 하나의 경로로 합침 (..→ 부모, .→현재 위치 등등)
  • resolve(‘path’, ‘..') : 절대경로(/) 나올 경우 절대경로를 최상위로 표현 https://nodejs.org/dist/latest-v16.x/docs/api/

참고자료