노드 공부 기록(4) - Node.js 내장 객체 알아보기, global, console, 타이머, require, process
my code archive
article thumbnail
반응형
REPL 사용하기
  • 자바스크립트는 스크립트 언어이므로 미리 컴파일을 하지 않아도 즉석에서 코드 실행이 가능함.
  • REPL : 입력 코드를 읽고(Read), 해석하고(Eval), 결과물을 반환하고(Print), 종료할 때까지 반복(Loop)

  • REPL을 종료하려면 ctrl+c 2회 누르거나 .exit 입력하면 됨.

 

모듈로 만들기
  • Node.js는 코드를 모듈로 만들 수 있다는 점에서 자바스크립트와 다르다.

🔍모듈 : 특정한 기능을 하는 함수나 변수들의 집합

  • 모듈로 만들어놓으면 여러 프로그램에서 해당 모듈 재사용이 가능함.

 

var.js

const odd = '홀수입니다';
const even = '짝수입니다';

module.exports = {
    odd,
    even
};

 

func.js

  • var.js에 변수 두 개를 선언 후 module.exports에 변수들을 담은 객체를 대입함. -> 변수를 모아둔 모듈로서 기능함. -> 다른 파일에서 이 파일을 불러오면 module.exports에 대입된 값을 사용할 수 있음.
const {odd,even} = require('./var');

function checkOddOrEven(num){
    if(num % 2){
        //홀수면
        return odd;
    }
    return even;
}

module.exports = checkOddOrEven;

 

index.js

  • var.js와 func.js 모두 참조함.
const {odd,even} = require('./var');
const checkNumber = require('./func');

function checkStringOddOrEven(str){
    if(str.length % 2){
        //홀수면
        return odd;
    }
    return even;
}

console.log(checkNumber(10));
console.log(checkStringOddOrEven('hello'));

실행 결과

💡여러 파일에 걸쳐 재사용되는 함수나 변수를 모듈로 만들어두면 편리하지만 모듈이 많아지고 모듈 간의 관계가 얽히게 되면 구조를 파악하기 어렵다는 단점도 있다.

 

Node.js 내장객체 알아보기

🔍global

  • window와 같은 전역 객체(모든 파일에서 접근 가능), window.open을 open으로 생략 가능한 것처럼 global 또한 생략 가능함.

 

globalA.js

  • global.message 값을 반환함.
module.exports = () => global.message;

globalB.js

  • global 객체에 속성명이 message인 값을 대입하고 globalA 모듈 함수를 호출함.
const A = require('./globalA');

global.message = '안녕하세요';
console.log(A());

실행 결과

  • globalB에서 넣은 global.message 값을 globalA에서도 접근 가능함을 보여줌.

 

🔍console

  • 보통 디버깅을 위해 사용함.
  • 개발 시 변수에 값이 제대로 들어 있는지, 에러 발생 시 에러 내용을 콘솔에 표시하기 위해 사용.
  • 코드 실행 시간을 알아볼 때에도 사용함.

 

console.js

  • console.time(레이블) : 같은 레이블을 가진 time과 timeEnd 사이의 시간을 측정함.
  • console.log(내용) : 평범한 로그를 콘솔에 표시함.
  • console.error(에러 내용) : 에러를 콘솔에 표시함.
  • console.table(배열) : 배열 요소로 객체 리터럴을 넣으면, 객체 속성들이 테이블 형식으로 표현됨.
  • console.dir(객체, 옵션) : 객체를 콘솔에 표시할 때 사용함.
  • console.trace(레이블) : 에러가 어디에서 발생했는지 추적할 수 있게함.

실행 결과

 

🔍타이머

 

timer.js

  • setTimeout(콜백 함수, 밀리초) : 주어진 밀리초 이후에 콜백 함수를 실행함.
  • setInterval(콜백 함수, 밀리초) : 주어진 밀리초마다 콜백 함수를 반복 실행함.
  • setImmediate(콜백 함수) : 콜백 함수를 즉시 실행함.
  • clear + 타이머 함수 : 해당 타이머 함수를 취소함.

실행 결과

  • immediate가 가장 먼저 실행되고 immedate2는 clear를 사용해서 취소했으므로 실행되지 않음.

 

🔍require

  • require는 함수이고 함수는 객체이므로 require는 객체로서 몇 가지 속성을 가짐.

require.js

실행 결과

💡위 예제의 포인트는 require가 반드시 파일 최상단에 위치할 필요가 없고, module.exports도 최하단에 위치할 필요가 없다는 것. (=아무 곳에서 사용 가능)

  • require.cache 객체에 require.js 나 var.js같은 파일 이름이 속성명으로 들어있는 것을 확인할 수 있는데 속성값으로는 각 파일의 모듈 객체가 들어 있음. => 한 번 require한 파일은 require.cache에 저장되므로 다음 번에 require할 때는 새로 불러오지 않고 require.cache에 있는 것이 재사용됨.
  • require.main은 노드 실행 시 첫 모듈을 가리킴. 현재 파일이 첫 모듈인지 알아보려며 require.main === module을 해보면 됨.

 

🔍process

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

  • process.env를 입력하면 매우 많은 정보가 출력됨.
//노드를 실행할 때의 옵션을 입력받는 환경 변수
NODE_OPTIONS =-max-old-space-size=8192	//노드의 메모리를 8GB까지 사용할 수 있게함.
//노드에서 기본적으로 사용하는 스레드풀의 스레드 개수를 조절할 수 있게함.
UV_THREADPOOL_SIZE=8
  • process.env는 서비스의 중요한 키를 저장하는 공간으로도 사용되는데 서버나 데이터베이스의 비밀번호 등을 직접 입력하는 것은 위험하기 때문에 중요 비밀번호는 process.env의 속성으로 대체함
const secretId = process.env.SECRET_ID;
const secretCode = process.env.SECRET_CODE;
  • process.nextTick(콜백) : 이벤트 루프가 다른 콜백 함수들보다 nextTick의 콜백 함수를 우선으로 처리하도록 만듦.

nextTick.js

setImmediate(()=>{
    console.log('immediate');
});
process.nextTick(()=>{
    console.log('nextTick');
});
setTimeout(()=>{
    console.log('timeout');
},0);
Promise.resolve().then(()=>console.log('promise'));

실행 결과

  • process.nextTick은 setImmediate나 setTimeout보다 먼저 실행됨.
  • resolve된 Promise 또한 nextTick처럼 다른 콜백들보다 우선시됨.

  • 이렇게 우선시되는 process.nextTick과 Promise를 마이크로태스크(microtask)라고 따로 구분지어 부르기도함.

  • process.exit(코드) : 실행 중인 노드 프로세스를 종료함. 서버 환경에서 exit 사용 시 서버가 멈추므로 잘 사용하지 않음.

exit.js

let i = 1;
setInterval(()=>{
    if(i === 5){
        console.log('종료!');
        process.exit();
    }
    console.log(i);
    i += 1;
},1000);

실행 결과

  • 1부터 4까지 표시한 뒤 i가 5가 되었을 때 종료함.

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형