노드의 기능(2): 노드 내장 객체
노드 내장 객체
- global
- 전역객체 (브라우저-window 와 같음)
- 수많은 속성 존재
- 파일 간에 간단한 데이터를 공유할 때 사용하기도 함
- 코드
(globalA.js)
module.exports = () => global.message;
(globalB.js)
const A = require('./globalA');
global.message = '안녕하세요';
console.log(A());
(결과)
$ node globalB
안녕하세요
- global 객체의 속성 값을 대입하여 파일 간에 데이터를 공유할 수 있지만, 남용하면 어떤 객체에 값을 대입했는지 찾기 힘들어져 유지 보수에 어려움을 겪게 된다.
- 즉, 다른 파일의 값을 사용하고 싶다면 모듈을 만들자.
- console
- global 객체 안 프로퍼티(속성)
- 디버깅을 위해 사용
- console
console.time(라벨): console.timeEnd(라벨)과 대응되어 같은 라벨을 같인 time과 timeEnd 사이의 시간을 측정
console.log(내용): 평범한 로그를 콘솔에 표시. console.error(에러 내용): 에러를 콘솔에 표시
console.table(배열): 배열의 요소로 객체 리터럴을 넣으면 객체의 속성들이 테이블 형식으로 표현됨
console.dir(객체, 옵션): 객체를 콘솔에 표시할 때 사용. 옵션의 종류는 colors(true로 설정하면 콘솔에 색이 추가됨), depth(객체 안의 객체를 몇 단계까지 보여줄지 결정)가 있음.
console.trace(라벨): 에러가 어디서 발생했는지 추적 가능(대부분 에러 발생시 위치도 알려주지만, 간혹 안 알려주면 유용)
- 코드
const string = 'abc';
const number = 1;
const boolean = true;
const obj = {
outside: {
inside: {
key: 'value',
},
},
};
console.time('전체시간');
console.log('평범한 로그입니다 쉼표로 구분해 여러 값을 찍을 수 있습니다');
console.log(string, number, boolean);
console.error('에러 메시지는 console.error에 담아주세요');
console.table([{ name: '제로', birth: 1994 }, { name: 'hero', birth: 1988}]);
console.dir(obj, { colors: false, depth: 2 });
console.dir(obj, { colors: true, depth: 1 });
console.time('시간측정');
for (let i = 0; i < 100000; i++) {}
console.timeEnd('시간측정');
function b() {
console.trace('에러 위치 추적');
}
function a() {
b();
}
a();
console.timeEnd('전체시간');
- 타이머
- 시간 메서드: 콜백함수를 주어지는 시간에 따라 실행하는 방법
setTimeout(콜백함수, 밀리초)
: 주어진 밀리초 이후 콜백 함수를 실행
setInterval(콜백함수, 밀리초)
: 주어진 밀리초마다 콜백 함수를 반복 실행
setImmediate(콜백함수)
: 콜백 함수를 즉시 실행
- 타이머 취소: 타이머 함수는 모두 아이디를 반환하며, 이를 사용하여 타이머를 취소할 수 있다.
clearTimeout(아이디)
: setTimeout을 취소
clearInterval(아이디)
: setInterval을 취소
clearImmediate(아이디)
: setImmediate을 취소
- 코드
const timeout = setTimeout(() => {
console.log('1.5초 후 실행');
}, 1500);
const interval = setInterval(() => {
console.log('1초마다 실행');
}, 1000);
const timeout2 = setTimeout(() => {
console.log('실행되지 않습니다');
}, 3000);
setTimeout(() => {
clearTimeout(timeout2);
clearInterval(interval);
}, 2500);
const immediate = setImmediate(() => {
console.log('즉시 실행');
});
const immediate2 = setImmediate(() => {
console.log('실행되지 않습니다');
});
clearImmediate(immediate2);
- filename, dirname
- 파일에 filename, dirname을 넣어두면 실행 시 현재 파일명과 파일 경로로 바뀜.
- 경로 구분자(\,/), 문자열로 반환될 가능성 등 때문에 path모듈과 함께 쓰임
- 코드
console.log(__filename);
console.log(__dirname);
- 콘솔 결과
$ node filename.js
C:\Users\zerocho\filename.js
C:\Users\zerocho
- module.exports vs exports
- module.exports 와 exports는 동일하게 동작하며, 같은 객체를 참조(레퍼런스)한다
- 단, module.exports는 어떤 값이든 대입 가능하지만, exports는 반드시 프로퍼티와 값이 갖춰진 객체를 대입해야 한다
- 동시 사용은 지양한다
- 주의사항: 최상위 스코프의 this는 global이 아닌, module.exports 객체를 가리킨다. 함수 선언문 내부의 this는 global객체를 가리킨다.
- require
- 첫 모듈:
require.main과 module이 동일하다(===)
이름을 알아보려면 require.main.filename을 누르면 된다.
- require.cache:
각 모듈조각의 정보가 들어있다.
만약 새로 require하기 원한다면 require.cache를 삭제하면 된다.
- 순환참조:
나중에 참조된 모듈이 빈 객체로 표시된다
- 코드: 순환참조 코드
(dep1.js)
const dep2 = require('./dep2');
console.log('require dep2', dep2);
module.exports = () => {
console.log('dep2', dep2);
};
(dep2.js)
const dep1 = require('./dep1');
console.log('require dep1', dep1);
module.exports = () => {
console.log('dep1', dep1);
};
(콘솔결과)
dep1 의 module.exports가 함수가 아니라 빈 객체로 표시됨
- process
- 사용빈도가 높지 않지만, 실행환경별 다른 동작을 하고 싶을 때 사용되는 프로퍼티/메서드
process.version : 설치된 노드의 버전
process.arch : 프로세서 아키텍처 정보
process.platform: 운영체제 플랫폼 정보
process.pid: 현재 프로세스의 아이디
process.uptime(): 프로세스가 시작된 후 흐른 시간(단위: 초)
process.execPath: 노드의 경로
process.cwd() : 현재 프로세스가 실행되는 위치
process.cpuUsage(): 현재 cpu 사용량
process.env:
시스템의 환경 변수. 노드에 직접 영향을 미치기도 함.
- NODE_OPTIONS: 노드를 실행할 때 옵션들을 입력받는 환경 변수
코드: 노드의 메모리를 8GB까지 사용할 수 있도록 값을 부여
NODE_OPTIONS =--max-old-space-size=8192
- UV_THREADPOOL_SIZE: 노드에서 기본적으로 사용하는 스레드풀의 스레드 개수를 조절
코드: 스레드풀의 스레드 개수가 8개
UV_THREADPOOL_SIZE=8
- 서버나 데이터베이스의 비밀번호와 각종 API키 저장
코드: 중요한 비밀번호를 process.env의 속성으로 대체
const secretId = process.env.SECRET_ID;
const secretCode = process.env.SECRET_CODE;
process.nextTick(콜백)
- 이벤트 루프가 다른 콜백 함수보다 nextTick의 콜백 함수를 우선으로 처리하도록 만듬
- 코드: 누가 먼저 실행될까?
setImmediate(() => {
console.log('immediate');
});
process.nextTick(() => {
console.log('nextTick');
});
setTimeout(() => {
console.log('timeout');
}, 0);
Promise.resolve().then(() => console.log('promise'));
- 콘솔 결과
$ node nextTick
nextTick
promise
timeout
immediate
process.exit(코드)
- 실행 중인 노드 프로세스를 종료
- 서버에서 사용하면 서버가 멈춤
- 인수로 코드 번호를 줌
- 인수를 주지 않거나 0을 줌: 정상종료
- 인수로 1을 줌: 비정상 종료 /에러가 발생하여 종료하는 경우도 해당
- 코드: setInterval로 반복되는 코드를 process.exit()로 멈춤
setInterval(() => {
if (i === 5) {
console.log('종료!');
process.exit();
}
console.log(i);
i += 1;
}, 1000);
- 콘솔 결과
$ node exit
1
2
3
4
종료!
Author And Source
이 문제에 관하여(노드의 기능(2): 노드 내장 객체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@nahyunbak/노드의-기능2
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- global
- 전역객체 (브라우저-window 와 같음)
- 수많은 속성 존재
- 파일 간에 간단한 데이터를 공유할 때 사용하기도 함
- 코드
(globalA.js)
module.exports = () => global.message;
(globalB.js)
const A = require('./globalA');
global.message = '안녕하세요';
console.log(A());
(결과)
$ node globalB
안녕하세요
- global 객체의 속성 값을 대입하여 파일 간에 데이터를 공유할 수 있지만, 남용하면 어떤 객체에 값을 대입했는지 찾기 힘들어져 유지 보수에 어려움을 겪게 된다.
- 즉, 다른 파일의 값을 사용하고 싶다면 모듈을 만들자.
- console
- global 객체 안 프로퍼티(속성)
- 디버깅을 위해 사용
- console
console.time(라벨): console.timeEnd(라벨)과 대응되어 같은 라벨을 같인 time과 timeEnd 사이의 시간을 측정
console.log(내용): 평범한 로그를 콘솔에 표시. console.error(에러 내용): 에러를 콘솔에 표시
console.table(배열): 배열의 요소로 객체 리터럴을 넣으면 객체의 속성들이 테이블 형식으로 표현됨
console.dir(객체, 옵션): 객체를 콘솔에 표시할 때 사용. 옵션의 종류는 colors(true로 설정하면 콘솔에 색이 추가됨), depth(객체 안의 객체를 몇 단계까지 보여줄지 결정)가 있음.
console.trace(라벨): 에러가 어디서 발생했는지 추적 가능(대부분 에러 발생시 위치도 알려주지만, 간혹 안 알려주면 유용) - 코드
const string = 'abc';
const number = 1;
const boolean = true;
const obj = {
outside: {
inside: {
key: 'value',
},
},
};
console.time('전체시간');
console.log('평범한 로그입니다 쉼표로 구분해 여러 값을 찍을 수 있습니다');
console.log(string, number, boolean);
console.error('에러 메시지는 console.error에 담아주세요');
console.table([{ name: '제로', birth: 1994 }, { name: 'hero', birth: 1988}]);
console.dir(obj, { colors: false, depth: 2 });
console.dir(obj, { colors: true, depth: 1 });
console.time('시간측정');
for (let i = 0; i < 100000; i++) {}
console.timeEnd('시간측정');
function b() {
console.trace('에러 위치 추적');
}
function a() {
b();
}
a();
console.timeEnd('전체시간');
- 타이머
- 시간 메서드: 콜백함수를 주어지는 시간에 따라 실행하는 방법
setTimeout(콜백함수, 밀리초)
: 주어진 밀리초 이후 콜백 함수를 실행
setInterval(콜백함수, 밀리초)
: 주어진 밀리초마다 콜백 함수를 반복 실행
setImmediate(콜백함수)
: 콜백 함수를 즉시 실행 - 타이머 취소: 타이머 함수는 모두 아이디를 반환하며, 이를 사용하여 타이머를 취소할 수 있다.
clearTimeout(아이디)
: setTimeout을 취소
clearInterval(아이디)
: setInterval을 취소
clearImmediate(아이디)
: setImmediate을 취소 - 코드
const timeout = setTimeout(() => {
console.log('1.5초 후 실행');
}, 1500);
const interval = setInterval(() => {
console.log('1초마다 실행');
}, 1000);
const timeout2 = setTimeout(() => {
console.log('실행되지 않습니다');
}, 3000);
setTimeout(() => {
clearTimeout(timeout2);
clearInterval(interval);
}, 2500);
const immediate = setImmediate(() => {
console.log('즉시 실행');
});
const immediate2 = setImmediate(() => {
console.log('실행되지 않습니다');
});
clearImmediate(immediate2);
- filename, dirname
- 파일에 filename, dirname을 넣어두면 실행 시 현재 파일명과 파일 경로로 바뀜.
- 경로 구분자(\,/), 문자열로 반환될 가능성 등 때문에 path모듈과 함께 쓰임
- 코드
console.log(__filename);
console.log(__dirname);
- 콘솔 결과
$ node filename.js
C:\Users\zerocho\filename.js
C:\Users\zerocho
- module.exports vs exports
- module.exports 와 exports는 동일하게 동작하며, 같은 객체를 참조(레퍼런스)한다
- 단, module.exports는 어떤 값이든 대입 가능하지만, exports는 반드시 프로퍼티와 값이 갖춰진 객체를 대입해야 한다
- 동시 사용은 지양한다
- 주의사항: 최상위 스코프의 this는 global이 아닌, module.exports 객체를 가리킨다. 함수 선언문 내부의 this는 global객체를 가리킨다.
- require
- 첫 모듈:
require.main과 module이 동일하다(===)
이름을 알아보려면 require.main.filename을 누르면 된다. - require.cache:
각 모듈조각의 정보가 들어있다.
만약 새로 require하기 원한다면 require.cache를 삭제하면 된다. - 순환참조:
나중에 참조된 모듈이 빈 객체로 표시된다 - 코드: 순환참조 코드
(dep1.js)
const dep2 = require('./dep2');
console.log('require dep2', dep2);
module.exports = () => {
console.log('dep2', dep2);
};
(dep2.js)
const dep1 = require('./dep1');
console.log('require dep1', dep1);
module.exports = () => {
console.log('dep1', dep1);
};
(콘솔결과)
dep1 의 module.exports가 함수가 아니라 빈 객체로 표시됨
- process
- 사용빈도가 높지 않지만, 실행환경별 다른 동작을 하고 싶을 때 사용되는 프로퍼티/메서드
process.version : 설치된 노드의 버전
process.arch : 프로세서 아키텍처 정보
process.platform: 운영체제 플랫폼 정보
process.pid: 현재 프로세스의 아이디
process.uptime(): 프로세스가 시작된 후 흐른 시간(단위: 초)
process.execPath: 노드의 경로
process.cwd() : 현재 프로세스가 실행되는 위치
process.cpuUsage(): 현재 cpu 사용량
process.env:
시스템의 환경 변수. 노드에 직접 영향을 미치기도 함.
- NODE_OPTIONS: 노드를 실행할 때 옵션들을 입력받는 환경 변수
코드: 노드의 메모리를 8GB까지 사용할 수 있도록 값을 부여
NODE_OPTIONS =--max-old-space-size=8192
- UV_THREADPOOL_SIZE: 노드에서 기본적으로 사용하는 스레드풀의 스레드 개수를 조절
코드: 스레드풀의 스레드 개수가 8개
UV_THREADPOOL_SIZE=8
- 서버나 데이터베이스의 비밀번호와 각종 API키 저장
코드: 중요한 비밀번호를 process.env의 속성으로 대체
const secretId = process.env.SECRET_ID;
const secretCode = process.env.SECRET_CODE;
process.nextTick(콜백)
- 이벤트 루프가 다른 콜백 함수보다 nextTick의 콜백 함수를 우선으로 처리하도록 만듬
- 코드: 누가 먼저 실행될까?
setImmediate(() => {
console.log('immediate');
});
process.nextTick(() => {
console.log('nextTick');
});
setTimeout(() => {
console.log('timeout');
}, 0);
Promise.resolve().then(() => console.log('promise'));
- 콘솔 결과
$ node nextTick
nextTick
promise
timeout
immediate
process.exit(코드)
- 실행 중인 노드 프로세스를 종료
- 서버에서 사용하면 서버가 멈춤
- 인수로 코드 번호를 줌
- 인수를 주지 않거나 0을 줌: 정상종료
- 인수로 1을 줌: 비정상 종료 /에러가 발생하여 종료하는 경우도 해당
- 코드: setInterval로 반복되는 코드를 process.exit()로 멈춤
setInterval(() => {
if (i === 5) {
console.log('종료!');
process.exit();
}
console.log(i);
i += 1;
}, 1000);
- 콘솔 결과
$ node exit
1
2
3
4
종료!
Author And Source
이 문제에 관하여(노드의 기능(2): 노드 내장 객체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nahyunbak/노드의-기능2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)