본문 바로가기

Study/Node

what is Node?

Node js

Node is a JavaScipt runtime that executes code outside of the Browser 

 

Java, Python, Ruby와 같은 언어들은 공식 버전이 있고, 이 버전을 따로 설치해야 해당 언어로 작성된 코드를 실행할 수 있다. 반면 JavaScript는 이런 버전을 따로 설치하지 않더라도 코드를 실행할 수 있다. 왜냐하면, JS는 오직 브라우저에서만 실행 가능한 언어로, ECMAScript라는 규격 사항(specification)을 준수해서 코드를 작성하면, 브라우저가 알아서 이 코드를 분석하고 실행하기 때문이다. 즉, 브라우저만 있으면 js 코드를 실행할 수 있다. 

하지만 2009년, Ryan Dahl에 의해 javascript 코드를 브라우저가 아닌 환경에서도 실행할 수 있게 되었는데, 이 환경이 바로 node이다. 다음은 node js로 만들 수 있는 것들이다. 

 

  1. 웹 서버
  2. 명령어 툴
  3. Native app, ex) VSCode, slack
  4. video game
  5. drone software... 

Node REPL | Read Evaluate Print Loop

노드를 설치한 후에 CLI에서 node 를 타이핑하면, node console인 node REPL에 진입한다. 이 콘솔에 자바스크립트 코드를 작성하면, 코드를 읽고, 평가하고, 출력하는 과정을 반복하기 때문에 REPL이라는 용어를 사용한다. .exit  명령어를 이용해서 콘솔을 종료할 수 있다. 크롬의 콘솔과 같이 간단한 코드를 실행하고자 할 때 사용할 수 있다. 

  1. global | 노드의 전역 객체, 브라우저의 전역객체인 window와 다름
  2. 브라우저에서 제공하는 메서드 사용 불가능
    1. alert, prompt, querySelector... 
    2. setTimeout, setInterval 등은 global에서 제공하는 메서드로 노드에서도 사용 가능
  3. node 파일명.js | 해당 js 파일을 node에서 실행
  4. process | The process object is a global that provides information about, and control over, the current Node.js process.
    • process.version | 현재 노드 버전
    • process.cwd() | current working dir, 현재 작업중인 디렉토리  출력 
    • processs.argv | [ current exec path, file path, additional command line arguments... ]
      • REPL보다는 js 파일 내부에서 사용했을 때 유용
      • js 파일 내부에서 console.log(proces.argv) 를 작성하면 배열이 출력되는데, 해당 파일의 경로가 배열 안의 아이템으로 포함된다.
      • CLI에서, 함수가 아니라 현재 실행중인 Script 파일에 argument를 추가할 수도 있다. 
        • mkdir에서 파일명을 argument로 전달해 폴더를 만드는 함수를 실행하는 것과 같다.
        •  node args.js chicken puppy  => process.argv에 chicken과 puppy가 추가된 상태로 스크립트를 실행한다.
    • fs | file system에 관한 ??? module로, 파일을 생성하거나 읽기 등 파일에 관련된 수많은 메서드가 있음 
      • 파일을 다루는(읽기, 쓰기, 새로 만들기...) 방법은 크게 async와 sync 두가지로 나눌 수 있는데, sync 버전의 파일 시스템 관련 메서드에서는, 해당 작업이 완료되었을 때에만 다음 동작으로 넘어간다(해당 작업이 끝날때 까지 전체 프로세스의 작동을 blocking 한다). 
      • process가 global object이기 때문에 어느 코드에서나 사용할 수 있었던 것과 달리, fs 객체는 require 메서드를 통해 정의해야만 사용할 수 있다. 
      • fs.mkdirSync | fs.writeFileSync 

 

const fs = require('fs');

// asynchronous version 
fs.mkdir('mkdirTest', { recursive: true }, (err) => { // mkdirTest라는 폴더가 만들어진다
  console.log('in the mkdir callback'); // second, 폴더가 만들어진 뒤 출력된다
  if (err) throw err;
});

console.log('after mkdir'); // first, 폴더가 만들어지기 이전에 출력된다

// synchronous version
fs.mkdirSync('syncMkdirTest'); // syncMkdirTest라는 폴더가 만들어 진다
console.log('after making dir'); // 폴더가 만들어진 뒤에 출력된다

 

node를 이용해서 boilertemplate 만들기

// boilertemplate.js

'use strict';
const fs = require('fs');
const folderName = process.argv[2] || 'Project';

fs.mkdirSync(folderName);
fs.writeFileSync(`${folderName}/index.html`, '');
fs.writeFileSync(`${folderName}/app.css`, '');
fs.writeFileSync(`${folderName}/app.js`, 'use strict');

 

$ node boilertemplate.js template

 

template이라는 폴더가 생성되고, 폴더 안에 index.html, app.css, app.js 파일이 생성된다. 

'Study > Node' 카테고리의 다른 글

Module & NPM  (0) 2022.06.01