노드는 기본적으로 제공하는 내장객체 가 있는데 require함수나 module객체 등 따로 선언해주지 않았어도 사용가능 하다.
모듈화 하는 법을 자세히 보고 싶다면 여기
브라우저의 window와 같은 전역 객체 이다. 모든 파일에 접근가능 하며 window.open메서드를 그냥 open으로 호출할수 있는것처럼 global도 생략 할 수 있다. console
도 원래는 global.console
이다.
노드에는 DOM이 없기때문에 window와 document객체는 사용할수 없다.
global객체 내부를 보기위해서는 REPL을 이용해야 한다.
$ node
> global
아래의 코드는 간단한 데이터를 공유하는 예제이다.
📃globalA.js
📃globalB.js
노드 실행
global객체의 속성에 값을 대입하여 파일 간에 데이터를 공유할 수 있지만, 남용하는 것은 좋지 않다. 규모가 커질수록 유지보수에 어려움이 생길수 있기 때문이다.
다른 파일의 값을 사용하고 싶다면 모듈 형식으로 만들어서 명시적으로 값을 불러와 사용하는 것이 좋다.
노드에서 console
은 디버깅을 위해 사용한다. 메서드의 종류는 다양하며 새로운 메서드들이 추가되고 있다. 기본적으로 많이 사용하는 것은 console.log()
, console.dir()
이다.
📃console.js
노드 실행
타이머 기능을 제공하는 함수에는 3가지가 있다.
setTimeout(콜백함수, 밀리초)
: 정해준 밀리초 이후에 콜백 함수 실행setInterval(콜백함수, 밀리초)
: 정해준 밀리초마다 콜백 함수 반복 실행setImmediate(콜백함수)
: 콜백함수 즉시 실행아이디를 사용하여 타이머를 취소 할수도 있다.
clearTimeout(아이디)
: setTimeout
을 취소한다.clearInterval(아이디)
: setInterval
을 취소한다.clearImmediate(아이디)
: setImmediate
을 취소한다.타이머 예제
📃 timer.js
노드 실행
setImmediate
와setTimeout
의 차이점 ?두 메소드는 이벤트 루프를 거친 뒤 즉시 실행된다. 하지만 다음과 같은 상황에서는
setImmediate
먼저 실행될수 있다.
- 파일 시스템 접근
- 네트위킹 같은 I/O 작업의 콜백 함수 안에 타이머를 호출하는 경우
노드에서는 파일 사이에 모듈 관계가 있는 경우가 많으므로 현재 파일의 경로나 파일명을 알아야 할때가 있다. 노드는 __filename
, __dirname
키워드를 파일에 넣어두면 실행하면서 현재 파일명과 현재 파일 경로로 바뀐다.
filename.js
모듈을 만들때 module.exports
도 있지만 exports
객체로도 모듈을 만들수 있다.
기존의 📃 var.js
파일을 exports
로 모듈을 만든후 index.js에서 실행하면 똑같은 결과를 얻을수 있다.
module.exports
로 한번에 대입하는 대신, 각각의 변수를 exports
객체에 하나씩 넣었다.
동일 하게 동작하는이유는 두 객체(module.exports
,exports
)가 같은 객체를 참조하기 때문이다.
📃 require.js
해당 예시로 알수 있는 것은 require가 반드시 파일 최상단에 위치할 필요도 없고, module.exports도 최하단에 위치할 필요가 없다는 것이다.
require.cache
require.main
노드에서 this를 사용할 때 주의 해야할 점이 있다.
this.js
최상위 스코프에 존재하는 this
는 module.exports/ exports 객체
를 가리킨다. 또한, 함수 선언문 내부의 this는 global객체를 가리킨다.
❕ 화살표 함수인 경우
노드실행
화살표 함수인 경우 함수 내부의this
는 상위스코프가 가리키는 this인exports
를 가리킨다.
모듈이 서로를 참조 하게 된다면 순환참조(circular dependency)가 생기게 되고 이런경우 순환 참조되는 대상을 빈 객체로 만들게 된다.
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판
의 내용을 공부하며 정리하였습니다.