말 그대로 빠르게 노드 프로그래밍을 할 때 자주 사용되는 노드의 내장 객체들에 대해 하나씩 살펴보자
global
- 전역 객체 : 모든 파일에서 접근 가능
- 생략 가능 : console 객체도 원래는 global.console 이었음
- 남용 주의 : 프로그램의 규모가 커질수록 어떤 파일에서 global 객체에 값을 대입했는지 찾기 힘들어져 유지 보수에 어려움을 겪을 수 있음
console
- 디버깅과 에러 내용 및 코드 실행 시간 확인에 사용
- console.log 메서드가 대표적
- console.time(레이블) : time과 timeEnd 사이의 시간을 측정
- console.error(에러 내용) : 에러를 콘솔에 표시
- console.table(배열) : 테이블 형식으로 표현
- console.dir(객체, 옵션) : 객체를 콘솔에 표시할 때 사용
- console.trace(레이블) : 에러 발생 위치 추적
타이머
- 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);
즉시 실행 # 0초, immediate2는 바로 clearImmediate를 사용해서 취소했으므로 실행X
1초마다 실행 # interval
1.5초 후 실행 # timeout
1초마다 실행 # interval
# 2.5초가 지났을 때 clearTimeout과 clearInterval이 각각 timeout2와 interval을 취소
❗️setTimeout(콜백, 0)은 사용하지 않는게 좋다
- setImmediat(콜백)과 setTimeout(콜백, 0)에 담긴 콜백 함수는 같아 보이지만 파일 시스템 접근, 네트워킹 같은 I/O 작업의 콜백함수안에서 타이머를 호출하는 경우 setImmediate가 먼저 실행된다. 하지만 항상 먼저 실행되는 것은 아님! 그러므로 헷갈리지 않기 위해 setTimeout(콜백, 0)은 사용하지 않는 것을 권장
__filename, __dirname
- 각각 실행 시, 현재 파일명과 현재 파일 경로로 바뀜
module, exports
- module.exports와 exports는 둘다 모듈을 만들 때 사용하지만, 차이점은 module.exports는 한번에 여러개 변수를 대입할 수 있는 반면 exports 객체에 각각의 변수를 하나씩 넣을 수 있다. → 둘다 같은 객체를 참조하고 있기 때문
- exports는 module.exports를 참조하고 module.exports는 하나의 객체를 참조하므로 결국 exports도 그 객체를 참조하는 것
- 이런 혼동을 막기 위해 exports 객체와 module.exports를 동시에 사용하지 않는 것이 좋다.
this
- module.exports 또는 exports 객체를 가리킴
- 함수 선언문 내부의 this는 global 객체를 가리킴
require
// require.js
console.log('require가 가장 위에 오지 않아도 됩니다.');
module.exports = '저를 찾아보세요.';
require('./var');
console.log('require.cache입니다.');
console.log(require.cache);
console.log('require.main입니다.');
console.log(require.main === module);
console.log(require.main.filename);
$ node require
require가 가장 위에 오지 않아도 됩니다.
require.cache입니다.
[Object: null prototype] {
'C:\\Users\\zerocho\\require.js': Module {
id: '.',
exports: '저를 찾아보세요.',
parent: null,
filename: 'C:\\Users\\zerocho\\require.js',
loaded: false,
children: [ [Module] ],
paths: [
'C:\\Users\\zerocho\\node_modules',
'C:\\Users\\node_modules',
'C:\\node_modules'
]
},
'C:\\Users\\zerocho\\var.js': Module {
id: 'C:\\Users\\zerocho\\var.js',
exports: { odd: '홀수입니다', even: '짝수입니다' },
parent: Module {
id: '.',
exports: '저를 찾아보세요.',
parent: null,
filename: 'C:\\Users\\zerocho\\require.js',
loaded: false,
children: [Array],
paths: [Array]
},
filename: 'C:\\Users\\zerocho\\var.js',
loaded: true,
children: [],
paths: [
'C:\\Users\\zerocho\\node_modules',
'C:\\Users\\node_modules',
'C:\\node_modules'
]
}
}
require.main입니다.
true
C:\\Users\\zerocho\\require.js
→ require가 반드시 파일 최상단에 위치할 필요가 없음
→ module.exports도 최하단에 위치할 필요가 없음
require.cache : 파일에 대한 정보, 캐시형태로 저장
require.main : 노드 실행 시 첫 모듈을 가리킴
require.main === module : 현재 파일이 첫 모듈인지 알아보기 위한 코드
require.main.filename : 첫 모듈의 이름을 알아보기 위한 코드
process.env
- 시스템 환경 변수 정보 출력
- 서비스의 중요한 키를 저장하는 공간으로도 사용
process.nextTick(콜백)
- 이벤트 루프가 다른 콜백함수들보다 nextTick의 콜백함수를 우선적으로 처리하도록 만듦.
- setImmediate나 setTimeout보다 먼저 실행
- resolve된 Promise도 다른 콜백들보다 우선시 됨
→ nextTick과 Promise를 마이크로태스크라고 따로 구분지어 부름
process.exit(코드)
- 실행 중인 노드 프로세스를 종료
process
- 현재 실행되고 있는 노드 프로세스에 대한 정보를 담음
$ node
> process.version
v14.0.0 // 설치된 노드의 버전입니다.
> process.arch
x64 // 프로세서 아키텍처 정보입니다. arm, ia32 등의 값일 수도 있습니다.
> process.platform
win32 // 운영체제 플랫폼 정보입니다. linux나 darwin, freebsd등의 값일 수도 있습니다.
> process.pid
14736 // 현재 프로세스의 아이디입니다. 프로세스를 여러 개 가질 때 구분할 수 있습니다.
> process.uptime()
199.36 // 프로세스가 시작된 후 흐른 시간입니다. 단위는 초입니다.
> process.execPath
C:\\Program Files\\nodejs\\node.exe // 노드의 경로입니다.
> process.cwd()
C:\\Users\\zerocho // 현재 프로세스가 실행되는 위치입니다.
> process.cpuUsage()
{ user: 390000, system: 203000 } // 현재 cpu 사용량입니다.
Reference
- Node.js 교과서 개정 2판
'Node.js' 카테고리의 다른 글
[Node] REST, HTTP 메서드 개념 (0) | 2022.12.11 |
---|---|
[Node] 이벤트, 이벤트 메서드 (0) | 2022.12.10 |
[Node] 파일시스템, 버퍼, 스트림 알아보기 (0) | 2022.12.10 |
[Node] 노드의 내장 모듈들 (0) | 2022.12.10 |
[Node] Node의 동작 방식과 장단점 (0) | 2022.12.05 |