* 위 내용을 정리하였음
3.1 REPL
- 자바스크립트는 스크립트 언어라 컴파일이 필요없다.
- 콘솔에 코드를 입력, 해석, 결과반환, 종료시까지 반복하는 것 때문에 노드가 제공하는 콘솔을 ReadEvalPrintLoop라고 한다.
- REPL을 실행해보자.
3.2 JS파일 실행하기
3.3 모듈로 만들기
- 특정 기능을 하는 함수, 변수 집합을 모듈로 분리할 수 있다.
- require, module 객체는 노드에서 기본적으로 제공하는 내장 객체이다.
// var.js
const odd = '홀수';
const even = '짝수';
module.exports = {
odd,
even,
};
// func.js
const { odd, even } = require('./var');
function checkOddOrEven(num) {
if (num%2) {
return odd;
}
return even;
}
module.exports = checkOddOrEven;
// index.js
const { odd, even } = require('./var')
const checkNumber = require('./func')
console.log(checkNumber(10))
console.log(`${odd} ${even}`)
3.4 노드 내장 객체
- 따로 설치하지 않아도 노드에서 기본적으로 내장되어있는 객체와 모듈을 말한다.
- 그냥 호출해서 바로 사용할 수 있다.
3.4.1 global
- global 객체는 모든 파일에서 접근할 수 있다.
- global.require, global.console 인데 global이 생략된 것이다.
- REPL을 통해 global의 속성들을 살펴볼 수 있다.
- global.message를 통해 여러 파일에서 message를 공유할 수 있다.
3.4.2 console
- global 객체 안에 들어있다.
- console.log() : 로그 콘솔에 출력
- console.time(레이블), console.timeEnd(레이블) : 동일 레이블 사이의 시간을 측정
- console.error(에러 내용) : 에러를 콘솔에 표시
- console.table(배열) : 배열 내용을 테이블 형식으로 콘솔에 출력
- console.dir(객체, 옵션) : 객체를 콘솔에 출력, 옵션은 colors(색 유무), depth(객체안의 객체 단계 표시 디폴트는2)가 있다.
- console.trace(레이블) : 에러가 어디서 발생했는지 추적할 수 있게 해준다.
3.4.3 타이머
- global 객체 안에 들어있다.
- setTimeout(콜백 함수, 밀리초) : 밀리초 이후 콜백함수 실행
- setInterval(콜백 함수, 밀리초) : 밀리초마다 콜백함수 반복 실행
- 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);
3.4.4 __filename, __dirname.
- 현재 파일의 경로나 파일명을 반환한다.
console.log(__filename);
console.log(__dirname);
3.4.5 module, exports, require
- 한 모듈에서 module.exports와 exports를 같이 사용하는 것을 권장하지 않는다.
exports.odd = '홀수입니다';
exports.even = '짝수입니다';
- 이렇게 하면 다른 모듈에서 require해서 odd, even을 쓸수 있다.
- exports를 사용할때는 반드시 객체처럼 속성명과 속성값으로 대입해야 한다.
- require.cache : 한번 require한 모듈은 cache에 저장된다.
- require.main : 노드 실행시 첫 모듈을 가리킨다.
- 서로 다른 두 모듈이 서로를 참조하지 않도록 해야 한다. (순환구조 방지)
3.4.6 process
- process 객체는 현재 실행되고 있는 노드 프로세스에 대한 정보를 담고 있다.
- process.version : 노드의 버전
- process.pid : 프로세스 아이디 반환
3.4.6.1 process.env
- process.env를 REPL에 입력하면 시스템의 환경 변수들을 출력해준다.
- NODE_OPTIONS = --max-old-space-size = 8192 : 노드의 메모리를 8GB까지 사용할 수 있게 한다.
- UV_THREADPOOL_SIZE = 8 : 이 값을 조절하면 쓰레드풀의 쓰레드 개수를 조절할 수 있다.
- 서비스에 중요한 키를 저장하는 공간으로도 사용된다. 예를들면 서버, 데이터베이스의 비밀번호, 각종 API의 키를 코드에 입력하는 것은 위험하기 때문이다.
- 따라서 코드에서는 다음과 같이 사용한다.
const secretId = process.env.SECRET_ID;
const secretCode = process.env.SECRET_CODE;
3.4.6.2 process.nextTick(콜백)
- process.nextTick은 다른 콜백보다 우선시된다.
- promise는 resolve시에 nextTick처럼 다른 콜백보다 우선시된다.
- process.nextTick과 promise를 microtask라고 따로 구분지어 부른다.
setImmediate(() => {
console.log('immediate');
});
process.nextTick(() => {
console.log('nextTick');
});
setTimeout(() => {
console.log('timeout');
}, 0);
Promise.resolve().then(() => console.log('promise'));
3.4.6.3 process.exit(코드)
- 서버에서는 서버가 멈추니까 잘 사용하지는 않지만 독립적인 프로그램에서 수동으로 노드를 멈추기 위해 실행 중인 프로세스를 강제로 종료한다.
- 인수로 0을 넣으면 정상종료 1을 넣으면 에러가 발생해서 종료한다는 뜻이다.
let i = 1;
setInterval(() => {
if (i === 5) {
console.log('종료!');
process.exit();
}
console.log(i);
i += 1;
}, 1000);
'ComputerScience > NodeJs' 카테고리의 다른 글
node - 3.7 이벤트 이해하기 ~ 3.8 예외처리 (0) | 2022.01.09 |
---|---|
node - 3.6 파일 시스템 접근하기 (0) | 2022.01.07 |
node - 3.5 노드 내장 모듈 사용하기 (0) | 2022.01.06 |
node - 2. 알아야 하는 javascript (0) | 2021.12.29 |
node - 1. 노드 시작하기 (0) | 2021.12.29 |