node.js에서도 웹브라우저의 window처럼 모든 파일에서 접근가능한 전역객체를 제공하고 있습니다. 그리고 이 전역객체는 globalThis로 접근할 수 있습니다.(global로도 가능하지만 최신 웹브라우저에서 전역객체는 window가 아닌 globalthis로도 가능하므로 사용방법에 대한 공통성을 가지기 위해 globalThis를 사용하는 경우도 있습니다.)
우리가 REPL에서 어떤 내용을 출력하기 위해 console.log(0 함수를 사용했는데 이것도 globalThis객체에 포함되어 있는 것입니다. 그래서 본래는 globalThis.console.log('abc'); 처럼 사용해야 하지만 global은 웹브라우저에서 window를 생략하는 것처럼 생략이 가능하고 실제로 그렇게 사용하고 있습니다.
1. console
console은 log()함수 이외에도 에러를 로깅하는 error(), 객체를 로깅하는 dir(), 시작부터 종료까지의 시간을 출력하는 time()/timeEnd(), 객체를 표형태로 출력하는 table() 함수등 여러가지가 존재합니다.
console.error('error'); //에러 로깅
console.dir({ a : 'abc', b : 'def' }); //객체 로깅
console.time('time'); //이 시점부터
console.timeEnd('time'); //이 시점까지의 실행 시간
console.table({ name : 'kim', age : 20}, { name : 'lee', age : 30 });
console.trace(); //호출스택 로깅
2. time 관련 함수
console보다는 덜 하지만 비동기 실행을 위해 많이 사용하는 것중 하나가 time관련 함수입니다.
특정 시간후에 함수를 한번만 실행하는 setTimeout()함수, 지정된 시간마다 함수를 반복적으로 실행하는 setInterval() 함수, 함수를 즉시 실행하는 setImmediate() 함수등이 있습니다.
setTimeout(() => { console.log('start') }, 2000); //2초 후에 주어진 함수 실행
const si = setInterval(() => { console.log('runing...') }, 2000); //2초 마다 주어진 함수 반복 실행
setImmediate(() => { console.log('now') }); //함수를 즉시 실행합니다.
위와 같이 time관련 함수를 사용하고 나면 실행을 취소해야 하는 경우도 있는데 취소하는 함수는 set대신 clear를 사용한 함수를 실행합니다. 예를 들어 setInterval()을 통해 실행할 함수를 지정했는데 이 함수이 실행을 취소하려면 clearInterval() 함수를 사용하면 됩니다.
const si = setInterval(() => { console.log('runing...') }, 2000); //2초 마다 주어진 함수 반복 실행
clearInterval(si);
setTimeout() 함수에서 clear- 함수를 사용하면 시간안에 지정한 콜백함수를 실행하는걸 막을 수 있습니다. 반면setImmediate() 함수의 경우 곧장 콜백함수가 실행되는 동작의 특성상 clear- 함수를 통해 초기화 하는 경우가 거의 없는데 함수가 백그라운드와 태스크 큐를 거쳐 작업스택까지 오는 사이에 취소가 가능하기도 합니다.
3. 전역 상수
함수이외에도 특정 상수를 통해 필요한 정보를 얻기도 합니다. 예를 들어 __filename은 현재 파일의 이름을, __dirname은 현재 파일의 경로를 확인할 수 있습니다.
console.log(__filename);
console.log(__dirname);
4. this
javascript를 사용하면 this라는 키워드도 많이 사용되는데 node.js에서 this는 일반적인 경우 exports된 객체를 의미하고 함수안에서 this는 global을 의미합니다.
function test()
{
this.console.log('cliel');
};
test();
5. Buffer
node.js에서는 Buffer객체를 통해 간단하게 버퍼데이터를 생성할 수 있습니다.
const buffer = Buffer.from('1234567890abcdefg');
console.log(buffer);
console.log(buffer.length);
console.log(buffer.toString());
from()에서 필요한 데이터를 전닳하면 Buffer는 그것을 버퍼로 만들게 됩니다. 버퍼의 크기는 length로 확인할 수 있으며 toString()을 통해 원본확인이 가능합니다.
버퍼로 나누어진 데이터가 있다면 이것은 Buffer의 concat()을 사용해 다시 합칠 수 있고
const bufArray = [Buffer.from('123'), Buffer.from('456'), Buffer.from('789')];
const buffer = Buffer.concat(bufArray);
console.log(buffer.toString());
alloc()를 통해 필요한 만큼(byte)의 임의 버퍼를 생성할 수도 있습니다.
const buffer = Buffer.alloc(10);
console.log(buffer.length);
6. . 전역변수/함수 생성
gloab을 사용하면 모든 곳에서 사용가능한 전역 변수가 함수를 만들어 낼 수 도 있습니다.
const myFunc = function() {
console.log('abc');
};
globalThis.myFunc = myFunc;
console.log(myFunc());
다만 global을 통해 전역변수/함수를 너무 많이 만들게 되면 어떤 곳에서 global을 사용했는지 알아내기가 힘든 경우가 있으므로 주의가 필요합니다.
'Server > node.js' 카테고리의 다른 글
[node.js] fs (파일시스템 다루기) (0) | 2021.03.03 |
---|---|
[node.js] 기본모듈 (0) | 2021.03.03 |
[node.js] 모듈(Module) (0) | 2021.03.02 |
[node.js] REPL (0) | 2021.03.02 |
[node.js] 확장모듈 (0) | 2020.06.22 |