카테고리 없음

NodeJS Stream(스트림)이란?! 메모리 효율성과 비동기 이벤트 기반으로 동시성 활용

쿠키는 서비스 2023. 7. 25. 16:59
반응형

  Node.js에서 스트림(Stream)은 데이터를 읽고 쓰는 데 사용되는 추상적인 인터페이스입니다. 스트림은 크기가 큰 데이터를 조각 내어 작은 조각으로 처리하므로, 메모리 효율성과 성능을 높여줍니다. 여기서는 스트림을 사용하여 파일을 읽고 쓰는 예제를 보여드리겠습니다.

 

스트림을 사용하여 파일 복사하기 예제:

  아래의 예제에서는 fs 모듈을 사용하여 파일을 읽고 쓰는 스트림을 생성하고, 파일을 복사하는 기능을 구현합니다.

const fs = require('fs');

// 읽을 파일과 쓸 파일의 경로
const sourceFilePath = 'source.txt';
const destinationFilePath = 'destination.txt';

// 읽기 스트림 생성
const readStream = fs.createReadStream(sourceFilePath);

// 쓰기 스트림 생성
const writeStream = fs.createWriteStream(destinationFilePath);

// 읽기 스트림에서 데이터를 읽어 쓰기 스트림으로 전달하기
readStream.on('data', (chunk) => {
  console.log('읽기 스트림으로부터 데이터를 읽음:', chunk.length, 'bytes');
  writeStream.write(chunk);
});

// 읽기 스트림에서 모든 데이터를 다 읽었을 때
readStream.on('end', () => {
  console.log('파일 복사가 완료되었습니다.');
  writeStream.end(); // 쓰기 스트림 종료
});

// 에러 처리
readStream.on('error', (err) => {
  console.error('파일 읽기 오류:', err);
});

writeStream.on('error', (err) => {
  console.error('파일 쓰기 오류:', err);
});

  위의 코드는 source.txt 파일의 내용을 읽어와 destination.txt 파일로 복사하는 예제입니다. 파일을 복사하는 작업은 스트림을 통해 비동기적으로 처리되며, 파일 크기가 크더라도 메모리에 모든 데이터를 적재하지 않고 조각 조각 읽고 쓰기 때문에 메모리 사용이 효율적입니다.

위의 코드에서는 fs.createReadStream을 사용하여 읽기 스트림을 생성하고, fs.createWriteStream을 사용하여 쓰기 스트림을 생성합니다. readStream은 data, end, error 이벤트를 감지하여 파일의 데이터를 읽고, writeStream으로 데이터를 씁니다. 파일 읽기와 쓰기 과정에서 발생하는 오류도 적절하게 처리합니다. 스트림을 사용하면 파일을 비롯한 큰 데이터를 조각 조각 읽고 쓰며, 더 나은 성능과 효율성을 얻을 수 있습니다.

반응형