Node.js 스트리밍 단위로 파일 읽고 쓰는 방법

Node.js 스트리밍 단위로 파일 읽고 쓰는 방법

Node.js에서는 큰 파일을 처리하거나 데이터 스트림을 다룰 때 스트리밍을 활용하여 메모리 사용을 최적화하고 효율성을 높일 수 있습니다. 이 글에서는 Node.js의 createReadStreamcreateWriteStream 메소드를 사용하여 파일을 스트리밍 단위로 읽고 쓰는 방법에 대해 알아보겠습니다.

createReadStream 사용하기

createReadStream 메소드를 사용하면 파일을 읽기 위한 스트림을 생성할 수 있습니다. 이 방법은 큰 파일을 작은 청크(chunk)로 나누어서 읽으며, 각 청크(chunk)가 처리될 때마다 이벤트를 발생시킵니다.

// 파일 시스템 모듈을 불러옵니다.
const fs = require('fs');
// 'largeFile.txt' 파일로부터 읽기 스트림을 생성합니다. 파일 내용은 'utf8' 인코딩으로 읽습니다.
const readStream = fs.createReadStream('./largeFile.txt', 'utf8');

// 'data' 이벤트가 발생할 때마다, 즉 파일 내용의 청크(조각)가 읽힐 때마다 실행될 콜백 함수를 등록합니다.
readStream.on('data', (chunk) => {
  console.log(chunk);  // 콘솔에 읽힌 청크의 내용을 출력합니다.
});

위 코드는 largeFile.txt 파일을 읽고, 파일의 내용이 청크(chunk) 단위로 콘솔에 출력되도록 합니다.

createReadStream 메소드 사용예제 코드 실행 화면

createWriteStream 사용하기

반면, createWriteStream 메소드는 파일에 데이터를 쓰기 위한 스트림을 생성합니다. 이를 통해 큰 데이터를 작은 부분으로 나누어 파일에 순차적으로 쓸 수 있습니다.

// 파일 시스템 모듈을 불러옵니다.
const fs = require('fs');
// 'output.txt' 파일로 쓰기 스트림을 생성합니다. 데이터는 'utf8' 인코딩으로 쓰여집니다.
const writeStream = fs.createWriteStream('./output.txt', 'utf8');

// 스트림을 통해 파일에 "Hello, " 문자열을 씁니다.
writeStream.write('Hello, ');
// 스트림을 통해 파일에 "World!" 문자열을 추가로 씁니다.
writeStream.write('World!');
// 스트림의 끝을 알리고 파일 쓰기 작업을 완료합니다.
writeStream.end();

위 코드는 output.txt 파일에 “Hello, “와 “World!”를 추가합니다. end 메소드 호출은 스트림에 더 이상 쓸 데이터가 없음을 알립니다.

스트림 파이핑

스트림의 가장 강력한 기능 중 하나는 파이핑(piping)입니다. createReadStream으로 생성한 스트림에서 createWriteStream으로 생성한 스트림으로 데이터를 직접 전송할 수 있습니다.

// 파일 시스템 모듈을 불러옵니다.
const fs = require('fs');
// 'largeFile.txt'에서 데이터를 읽기 위한 스트림을 생성합니다.
const readStream = fs.createReadStream('./largeFile.txt');
// 'outputFile.txt'에 데이터를 쓰기 위한 스트림을 생성합니다.
const writeStream = fs.createWriteStream('./outputFile.txt');

// readStream에서 읽은 데이터를 writeStream을 통해 'outputFile.txt'로 전송합니다.
readStream.pipe(writeStream);

위 코드는 largeFile.txt의 내용을 outputFile.txt로 복사합니다. 이 과정에서 데이터는 메모리에 모두 저장되지 않고, 청크 단위로 직접 전송됩니다.

Node.js에서 스트리밍을 사용하는 방법에 대한 더 자세한 정보는 Node.js 공식 문서에서 찾아볼 수 있습니다. 스트림은 Node.js에서 데이터를 효율적으로 처리하는 강력한 방법을 제공하므로, 이를 활용하여 성능을 개선해 보세요.

관련 이전 게시글

이 글이 도움이 되셨다면 공유 부탁 드립니다.

위로 스크롤