ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 제로부터 시작하는 Node.js - 3. Node.js의 전역객체
    내가 보기 위해 쓰는 것/Node.js 2019. 10. 31. 13:27
    Node.js가 제공하는 전역 객체를 알아보고 Node.js의 핵심모듈을 알아봅시다.

     

    시작하기 전 알아두어야 할 개념입니다.

    아래 개념을 모르면 Node.js글을 이해하기 힘듭니다.

     

    개념 설명
    전역 변수/객체 프로그램 전체에서 사용할 수 있는 변수와 객체를 의미합니다.
    process 객체 프로그램과 관련된 정보를 나타내는 객체이며, 웹 브라우저에서 작동하는 자바스크립트에서는 존재하지 않는, Node.js만이 가진 객체입니다.
    모듈 모듈은 기능을 쉽게 사용하고자 메서드와 속성을 미리 정의해 모아 놓은 것입니다.
    exports 객체 모듈을 생성할 때 사용합니다.

     

    1. 전역 변수

    웹 브라우저에서 동작하는 자바스크립트의 최상위 객체는 Window 객체입니다. 하지만 Node.js는 브라우저에서 동작하는 것이 아니므로 Window객체가 없습니다. 대신 전역변수와 전역 함수를 가지고 있습니다. 전역변수에 대해서 알아봅시다.

     

    global객체라는게 있긴 합니다. 다만 여기서 설명하고자 하는 __filename, __dirname 과 require() 함수는 global 객체에 포함되지 않은 친구들임으로 여기선 최상위 객체가 없다는 느낌으로 넘어갑시다.

     

    기본적인 자료형 변수를 알아봅시다.

    Node.js는 전역변수로 아래 표에 있는 문자열 자료형 변수를 가지고 있습니다.

     

    변수 이름 설명
    __filename 현재 실행중인 코드의 파일 경로를 나타냅니다.
    __dirname 현재 실행중인 코드의 폴더 경로를 나타냅니다.

     

    * filename과 dirname왼쪽에 underbar는 두개입니다. ( _ _ )

     

    진짜 선언안한 변수가 있는지, 확인해봅시다. 새로 js 파일을 만들고 아래처럼 소스코드를 입력하고, 실행해봅시다.

     

    console.log('filename : ' + __filename)
    console.log('dirname : ' + __dirname)
    

    __filename이나 __dirname은 저희가 선언한 적 없는 변수이지만 경로를 출력해주네요.

     

    이런 전역변수 외에 전역 객체도 있습니다.

     

    2. 전역 객체

    전역 객체가 뭐가있는지 간단하게 표를 봅시다.

     

    객체 이름 설명
    console 콘솔 화면과 관련된 기능을 다루는 객체입니다.
    exports 모듈과 관련된 기능을 다루는 객체입니다.
    process 프로그램과 관련된 기능을 다루는 객체입니다.

     

    * 기본 자바스크립트가 가진 String, Number, Math 같은 객체는 생략한거에요.

     

    console 객체는 생략하겠습니다.

    2-1. process 객체

    맨 위에있는 표에서 Node.js만이 가진 객체라고 설명드렸죠. process 객체에 대해서 알아봅시다. 

     

    process객체는 프로그램과 관련된 정보를 나타내는 객체입니다. 여기서 모두 다루기엔 좀 덩치가 큰 친구인 것 같습니다. 여기서는 가장 기본적이라 하는 내용들만 알아보겠습니다. 어차피 배우다 보면 다 훑어보게 될거에요.

     

    여기서 훑어볼 process 객체의 멤버는 아래 표에 정리했습니다.

    속성

    속성 이름 설명
    argv 실행 매개변수를 나타냅니다.
    env 컴퓨터 환경과 관련된 정보를 나타냅니다.
    version Node.js의 버전을 나타냅니다.
    versions Node.js와 종속된 프로그램 버전을 나타냅니다.
    arch 프로세서의 아키텍처를 나타냅니다.
    platform 플랫폼을 나타냅니다.

     

    메서드

    우선 process.argv 속성과 process.exit() 메서드부터 살펴봅시다.

    일단 파일을 만들고 작성해봅시다.

    // process.argv
    process.argv.forEach(function (item, index) {
      // 출력
      console.log(index + ' : ' + typeof (item) + ' : ', item)
    
      //실행 매개변수에 --exit가 있다면
      if(item == '--exit'){
        // 다음 실행 매개변수를 얻음
        var exitTime = Number(process.argv[index + 1])
        // 일정 시간 후 프로그램 종료
        setTimeout(function () {
          process.exit()
        }, exitTime)
      }
    })
    

     이제 실행인데요. 두가지 방법으로 실행해봅시다.

    아래 CMD창 이미지를 보고 따라해보세요.

     

     

    실행 결과 설명입니다. 

    argv<  실행 매개변수를 나타난다 했습니다. 그리고 forEach를 사용하는걸 보면 배열이겠네요.

    뭘 근거로 저런 배열이 나왔을까요?

    실행 구문을 다시 살펴봅시다.

     

    node node.server-global-varibale.js

    node node.server-global-varibale.js --exit 10000

     

    이걸 공백을 단위로 끊어보면요.

     

    node node.server-global-varibale.js

    node node.server-global-varibale.js --exit 10000

     

    아하! 공백을 단위로 실행구문을 해석해서 배열로 나열하는 친구구나!

    첫번째 요소인 node는 node자체의 경로를 나타닙니다.

    두번쨰 요소인 파일명은 파일의 경로를 나타냅니다.

     

    node node.server-global-varibale.js --exit 10000

     

    이렇게 실행 했을 때는 세번째, 네번째 요소가 있죠.

    세번째 요소인 --exit를 받으면

    if(item == '--exit') 이 조건에 들어오게 됩니다.

     

    아래 소스코드도 한번 실행해보고 결과를 직접 확인해봅시다.

     

    console.log('process.env : ' + process.env)
    console.log('process.version : ' + process.version)
    console.log('process.versions : ' + process.versions)
    console.log('process.arch : ' + process.arch)
    console.log('process.platform : ' + process.platform)
    console.log('process.connected : ' + process.connected)
    console.log('process.execArgv : ' + process.execArgv)
    console.log('process.execCode : ' + process.execCode)
    console.log('process.mainModule : ' + process.mainModule)
    console.log('process.release : ' + process.release)
    console.log('process.memoryUsage() : ' + process.memoryUsage())
    console.log('process.uptime() : ' + process.uptime())
    console.log('process.uptime() : ' + process.uptime())
    console.log('process.uptime() : ' + process.uptime())

     

    2-2. exports객체와 모듈

    모듈은 기능을 쉽게 쓰려고 메서드와 속성을 미리 만들어 모아놓은 것입니다. 모듈을 잘 사용하는 것이 Node.js에선 정말 중요합니다.

     

    여기선 간단하게 모듈 생성법을 알아봅시다.

     

    모듈을 만들기 위해선 기본파일과 별도로 다른 자바스크립트 파일이 필요합니다.

    간단하게 모듈을 불러올 main.js와 모듈이 될 module.js 파일을 만들어봅시다.

     

    module.js 먼저 작성해봅시다.

     

    // 덧셈을 하는 함수를 exports 합니다.
    exports.plus = function (a, b) {
      return a + b
    }
    
    // 뺼셈를 하는 함수를 exports 합니다.
    exports.minus = function (a, b) {
      return a - b
    }

     

    자 간단한 모듈이 준비됬습니다. 이제 main.js 를 작성할 차례입니다.

    모듈을 불러올 때는 require 함수를 사용합니다.

     

    var module = require('./module.js')
    
    console.log('10 + 45 = ' + module.plus(10, 45))
    console.log('10 - 45 = ' + module.minus(10, 45))
    

     

    이제 실행해봅시다.

     

    모듈을 생성할 때는 exports, 불러올 때는 require 중요한 개념이니 잘 기억합시다.

    댓글

Designed by Tistory.