-
Node.js 교과서 - 파일 시스템Node.js 2021. 9. 19. 03:33
웹 브라우저에서 자바스크립트 사용할 때는 일부를 제외하고 접근이 금지되어 있다.
const fs = require('fs'); fs.readFile('./readme.txt' , ( err , data ) => { if ( err ) { throw err; } console.log(data); // 버퍼 형식 console.log(data.toString); }
파일의 경로는 node 명령어를 실행하는 콘솔 기준이다.
readFile의 결과 data는 buffer이다.
동기와 비동기 : 백그라운드 작업 완료 확인 여부
블로킹과 논 블로킹 : 함수가 바로 return 되는지 여부
동기-블로킹 방식에서는 백그라운드 작업 완료 여부를 계속 확인하며, 호출한 함수가 바로 return 되지 않고 백그라운드 작업이 끝나야 return 된다.
비동기-논블로킹 방식에서는 백그라운드 작업 완료 여부는 신경쓰지 않고 나중에 백그라운드가 알림을 줄 때 비로소 처리한다.
readFileSync 메서드를 사용하면 동기적으로 작업을 진행한다.
하지만, 백그라운드가 작업하는 동안 메인 스레드는 아무것도 하지 못하고 대기하고 있어야 한다. => 비효율그렇다면 비동기적으로 진행하되 순서를 유지하고 싶다면 콜백에 넣어주면 된다.
버퍼와 스트림
파일을 읽거나 쓰는 방식에는
- 버퍼를 이용하는 방식
- 스트림을 이용하는 방식
이 존재한다.
버퍼
노드는 파일을 읽을 때 메모리에 파일 크기만큼 공간을 마련해두고 파일 데이터를 메모리에 저장한다. 그 데이터가 버퍼이다.
- Buffer.from : 문자열을 버퍼로 바꾼다.
- Buffer.from.length : 버퍼의 크기
- Buffer.from.toString : 다시 문자열로 변환
- Buffer..concat(arr) : arr안에 존재하는 버퍼들을 하나로 합친다.
const buffer = Buffer.from('text'); console.log(buffer) console.log(buffer.toString());
단점 : 모든 내용을 버퍼에 다 쓴 후에야 다음 동작으로 넘어가므로 거의 전체 용량을 버퍼로 처리해야 다음 단계로 넘어갈 수 있었다.
스트림
버퍼의 크기를 작게 만든 후 여러 번으로 나눠 보내는 방식
- createReadStream : 파일을 읽는 메서드
- createWriteStream : 파일을 쓰는 메서드
const fs = require('fs'); const writeStream = fs.createWriteStream('./writeme2.txt'); writeStream.on('finish', () => { console.log('파일 쓰기 완료'); }); writeStream.write('이 글을 쓴다.\n'); writeStream.write('한 번 더 쓴다.'); writeStream.end();
const fs = require('fs'); const readStream = fs.createReadStream('readme4.txt'); const writeStream = fs.createWriteStream('writeme3.txt'); readStream.pipe(writeStream);
스레드풀
비동기 메서드들은 백그라운드에서 실행되고, 실행된 후에는 다시 메인 스레드의 콜백 함수나 프로미스의 then 부분이 실행된다. 스레드풀 덕분에 백그라운드에서 동시에 처리된다.
'Node.js' 카테고리의 다른 글
Node.js - 요청과 응답 (0) 2021.09.24 Node.js 교과서 - 이벤트 이해하기 (0) 2021.09.19 Node.js 교과서 - worker_threads (0) 2021.09.19 Node.js 교과서 - 암호화 (0) 2021.09.19 Node.js 교과서 - path , url , querystring (0) 2021.09.19