본문 바로가기

ComputerScience/NodeJs

node - 3.1 노드 기능 알아보기~ 3.4 노드 내장 객체 알아보기

728x90
 

더북(TheBook): Node.js 교과서 개정 2판

 

thebook.io

* 위 내용을 정리하였음

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);
728x90
반응형