FrontEnd/Javascript

[JS] node.js 콘솔에서 입력을 받아보자 - readline

hwa2 2024. 10. 17. 23:35

js 개발 시 콘솔 출력은 당연하게 console.log() 를 사용하였습니다. 그러나 콘솔로 출력을 하는 방법에 대해서는 생각해 본 적이 없습니다. 우아한테크코스 프리코스를 진행하던 중 입력값을 받아오기 위해 사용하는 라이브러리 내에서 readline을 사용하는 것을 봤습니다. 사용해본 적이 없는 모듈이기에 어떻게 사용되는 것인지 확인해보겠습니다.

readline이란?

node.js에 내장되어 있는 core모듈로 한번에 한 줄씩 데이터를 읽기 위한 인터페이스를 제공해주는 모듈입니다.

 

readline 사용하기

1. readline 모듈 사용하기

import readline from "readline";

2. readline 인터페이스 생성

readline의 createInterface 메서드를 사용하여 인스턴스를 생성합니다. 이 인스턴스는 readable stream과 writable stream을 가장 일반적으로 process.stdin(표준 입력) 및 process.out(표준 출력) 스트림을 사용합니다.

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

process는 node.js에서 제공하는 전역 객체이며 현재 실행 중인 프로세스에 대한 정보 제공과 제어 기능을 제공합니다.

  • process.stdin : 표준 입력(터미널에서 입력되는 데이터)을 읽을 수 있는 readableStream 입니다.
  • process.stdout : 표준 출력(터미널에서 출력되는 데이터)을 쓸 수 있는 writableStream 입니다.

3. readline 이벤트 실행

아래와 같이 readline의 on을 사용하면 지정한 이벤트를 실행할 수 있습니다.

rl.on(event, callback);

 

line

  • 한 줄 씩 입력받아 실행하며 Enter 또는 Return을 누를 때마다 발생합니다.
  • 터미널을 통해 입력된 내용은 callback함수 인자로 넘어온다. (예시의 input)
  • 입력된 내용은 문자열로 받아옵니다.
rl.on('line', ((input) => {
	console.log(`입력받은 값: ${input}`);
});
  • rl.close() 를 입력하지 않으면 무한대로 입력을 받습니다.
    • 입력을 받을 때마다 callback 함수가 실행됩니다.

close

  • readline이 종료될 때 이벤트가 실행됩니다.
rl.on('close', () => {
    console.log(`Close readline.`);
})

 

전체 코드

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

rl.on('line', (input) => {
    console.log(`입력받은 값: ${input}`);
    rl.close();
});

rl.on('close', () => {
    console.log(`Close readline.`);
})

 

실행 내용

hello
입력받은 값: hello
Close readline.

 

4. 질문을 출력하고 입력을 받아보자.

  • question을 사용하면 첫번째 입력된 문자열을 콘솔에 출력한 후 입력을 받습니다.
rl.question('이름을 입력하세요. \n', (name) => {
    console.log(`Hello ${name}`);
    rl.close();
});

 

실행 내용

이름을 입력하세요.
ihwa
Hello ihwa

 

Javascript 실행하는 방법 그런데 node.js를 곁들인..

아래 명령어를 이용하면 터미널 내에서 node.js를 실행시킬 수 있습니다.

위 코드들을 작성한 뒤 직접 실행해보세요 :)

node {파일이름}.js

 

참고

https://nodejs.org/docs/latest/api/readline.html

https://velog.io/@pexe99/JavaScript-readline-그게-뭔데

https://socaeri.com/entry/Node-JS-readline-모듈로-입출력-방법