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/
참고자료
- Node.js 교과서 - 노드 내장 모듈 사용하기 (조현영 저)
- Node.js Docs - 공식 문서