NodeJs - 버퍼와 스트림

choko's avatar
Jun 29, 2024
NodeJs - 버퍼와 스트림
영상을 로딩할 때 버퍼링 한다고 하고, 영상을 실시간으로 송출할 때 스트리밍 한다고 한다.
 

버퍼

  • 버퍼링 : 영상을 재생할 수 있을 때까지 데이터를 모으는 동작
  • 노드는 파일을 읽을 때 메모리에 파일 크기만큼 공간을 마련해두며 파일 데이터를 메모리에 저장한 뒤 사용자가 조작할 수 있도록 한다. 이때 메모리에 저장된 데이터가 버퍼이다.
  • 버퍼를 직접 다룰 수 있는, Buffer 클래스가 있다.
    • Buffer.from(문자열) // 문자열을 버퍼로 바꿈 Buffer.toString(버퍼) // 버퍼를 문자열로 바꿈 Buffer.concat(배열) // 배열 안에 든 버퍼들을 하나로 합침. Buffer.alloc(바이트) // 바이트 크기의 빈 버퍼를 생성함
       
 
 

스트림

  • 스트리밍 : 방송인의 컴퓨터에서 시청자의 컴퓨터로 영상 데이터를 조금씩 전송하는 것
  • readFile 방식의 버퍼가 편리하기는 하지만, 서버처럼 몇 명이 이용할 지 모르는 환경에서는 버퍼 메모리 할당에 메모리 문제가 생길 수 있다.
  • 그래서 버퍼의 크기를 작게 만든 후 여러 번으로 나눠 보내는 방식이 등장했다. → 스트림
  • createReadStream → 파일을 읽는 스트림 메서드
const fs = require('fs'); // readme3.txt 파일을 16byte 버퍼 크기로 나눠서 읽는다. const readStream = fs.createReadStream('./readme3.txt', {highWaterMark: 16}); const data = []; readStream.on('data', (chunk) => { data.push(chunk); console.log('data :',chunk,chunk.length); }); readStream.on('end', (chunk) => { console.log('data :',Buffer.concat(data).toString()); }); readStream.on('error', (chunk) => { console.log('error :',err); });
createWriteStream.js
const fs = require('fs'); const writeStream = fs.createWriteStream('./writeme2.txt'); // finish 이벤트 리스너 writeStream.on('finish',() => { console.log('파일 쓰기 완료'); }); writeStream.write('이글을 씁니다.') writeStream.write('한번더 씁니다.') writeStream.end();
Share article

Tom의 TIL 정리방