JavaScript 코딩테스트를 준비해 본 사람이라면, Node.js에서 사용자 입력을 받아 처리하는 대표적인 방법인 fs 모듈과 readLine 모듈을 사용해봤을 것이다.
입력 값을 받아 출력 값을 보여주기 위해 사용하는 모듈이라는 사실만 알지, 구체적으로 어떻게 사용하는 것인지 몰랐기에,
이번에 정리해보려한다.
1. fs 모듈
fs 모듈은 파일 시스템과 상호작용할 수 있는 모듈로, 파일을 읽거나 쓸 때 사용됩니다. 주로 파일에서 입력을 읽을 때 사용한다.
사용법
- 모듈을 불러온다. // require('fs')
- readFileSync 메서드를 사용하여 파일을 동기적으로 읽는다. // fs.readFileSync('data.json', 'utf8')
- 입력을 처리한다. // JSON.parse(data) : JSON 문자열을 자바스크립트 객체로 변환
예제: 파일에서 JSON 데이터 읽기
const fs = require('fs');
// JSON 파일을 동기적으로 읽기
const data = fs.readFileSync('data.json', 'utf8');
// JSON 문자열을 객체로 변환
const jsonData = JSON.parse(data);
// JSON 데이터 처리
const keys = Object.keys(jsonData);
console.log('JSON 데이터의 키 목록:', keys);
// 특정 키의 값 출력
const key = 'name';
if (jsonData[key]) {
console.log(`${key}: ${jsonData[key]}`);
} else {
console.error(`키 '${key}'가 JSON 데이터에 없습니다.`);
}
2. readLine 모듈
사용법
- 모듈을 불러온다. // require('readline')
- createInterface 메서드를 사용하여 인터페이스를 생성한다. // readline.createInterface({}) : 입력과 출력을 설정
- 한 줄의 입력을 받을 때마다 호출되는 이벤트 리스너를 설정한다. // rl.on('line', function(line) {...})
- line 이벤트 리스너를 설정하여 입력을 처리한다.(입력된 줄을 배열에 저장) // lines.push(line)
- 입력이 끝나면 인터페이스를 닫는다. // rl.close()
- 입력받은 모든 줄을 출력한다. // lines.forEach((line, index) => {...})
예제: 여러 줄의 사용자 입력 처리하기
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const lines = [];
console.log('여러 줄의 입력을 받습니다. "exit"를 입력하면 종료됩니다.');
rl.on('line', function(line) {
if (line.toLowerCase() === 'exit') {
rl.close();
} else {
lines.push(line);
}
}).on('close', function() {
console.log('입력받은 줄 목록:');
lines.forEach((line, index) => {
console.log(`${index + 1}: ${line}`);
});
process.exit();
});
3. readLine vs fs 비교
특징 | fs 모듈 |
readline 모듈 |
---|---|---|
입력 소스 | 파일 시스템 | 표준 입력 (콘솔) |
사용 예 | 파일에서 데이터 읽기 | 사용자로부터 인터랙티브한 입력 받기 |
동기/비동기 | 주로 동기적 (readFileSync ), 비동기 가능 (readFile ) |
비동기적 |
성능 | 파일 크기에 따라 다름 | 실시간 입력 처리에 적합 |
복잡도 | 상대적으로 간단한 설정 | 이벤트 리스너 설정 필요 |
특징 | 파일 읽기/쓰기에 최적화, 대용량 파일 처리 가능 | 실시간 입력 및 다중 라인 입력 처리에 적합 |
사용 예제 | 로그 파일 분석, 설정 파일 읽기 등 | CLI 인터페이스, 사용자 입력 처리 등 |