Node.js

[NodeJS] 버퍼와 스트림

min_s 2025. 2. 1. 21:26

노드에서는 Buffer 객체를 사용할 수 있다.

예를 들어 스트르밍할때, 100MB 파일을 1MB씩 나누어 보내면 수신측은 이 버퍼들을 다시 하나로 만들어줘야한다.

아래는 concat을 이용하여 하나로 합쳐줬다.

const buffer = Buffer.from('저를 버퍼로 바꿔보세요');
console.log('from():', buffer);
console.log('length:', buffer.length);
console.log('toString():', buffer.toString());

const array = [Buffer.from('스'), Buffer.from('벤'), Buffer.from('데')];
const buffer2 = Buffer.concat(array);
console.log('concat():', buffer2.toString());

const buffer3 = Buffer.alloc(5);
console.log('alloc():', buffer3);

실행 결과

 

이번엔 스트림 방식이다. 비동기 방식이기 때문에 에러 처리가 필수적이다.

const fs = require('fs');
const readStream = fs.createReadStream('./readme.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);
});

스트림은 일정 크기로 나누어 전송이 가능하다.

따라서 스트림 방식은 버퍼 방식에 비해 메모리 절약이 가능하다.