될때까지

버퍼와 스트림 본문

학습/Node.js

버퍼와 스트림

랖니 2022. 8. 22. 17:45
728x90

버퍼와 스트림

버퍼 : 일정한 크기로 모아두는 데이터

  • 일정한 크기가 되면 한 번에 처리
  • 버퍼링 : 버퍼에 데이터가 찰 때까지 모으는 작업

 

버퍼의 단점 : 용량이 100MB인 파일이라면 읽을때에도 메모리에 100MB의 버퍼를 만들어야한다. 이때 서버같이 여러명이 이용하는 환경에서는 메모리문제가 발생할 수 있음. 그리고 모든 내용의 버퍼를 다 쓴 후에야 다음 동작으로 넘어가기때문에 동작이 느리다. 

스트림 : 데이터의 흐름

  • 일정한 크기로 나눠서 여러번에 걸쳐서 처리
  • 버퍼(또는 청크)의 크기를 작게 만들어서 주기적으로 데이터를 전달
  • 스트리밍 : 일정한 크기의 데이터를 지속적으로 전달하는 작업
const fs = require("fs");
const readStream = fs.createReadStream('./readme3.txt');

const data = [];
readStream.on('data', (chunk) => {
    data.push(chunk);
    console.log('data', chunk, chunk.length);
})
readStream.on('end', () => {
    console.log('end', Buffer.concat(data).toString());
})
readStream.on('error', (err) => {
    console.log('error', err)
})
const fs = require('fs');

const writeStream = fs.createWriteStream('./writeme2.txt');
writeStream.on('finish', () => {
    console.log('파일 쓰기 완료');
});

writeStream.write('이 글을 씁니다.');
writeStream.write('한번 더 씁니다.');
writeStream.write('마지막으로 씁니다.');
writeStream.end();

 

스트림의 장점 : 받을때도 조금씩 받기 떄문에 들어온 데이터를 받아 가공할 수 있다. 작은 용량의 버퍼들이 전달되면 흘러가는 흐름이 파이프의 물 흐르는 것과 같다하여 pipe라고 한다. 

728x90

'학습 > Node.js' 카테고리의 다른 글

((TIL)) Node.js express로 인스타그램 구현하기1  (0) 2022.09.13
예외 처리하기  (0) 2022.08.22
fs  (0) 2022.08.22
crypto와 util  (0) 2022.08.21
os와 path  (0) 2022.08.21