Node.js를 사용하면 텍스트 파일을 읽어 그 내용을 배열(Array) 형태로 손쉽게 반환할 수 있습니다. 이렇게 만든 배열은 각 줄을 개별적으로 처리하거나 단순히 파일 내용을 확인하는 용도로 활용할 수 있습니다.
파일 읽기 작업은 Node.js의 기본 내장 모듈인 'fs' 모듈을 통해 수행되며, 대표적으로 fs.readFileSync()와 fs.readFile() 두 가지 메서드가 사용됩니다. 이 방법들은 용량이 큰 텍스트 파일을 다룰 때에도 유용하게 활용됩니다.
예제 1: readFileSync() 사용하기
fileToArray.js라는 이름의 파일을 생성하고 아래 코드를 복사해 붙여넣습니다. 파일 생성 후에는 다음 명령어로 코드를 실행할 수 있습니다.
node fileToArray.js
fileToArray.js
// fs 모듈 불러오기
let fs = require("fs")
// 파일명을 받아 readFileLines 함수 정의
const readFileLines = filename =>
fs.readFileSync(filename)
.toString('UTF8')
.split('\n');
// 파일명을 인자로 readFileLines 함수 호출
let arr = readFileLines('tutorialsPoint.txt');
// 결과 배열 출력
console.log(arr);위 코드는 파일을 UTF-8 문자열로 읽어 들인 뒤, 줄바꿈 문자(\n)를 기준으로 분할하여 배열을 만드는 방식입니다.
실행 결과
C:\home\node>> node fileToArray.js [ 'Welcome to TutorialsPoint !', 'SIMPLY LEARNING', '' ]
예제 2: 비동기 readFile() 사용하기
이번에는 비동기 방식으로 파일을 읽는 예제를 살펴보겠습니다. 콜백 함수를 통해 에러와 데이터를 함께 처리한다는 점이 특징입니다.
// fs 모듈 불러오기
var fs = require("fs")
// 파일명으로 readFileLines 초기화
fs.readFile('tutorialsPoint.txt', function(err, data) {
if(err) throw err;
var array = data.toString().split("\n");
for(i in array) {
// 결과 배열 출력
console.log(array[i]);
}
});실행 결과
C:\home\node>> node fileToArray.js Welcome to TutorialsPoint ! SIMPLY LEARNING
동기 방식과 비동기 방식의 차이
readFileSync()는 파일 읽기가 완료될 때까지 프로그램 실행을 잠시 멈추고 대기한 후 결과를 반환합니다. 코드 흐름이 직관적이고 순차적으로 실행되어 간단한 스크립트나 초기화 작업에 적합하지만, 파일이 크거나 I/O 작업이 많으면 전체 애플리케이션 성능에 영향을 줄 수 있습니다.
반면 readFile()은 비동기 방식으로 동작하여 파일을 읽는 동안에도 다른 작업을 계속 처리할 수 있습니다. 콜백 함수를 통해 에러(err)와 데이터(data)를 전달받아 처리하며, 여러 요청을 동시에 처리해야 하는 서버 환경에서 더욱 효율적입니다.