노드의 내장 객체

y0ung·2021년 6월 13일
0

node.js

목록 보기
3/4
post-thumbnail

노드는 기본적으로 제공하는 내장객체 가 있는데 require함수나 module객체 등 따로 선언해주지 않았어도 사용가능 하다.

모듈화 하는 법을 자세히 보고 싶다면 여기

1. global

브라우저의 window와 같은 전역 객체 이다. 모든 파일에 접근가능 하며 window.open메서드를 그냥 open으로 호출할수 있는것처럼 global도 생략 할 수 있다. console도 원래는 global.console 이다.

노드에는 DOM이 없기때문에 window와 document객체는 사용할수 없다.

global객체 내부를 보기위해서는 REPL을 이용해야 한다.

$ node
> global

아래의 코드는 간단한 데이터를 공유하는 예제이다.

  • 📃globalA.js

  • 📃globalB.js

  • 노드 실행

global객체의 속성에 값을 대입하여 파일 간에 데이터를 공유할 수 있지만, 남용하는 것은 좋지 않다. 규모가 커질수록 유지보수에 어려움이 생길수 있기 때문이다.

다른 파일의 값을 사용하고 싶다면 모듈 형식으로 만들어서 명시적으로 값을 불러와 사용하는 것이 좋다.

2. console

노드에서 console은 디버깅을 위해 사용한다. 메서드의 종류는 다양하며 새로운 메서드들이 추가되고 있다. 기본적으로 많이 사용하는 것은 console.log(), console.dir()이다.

  • 📃console.js

  • 노드 실행

3. 타이머

타이머 기능을 제공하는 함수에는 3가지가 있다.

  • setTimeout(콜백함수, 밀리초) : 정해준 밀리초 이후에 콜백 함수 실행
  • setInterval(콜백함수, 밀리초) : 정해준 밀리초마다 콜백 함수 반복 실행
  • setImmediate(콜백함수) : 콜백함수 즉시 실행

아이디를 사용하여 타이머를 취소 할수도 있다.

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

타이머 예제

  • 📃 timer.js

  • 노드 실행

setImmediatesetTimeout의 차이점 ?

두 메소드는 이벤트 루프를 거친 뒤 즉시 실행된다. 하지만 다음과 같은 상황에서는 setImmediate 먼저 실행될수 있다.

  • 파일 시스템 접근
  • 네트위킹 같은 I/O 작업의 콜백 함수 안에 타이머를 호출하는 경우

4. 현재 파일의 경로, 파일명

노드에서는 파일 사이에 모듈 관계가 있는 경우가 많으므로 현재 파일의 경로나 파일명을 알아야 할때가 있다. 노드는 __filename, __dirname키워드를 파일에 넣어두면 실행하면서 현재 파일명과 현재 파일 경로로 바뀐다.

  • 📃 filename.js
  • 노드 실행

5. module, exports, require

5-1. module, exports

모듈을 만들때 module.exports도 있지만 exports객체로도 모듈을 만들수 있다.
기존의 📃 var.js 파일을 exports로 모듈을 만든후 index.js에서 실행하면 똑같은 결과를 얻을수 있다.

module.exports로 한번에 대입하는 대신, 각각의 변수를 exports객체에 하나씩 넣었다.

동일 하게 동작하는이유는 두 객체(module.exports ,exports)가 같은 객체를 참조하기 때문이다.

5-2. require

📃 require.js

해당 예시로 알수 있는 것은 require가 반드시 파일 최상단에 위치할 필요도 없고, module.exports도 최하단에 위치할 필요가 없다는 것이다.

  • require.cache
  • require.main
    노드 실행시 첫 모듈을 가리키게 된다.

node에서 this

노드에서 this를 사용할 때 주의 해야할 점이 있다.

  • 📃 this.js
  • 노드 실행

최상위 스코프에 존재하는 thismodule.exports/ exports 객체를 가리킨다. 또한, 함수 선언문 내부의 this는 global객체를 가리킨다.

❕ 화살표 함수인 경우

노드실행

화살표 함수인 경우 함수 내부의 this상위스코프가 가리키는 this인 exports를 가리킨다.

순환참조

모듈이 서로를 참조 하게 된다면 순환참조(circular dependency)가 생기게 되고 이런경우 순환 참조되는 대상을 빈 객체로 만들게 된다.

6. process

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

process의 정보들의 사용 빈도는 높지 않지만, 일반 적으로 운영체제나 실행 환경별로 다른 동작을 하고 싶을 때 사용한다.

  • process.version : 설치된 노드의 버전
  • process.arch : 프로세서 아키텍처 정보
  • process.platform : 운영체제 플랫폼 정보
  • process.pid : 현재 프로세스의 아이디
  • process.uptime() : 프로세스가 시작된후 흐른 시간
  • process.execPath : 노드의 경로
  • process.cwd() : 현재 프로세스 실행되는 위치
  • process.cpuUsage() : 현재 cpu 사용량
  • process.env : 시스템의 환경 변수를 알수 있다. 시스템 환경 변순ㄴ 노드에 직접 영향을 미치기도 한다.
  • process.exit() : 실행중인 노드 프로세스를 종료 한다. 서버 환경에서 이 함수를 사용하면 서버가 멈추므로 특수한 경우를 제외하고는 서버에서 잘 사용하지 않는다.
    • 📃 exit.js
    • 노드 실행

참고

  • 본 내용은 Node.js 교과서 개정 2판의 내용을 공부하며 정리하였습니다.
profile
어제보다는 오늘 더 나은

0개의 댓글