본문 바로가기
메모 log (간단메모)/backend

파일 처리 방식

by abbear25 2020. 9. 22.

readFile 방식이 편리하지만 용량에 따른 동일 버퍼가 필요

ex) 1GB 파일 읽기 = 1GB 버퍼 생성 = 1GB 메모리 자원 낭비

동시 사용자가 많을 경우 서버 자원 낭비, 메모리 문제 발생

 

이를 해결하기 위해서 스트림 활용

100MB 버퍼 생성 후 10번 정도 걸쳐서 전송하는 방식

const writeStream = fs.createWriteStream('./profile.txt');
writeStream.on('finish', ()=>{
   console.log("입력 종료");
});
writeStream.write("안녕하세요\n");
writeStream.write("일루아에요~!");
writeStream.end();

/*highWaterMark default: 64KB - 기본 버퍼의 크기*/
const readStream = fs.createReadStream("./profile.txt", {highWaterMark: 16})
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);
});

 

 

반응형

'메모 log (간단메모) > backend' 카테고리의 다른 글

AJAX 요청 - axios 또는 jQuery  (0) 2020.09.20
Promise  (0) 2020.09.20