이 노트는 “Node.js 교과서”를 공부하면서 기록되었다.
Node.js의 파일 시스템 모듈은 컴퓨터에 있는 파일 시스템이 작동하게 한다. 파일의 생성, 삭제, 읽기, 쓰기 등을 수행할 수 있으며, 폴더를 생성하고 삭제한다.
const fs = require('fs');
파일 시스템 모듈은 ‘fs’가 가지고 있다. require로 불러서 사용한다.
const fs = require('fs');
// 비동기
fs.readFile('hello.wav',(err,data)=>{
if(err){
throw err;
}
console.log(data);
})
//동기
const text = fs.readFileSync('hello.wav');
console.log(text);
비동기적 읽기는 fs.readFile(file path, [options], callback) 형태로 작성하며, 동기적 읽기는 fs.readFileSync(file path, [options]) 형태로 작성한다.
비동기적 읽기는 파일을 읽어오는 동안 다른 작업이 수행 가능하다.
하지만 동기적 읽기 경우는 파일을 읽는 동안 다른 작업을 처리하지 않는다.
const fs = require('fs');
const text = 'write Test'
// 비동기
fs.writeFile('hello.txt',text,'utf-8',(err,data)=>{
if(err){
throw err;
}
console.log(data);
})
//동기
fs.writeFileSync('hello.txt0,text','utf-8')
비동기적 쓰기는 fs.readFileSync(file path, [options]) 형태로 작성하며,
동기적 쓰기는 fs.writeFileSync(file path, data, [options]) 형태로 작성한다.
그런데 fs 모듈로 파일을 읽어 콘솔에 출력해보면
이런 형태로 뜬다. 나는 분명 txt 파일을 읽어왔는데 여기 있는 Buffer는 무엇인가?
fs 모듈로 파일을 읽어올 때 Buffer 형식으로 출력되었었다. 노드는 파일을 읽어 올 때에 메모리에 파일의 크기만큼 공간을 확보하는데 여기서 메모리에 저장된 데이터를 Buffer라고 한다. 데이터를 조각(chunk) 내어서 buffer에 채운 후 꽉 차면 Buffer를 통째로 옮기고 새 Buffer에 데이터 조각을 다시 채운다. 이렇게 조각들을 Buffer에 채우는 일을 버퍼링이라고 한다. 영상을 재생할 수 있을 때까지 데이터를 모으는 방식이다.
버퍼는 모든 내용을 버퍼에 다 쓰고 나서 다음 동작으로 넘어가기 때문에 데이터 크기가 커지면 빠른 처리가 어려울 수 있다.
Stream
때문에 나온 방식이 바로 Stream 이다. Stream은 버퍼의 크기를 작게 만들어서 여러 번에 나누어 보내는 방식으로 동작한다.
데이터를 전송하는 주체에서 수신자 까지 영상 데이터를 조금씩 전송하는 방식이다.