JavaScript / Node.js 입출력 처리하기

keyboardInput
Input & Output…

본 포스팅에서는 Node.js에서 데이터 및 파일 입출력을 처리 하는 방법을 알아본다.

JavaScriptPS 등을 하는 경우에도 참고하여 이용

출력

출력의 경우, 기본적으로 console.log를 이용한다.

methods of console

console.log 이외에, info, warning, debug, error 등을 활용할 수 있다.

console.log("msg":);
console.info("info");
console.warn("warning");
console.debug("debug");
console.error("error");

chrome에서 console.debug로 출력한 내용이 나오지 않을 수 있는데, 콘솔 출력 옵션을 확인해주어야 한다.

console.log(document);
console.dir(document);

console.log의 경우 HTML 형식의 Tree 구조로 출력하고, console.dir의 경우 JSON 형식의 Tree 구조로 출력한다.

console.group("personal infomation");
console.log("name is caesar.");
console.log("age is 30.");
console.groupEnd();

console.group을 활용하여, 여러 console.log를 묶어서 출력할 수 있다.

const userStatusArray = ["caesar", 30];
const userStatusObject = { name: "caesar", age: 30 };
console.table(userStatusArray);
console.table(userStatusObject);

ArrayOject 타입을 console.table로 출력할 수 있다.

console.count("DO NOT CLICK THIS BUTTON");
console.count("DO NOT CLICK THIS BUTTON");
console.count("DO NOT CLICK THIS BUTTON");
console.count("DO NOT CLICK THIS BUTTON");
console.countReset("DO NOT CLICK THIS BUTTON");

console.count로 호출된 횟수를 출력하고, console.countReset으로 초기화 할 수 있다.

console.time("timer");
let someDifficultCalculation = 0;
for (let i = 0; i < 500; i++) {
  someDifficultCalculation++;
}
console.timeEnd("timer");

console.timeconsole.timeEnd를 활용하여, 코드가 연산 되는데에 소요되는 시간을 측정할 수 있다.

console.log examples

const name = "caesar";
const age = 30;

console.log(name, age);
console.log("%s is %d years old.", name, age);
console.log(`${name} is ${age} years old.`);

style on console.log

console.log(
  "%cFont Colour and Font Size are changed.",
  "color: lime; font-size: 20px;"
);
console.log("%cYin %cand %cYang", "color: red", "color: black", "color: blue");

입력

PS의 경우

// 입력값이 한 줄일 경우
let input = require('fs').readFileSync(filePath).toString().trim();
// 입력값이 여러 줄일 경우
let input = require('fs').readFileSync(filePath).toString().trim().split(' ');

readline

readline module은 Node.js의 기본 내장 모듈이다.

readline / 한 줄 입력받기

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
  // 한 줄 입력 후 실행 되는 영역
  console.log("you typed:", line);
  rl.close(); // close를 표기하지 않으면 무한히 입력 받음
});

rl.on("close", () => {
  // 입력 종료시 실행 됨
  process.exit();
});

fs

fsFile System의 약자로, 마찬가지로 Node.js의 기본 내장 모듈이다

fs / readFile()

fs.readFile(filename, [options], callback);

파일을 asynchronous (비동기적)으로 읽는다.

fs / readFileSync()

fs.readFileSync(filename, [options]);

readFile()과는 달리, 파일을 synchronous (동기적)으로 읽는다.

✔️ process.stdin

async function userEnterInputForExecutionOnError() {
  while (true) {
    try {
      console.log("execute instructions here");
      throw "intentional error";
    } catch (error) {
      console.log("Press enter to try again...");
      await new Promise(function (resolve, reject) {
        process.stdin.resume();
        process.stdin.once("data", function (data) {
          process.stdin.pause();
          resolve();
        });
      });
    }
  }
}

userEnterInputForExecutionOnError();

반복적인 비동기적 요청 등을 할 때, 오류가 발생했을 때 터미널을 통해 해당 요청을 다시 시도할 것인의 여부를 enter 입력을 통해 받아들이는 코드 예제

Promise 객체와 process.stdin을 활용하였다.

process.stdin에 관한 자세한 명세 파악 확인 필요