개발스토리

노드 내장 객체 본문

node.js

노드 내장 객체

무루뭉 2020. 12. 5. 02:20

노드 내장 객체

따로 설치하지 않아도 바로 사용 가능하며, 브라우저의 window 객체와 비슷하다.

노드 프로그래밍을 할 때 많이 쓰이는 내장 객체를 알아보자.

global

  • 전역 객체이므로 모든 파일에서 접근할 수 있다.
  • 생략이 가능하다.
    • 이전 내용에서 사용했던 require 함수도 global.require에서 global이 생략된 것이다.
  • global 객체 내부에는 매우 많은 속성이 들어 있으며, 이를 보려면 REPL을 이용해야 한다.

! 노드에 DOM, BOM이 없으므로 window와 document 객체는 사용할 수 없다.

  • 전역 객체라는 점을 이용해 파일 간에 간단한 데이터를 공유하기도 한다.
//globalA.js

module.exports = () => global.message;
//globalB.js

const A = require('./globalA');

global.message = '안녕';
console.log(A()); //안녕
  • globalB에서 넣은 global.message 값을 globalA에서도 접근할 수 있음을 보여준다.

위 방식과 같은 방법은 되도록이면 사용하지 말자. 유지 보수에 어려움을 겪는다. 다른 파일의 값을 사용하고 싶다면 모듈 형식으로 만들어서 명시적으로 값을 불러와 사용하자.

console

  • console도 global 객체 안에 들어있다.
  • 보통 디버깅을 위해 사용된다. 대표적으로 console.log 메서드가 있다.

다른 로깅 함수도 알아보자.

image-20201204220931345

타이머

  • setTimeout(콜백 함수, 밀리초) : 주어진 밀리초 이후에 콜백 함수를 실행
  • setInterval(콜백 함수, 밀리초) : 주어진 밀리초마다 콜백 함수를 반복 실행
  • setImmediate(콜백 함수) : 콜백 함수를 즉시 실행

이 타이머 함수들은 모두 아이디를 반환하다. 아이디를 사용하여 타이머를 취소할 수 있다.

  • clearTimeout(아이디) : setTimeout을 취소
  • clearInterval(아이디) : setInterval을 취소
  • clearImmediate(아이디) : setImmediate를 취소

! setImmdiate(콜백)과 setTimeout(콜백, 0)에 담긴 콜백 함수는 이벤트 루프를 거친 뒤 즉시 실행된다.

setImmdiate가 항상 setTimeout(콜백, 0)보다 먼저 호출되지는 않는다.

__filename / _dirname

  • 노드에서는 파일 사이에 모듈 관계가 있는 경우가 많으므로 현재 파일의 경로나 파일명을 알아야 한다.

  • 이 때 가볍게 로그를 찍어보면 쉽게 알아낼 수 있다.

  • 하지만 경로 구분자 문제 등이 있기 때문에 보통은 path 모듈과 사용한다.

module, exports, require

지금까지 모듈을 만들 때 module.exports만 사용했지만, exports 객체로도 모듈을 만들 수 있다.

// var.js

exports.odd = '홀수';
exports.even = '짝수';
  • 위와 같은 방식으로도 모듈을 생성할 수 있다.
    • module.exports가 exports와 같은 객체를 참조하기 때문이다.
  • module.exports는 어떤 값이든 대입해도 되지만, exports에는 반드시 객체처럼 속성명과 속성값을 대입해야 한다. 다른 값을 대입하면 객체의 참조 관계가 끊겨 모듈로 기능하지 않게 된다.
    • 함수를 대입한 경우 X
    • 되도록 동시에 사용하지 말자.
  • require가 반드시 파일 최상단에 위치할 필요가 업고, module.exports도 최하단에 위치할 필요가 없다.

노드에서의 this

  • 최상위 스코프에 존재하는 this는 module.exports(or exports 객체)를 가리킨다.
  • 함수 선언문 내부의 this는 global 객체를 가리킨다.

process

  • process 객체는 현재 실행되고 있는 노드 프로세스에 대한 정보를 담고 있다.

  • process.env는 서비스의 중요한 키를 저장하는 공간으로도 사용된다.

    const secretID = process.env.SECRET_ID;
    const secreCode = process.env.SECRET_CODE;
  • process.nextTick(콜백) : 이벤트 루프가 다른 콜백 함수들보다 nextTick의 콜백 함수를 우선으로 처리하도록 만든다.

process.nextTick(()=>{
    console.log('wow');
});

Promise.resolve().then(()=>console.log('yeah'));
  • 코드 맨 밑에 Promise를 넣은 것은 resolve된 Promise도 nextTick처럼 다른 콜백들보다 우선시 되기 때문이다.
  • 그래서 이 둘을 마이크로태스크(microtask)라고 구분지어 부른다.

 

 

 

 

본 내용은 Node.js 교과서 (길벗 출판사) 개정 2판의 내용을 기반으로 작성되었습니다.

'node.js' 카테고리의 다른 글

요청과 응답  (0) 2020.12.10
파일 시스템 접근하기  (0) 2020.12.05
노드 기능  (0) 2020.12.05
프론트엔드 자바스크립트  (0) 2020.12.04
ES6(3)  (0) 2020.12.04
Comments