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로 만들 수 있는 것들이다.
- 웹 서버
- 명령어 툴
- Native app, ex) VSCode, slack
- video game
- drone software...
Node REPL | Read Evaluate Print Loop
노드를 설치한 후에 CLI에서 node 를 타이핑하면, node console인 node REPL에 진입한다. 이 콘솔에 자바스크립트 코드를 작성하면, 코드를 읽고, 평가하고, 출력하는 과정을 반복하기 때문에 REPL이라는 용어를 사용한다. .exit 명령어를 이용해서 콘솔을 종료할 수 있다. 크롬의 콘솔과 같이 간단한 코드를 실행하고자 할 때 사용할 수 있다.
- global | 노드의 전역 객체, 브라우저의 전역객체인 window와 다름
- 브라우저에서 제공하는 메서드 사용 불가능
- alert, prompt, querySelector...
- setTimeout, setInterval 등은 global에서 제공하는 메서드로 노드에서도 사용 가능
- node 파일명.js | 해당 js 파일을 node에서 실행
- 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 |
---|