Web Frontend

Node.js로 입력값 출력하기 ( fs, readline 언제 사용할까? )

챙v 2025. 2. 11. 15:21
728x90
반응형

자바스크립트에서 외부 입력을 받아 출력할 때는 Node.js의 모듈로 readline과 fs를 주로 사용합니다. 아래 간단한 개념 정리와 readline모듈을 활용한 예제를 통해 알아봅시다.

Node.js로 입력값 출력 방법 두가지

1. fs 모듈

fs(File System) 모듈은 Node.js에서 파일 시스템과 상호작용하기 위한 기본 모듈입니다. 동기적혹은 비동기적 방식으로 파일을 읽거나 쓸 때 사용됩니다.

특징

  • 동기적/비동기적 파일 I/O: fs.readFileSync()와 fs.readFile() 등을 사용해 파일을 읽을 수 있습니다.
  • 온라인 저지 환경에 적합: 코딩 테스트나 알고리즘 문제 풀이 시, Node.js 환경에서는 /dev/stdin을 이용해 입력을 받을 수 있습니다.

예제 (동기적 방식)

const fs = require('fs');

// '/dev/stdin'을 사용하면, 터미널이나 온라인 저지 환경에서 입력을 받을 수 있습니다.
// 두 번째 인자로 'utf8'을 지정하여 문자열 형태로 읽습니다.
const input = fs.readFileSync('/dev/stdin', 'utf8').trim();

// 입력 받은 값을 그대로 출력합니다.
console.log(input);

코드 한 줄씩 이해하기

  • fs.readFileSync('/dev/stdin', 'utf8'):
    • 동기적 파일 읽기 메서드로, /dev/stdin에서 입력값을 읽습니다.
    • utf8 인코딩을 지정하여 문자열로 반환합니다.
  • .trim():
    • 입력값 앞뒤의 불필요한 공백이나 줄바꿈을 제거합니다.
  • console.log(input):
    • 입력받은 문자열을 출력합니다.
장점 단점
  • 구현이 간단하고, 입력 전체를 한 번에 처리할 수 있음.
  • 동기 방식이므로 코드가 순차적으로 진행되어 이해하기 쉬움.
  • 입력 데이터가 매우 큰 경우 동기 방식으로 읽어 들이면
    이벤트 루프가 블로킹될 수 있음

2. readline 모듈

readline 모듈은 스트림(stream) 인터페이스를 사용해 한 줄씩 입력을 처리할 수 있도록 도와줍니다.
대화형 CLI 애플리케이션이나 대량의 입력을 한 줄씩 처리할 때 유용합니다. 주로 알고리즘 테스트에서 입력값을 받을 때 사용합니다.

특징

  • 라인 단위 처리: 한 줄씩 입력을 받을 수 있으므로, 입력값이 여러 줄로 구성된 경우에 적합합니다.
  • 비동기 이벤트 기반: 입력 스트림에서 line 이벤트를 통해 각 줄을 처리하고, close 이벤트로 입력 종료를 감지할 수 있습니다.

예제

const readline = require('readline');

// readline 인터페이스 생성: 표준 입력(process.stdin)과 표준 출력(process.stdout)을 지정합니다.
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let inputLines = [];

// 'line' 이벤트: 입력이 들어올 때마다 호출됩니다.
rl.on('line', (line) => {
    inputLines.push(line);
});

// 'close' 이벤트: 입력이 끝나면 호출됩니다.
rl.on('close', () => {
    // 모든 입력이 배열에 저장되어 있습니다.
    // 필요한 처리 후 결과 출력
    console.log(inputLines.join('\n'));
});

코드 한 줄씩 이해하기

  • readline.createInterface({...}):
    • 표준 입력(process.stdin)과 표준 출력(process.stdout)을 사용하여 인터페이스를 생성합니다.
  • rl.on('line', callback):
    • 사용자로부터 한 줄씩 입력이 들어올 때마다 콜백 함수가 실행되어, 입력된 line을 inputLines 배열에 저장합니다.
  • rl.on('close', callback):
    • 모든 입력이 끝난 후(Ctrl + D 또는 입력 스트림 종료 시) 실행됩니다.
    • 배열에 저장된 입력값들을 필요에 따라 처리하거나 출력합니다.
장점 단점
  • 한 줄씩 입력을 처리하므로,
    메모리 사용을 효율적으로 관리할 수 있음.
  • 이벤트 기반이므로,
    입력이 완료되는 시점을 명확히 파악할 수 있음.
  • 코드가 조금 더 복잡해질 수 있으며,
    이벤트 기반이므로 비동기 처리에 익숙해야 함.

언제 fs 모듈과 readline 모듈을 사용할까?

  • fs 모듈은 입력 데이터가 한 번에 전체로 주어지는 경우에 주로 사용합니다. 입력 데이터가 한 번에 전체로 주어지는 경우는 한 줄의 입력에 모든 데이터가 들어오거나 전체 파일을 한 번에 읽어 처리할 때가 있습니다. 또한 동기적 처리가 문제가 되지 않는 경우 fs 모듈을 활용합니다.
  • readline 모듈은 입력 데이터가 여러 줄로 이루어져 있거나, 한 줄씩 처리해야 할 때 주로 사용합니다. 비동기 이벤트 처리를 통해 대화형 CLI 애플리케이션을 만들 때 사용합니다.

두 모듈 모두 Node.js에서 입력값을 처리하는 데 매우 유용하므로, 상황에 맞게 적절한 모듈을 선택하여 사용할 수 있습니다.

이와 같이, Node.js에서 입력값을 받는 방법과 각 모듈의 특징을 이해하면, 다양한 상황에 맞게 효과적으로 입력을 처리할 수 있습니다.

728x90
반응형