[Node.js] readFile과 createReadStream 비교 및 활용방법
- readFile()
- createReadStream()
- pipe()
readFile의 장점 & 단점
파일 전체 내용을 한 번에 사용 가능하다. 하지만 큰 파일을 읽을 때는 많은 메모리를 사용하므로 모든 내용이 로드될 때 까지 기다려야 한다.
const fs = require('fs');
//test.txt파일을 읽고 콘솔에 출력
fs.readFile('./test.txt', (err, data) => {
if (err) throw err;
console.log(data);
});
createReadStream의 장점
파일을 작은 단위(chunk)로 나누어 읽느 방식을 사용한다. 메모리를 효율적으로 관리하면서도 대용량 파일에 특별한 장점을 제공한다.
또한, 데이터를 실시간 처리하여 대기시간을 최소화 한다.
createReadStream의 한계
파일 내용을 한꺼번에 사용하는 것이 불가능하다.
const fs = require('fs')
const readStream = fs.createReadStream('./largefile.txt');
활용법: pipe()
스트림의 주요 기능 중 하나. pipe() 를 사용하면 파일의 내용을 직접 HTTP 응답으로 전달 가능하다.
const fs = require('fs');
const http = require('http');
http.createServer(function(req, res) {
const readStream = fs.createReadStream('largefile.txt');
readStream.pipe(res); // pipe()를 활용하여 파이핑
}).listen(8000);
더보기: 스트림(Stream)과 파이핑(Piping) 이해하기
chunk(청크)는 데이터의 작은 조각을 의미한다.
스트림은 Node.js에서 데이터의 흐름을 다루는 중요한 개념이다. 스트림은 데이터를 작은 조각으로 분할하여 처리한다. 이러면 대용량 데이터를 효율적으로 처리할 수 있다. 스트림은 '읽기','쓰기'가 가능하다.
스트림의 출력과 입력을 연결한다는 것은, 한 스트림에서 데이터를 읽어서 그 데이터를 다른 스트림에 쓴다는 것을 의미한다. 이를 '파이핑(Piping)'이라고 하며, Node.js의 pipe함수를 사용하여 수행할 수 있다.
예를 들어, createReadStream을 사용하여 파일에서 데이터를 읽는 스트림을 생성하고, 다른 스트림의 입력으로 연결한다면 파일에서 읽은 데이터가 다른 스트림에 쓰여진다.
const fs = require('fs');
const readStream = fs.createReadStream('input.txt'); // 내용이 있는 txt파일
const writeStream = fs.createWriteStream('output.txt'); // 내용이 없는 txt 파일
readStream.pipe(writeStream); // readStream의 출력을 writeStream의 입력으로 연결함
이 코드는 'input.txt' 에서 읽은 데이터를 'output.txt' 파일에 쓰는 것이다. 결과적으로 input.txt의 내용이 output.txt파일에 복사되었다.
이는 대용량 파일을 효율적으로 처리하는 데 매우 유용하다.
'BE > NodeJS' 카테고리의 다른 글
[Node.js] 유효성 검사(Validation), express-validator 사용법 (0) | 2023.05.28 |
---|---|
[Node] findOne 메소드와 조건추가 이해하기 (0) | 2023.05.15 |
[Node] findAll 메소드 활용하여 Database 조회하기 (0) | 2023.05.15 |
[Node] mySQL과 Sequelize를 이용한 데이터베이스 설정 (0) | 2023.05.14 |
[Express] 라우팅 메소드 put과 delete 이해와 예시 (0) | 2023.05.13 |