본문 바로가기
Node.Js 정복기

노드 기능 part 2.

by HoneyIT 2021. 1. 13.

내장 객체


global

모든 파일에서 접근할 수 있는 전역 객체입니다. global 객체 내부에는 많은 속성이 있어서 REPL을 이용해서 봐야 합니다.

 

> global
> global.console

global 객체 안의 여러 속성들을 확인할 수 있습니다.

 

globalA.js

module.exports = () => global.message;

 

globalB.js

const A = require('./globalA');

global.message = '안녕하세요'
console.log(A());

전역 객체를 이용하여 파일 간에 간단한 데이터를 공유할 때 사용합니다.

globalA 모듈의 함수에서 global.message 값을 반환합니다.

 

 

console

console 객체는 디버깅과 개발하면서 변수의 값을 확인, 에러 표시, 실행 시간 등을 보기 위해서 사용합니다.

 

console.log

const string = 'abc';
const number = 1;
const boolean = true;

console.log(string, number, boolean);

 

- 로그를 콘솔에 표시합니다. 내용 사이에 콤마를 이용하여 연결하여 출력할 수 있습니다.

 

console.table

console.table([{ name: '제로', birth: 1994}, {name: 'hero', birth: 1988}]);

 

- 객체 속성들을 테이블 형식으로 표현할 수 있습니다.

 

console.dir

const obj = {
    outside: {
        inside: {
            key: 'value',
        },
    },
};

console.dir(obj, { colors: false, depth: 2});
console.dir(obj, { colors: true, depth: 1});

 

- console.dir(객체, 옵션) 콘솔에 표시한 객체와 옵션을 설정합니다. color는 색을 넣고 depth는 표시할 객체의 단계를 결정합니다.(depth의 default는 2)

 

console.time

console.time('시간 측정');
for(let i = 0; i < 10000; i++){}
console.timeEnd('시간 측정');

 

- time과 timeEnd 사이의 시간을 측정합니다.

 

console.trace

function b() {
    console.trace('에러 위치 추적');
}
function a(){
    b();
}
a();

 

- 에러 위치를 추적합니다. 일반적으로 에러 발생 시 위치를 알려주어 잘 사용하지는 않는다고 합니다.

 

이외에도 다양한 메서드들이 추가되고 있으므로 찾아서 공부해야겠습니다.

 

 

타이머

타이머 기능을 제공하는 여러 함수들이 global 객체 안에 들어 있습니다.

 

setTimeout

const timeout = setTimeout(() => {
    console.log('1.5초 후 실행');
}, 1500);

- 주어진 밀리초 이후에 콜백 함수를 실행합니다.

 

setInterval

const interval = setInterval(() => {
    console.log('1초마다 실행')
}, 1000);

- 주어진 밀리초 간격으로 콜백 함수를 반복 실행합니다.

 

setImmediate

const timeImmediate = setImmediate(() => {
    console.log('즉시 실행');
});

- 콜백 함수의 순서에 상관없이 우선적으로 객체를 실행합니다.

 

이외에도 clearTimeout, clearInterval, clearImmediate와 같은 취소하는 함수들이 있습니다.

 

 

__filename, __dirname

노드에서는 파일 사이에 모듈 관계인 경우가 많기 때문에 파일의 경로나 파일명을 알아야 합니다. 이에 노드는 __filename, __dirname이라는 키워드로 경로에 대한 정보를 제공합니다. 파일에 두 키워드를 넣어둘 경우 현재 파일명과 현재 파일 경로로 바뀝니다.

 

filename.js

console.log(__filename);
console.log(__dirname);

 

실제로 파일 경로의 파일명과 파일 경로가 출력되는 것을 확인할 수 있습니다.

 

module, exports, require

이전에는 module 객체의 module.exports를 사용했지만 exports 객체로도 모듈을 만들 수 있습니다.

 

var2.js

exports.odd = '홀수';
exports.even = '짝수';

각각의 변수를 모듈로 만들어주고

 

getvar.js

const {odd, even} = require('./var2')

console.log(odd, even)

다른 파일에서 받아서 출력해봅시다.

 

잘 출력되는 것을 확인할 수 있습니다.

이처럼 동작하는 이유는 module.exports와 exports가 같은 객체를 참조하기 때문입니다. 두 객체가 참조 관계에 있기 때문에 한 모듈에 동시에 사용하지 않는 것이 좋습니다.

 

Process

 

프로세스 객체는 현재 실행되고 있는 노드의 프로세스 정보를 담고 있습니다. 객체 안에는 다음과 같은 다양한 속성들이 있습니다.

> process.version 설치된 노드의 버전 ex) v14.15.4
> process.arch 프로세서 아키텍처 정보 ex) x64
> process.platform 운영체제 플랫폼 정보 ex) win32
> process.pid 현재 프로세스의 아이디 ex) 11568
> process.uptime() 프로세스가 시작된 후 흐른 시간 (단위: 초) ex) 1844.3528225
> process.execPath 노드의 경로 ex) C:/programfiles/node.exe
> process.cwd() 현재 프로세스가 실행되는 위치 ex) C:/nodejs
> process.cpuUsage() 현재 cpu 사용량 ex) { user: 718000, system: 421000 }

 

> process.env

REPL에 process.env를 입력하면 환경 변수 값을 확인할 수 있습니다. 시스템 환경 변수는 노드에 직접적인 영향을 미치기도 합니다.

 

nextTick

이벤트 루프가 다름 콜백 함수들보다 nextTick의 콜백 함수를 우선적으로 처리하도록 만듭니다.

 

setImmediate(() => {
    console.log('immediate');
});
process.nextTick(() => {
    console.log('nextTick');
});
setTimeout(() => {
    console.log('timeout');
}, 0);
Promise.resolve().then(() => console.log('promise'));

process.nextTick가 setImmediate과 setTimeout보다 먼저 실행됩니다. resolve 된 Promise도 process.nextTick처럼 우선시 됩니다. 이런 콜백 함수들을 마이크로태스크(microtask)라고 부릅니다.

 

그림 1. 테스크와 마이크로테스크

* 다만 비동기 처리를 할 때 setImmediate보다 process.nextTick를 사용할 수도 있습니다. 하지만 마이크로테스크를 재귀 호출하게 되면 이벤트 루프는 다른 콜백 함수보다 마이크로테스크를 우선적으로 처리하여 콜백 함수들이 실행되지 않을 수도 있습니다.

 

Exit

실행 중인 노드 프로세스를 종료할 수 있습니다. 서버 환경에서 사용하면 서버가 멈추기 때문에 특수한 경우에만 사용하거나 서버 외의 독립적인 프로그램에서 수동으로 노드를 멈추기 위해 사용합니다.

 

exit.js

let i = 1;
setInterval(() => {
    if (i == 5){
        console.log('종료');
        process.exit();
    }
    console.log(i);
    i += 1;
}, 1000);

process.exit 메서드는 인수로 코드 번호를 줄 수 있습니다. 위의 코드처럼 인수를 주지 않거나 0으로 주면 정상종료를 뜻하고, 1을 주면 비정상 종료를 뜻합니다. 즉, 에러가 발생할 경우 1을 넣어 종료시켜줍니다.

'Node.Js 정복기' 카테고리의 다른 글

노드의 기능 part 1.  (0) 2021.01.11
MongoDB 설치 및 기초  (0) 2021.01.06
핵심 개념 이해하기  (0) 2020.12.28