유튜브의 The Net Ninja의 Node.js Crash Course를 수강하면서 Node.js의 File System 및 Stream & Buffers를 학습한 내용을 정리해보았습니다.
Node.js는 기본적으로 내장 모듈들을 가지고 있으며 그중 하나가 File System입니다.
File System은 다음과 같이 활용할 수 있습니다.
//1. Reading Files without option
const fs = require("fs");
fs.readFile("./docs/blog.md", (err, data) => {
console.log(data);
});
/*expected output
<Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64 0a>
*/
fs.readFile 메서드는 (파일 경로, 파일 경로에 대한 옵션, 콜백 함수를 인자값으로 받음fs.readFile은 위 예시와 같이 옵션이 없는 경우 파일을 Raw Buffer 형태로 해당 File의 값들을 Read 할 수 있음//2-1. Reading Files with option(type string)
const fs = require("fs");
fs.readFile("./docs/blog.md", 'utf-8' (err, data) => {
console.log(data);
});
/*expected output
"Hello World"
*/
//2-2. Reading files with option(type obj)
const fs = require("fs");
let options = {
encoding: "utf8", // UTF-8이라는 인코딩 방식으로 엽니다
flag: "r", // 읽기 위해 엽니다
};
fs.readFile("./docs/blog.md", options, (err, data) => {
console.log(data);
});
//1. Write File
fs.writeFile("./docs/blog1.txt", "hello again", () => {
console.log("fie was written");
});
fs.writeFile 메서드는 인자값으로 "파일 경로", "입력할 텍스트" 및 "콜백" 함수를 입력 받음fs.writeFile 메서드는 ./docs/blog1.txt 파일이 존재할 경우 파일 전체를 "hello again"으로 Overwrite 함./docs/blog1.txt 파일이 존재하지 않을 경우 "hello again"이 적힌 ./docs/blog1.txt 파일을 생성(단 해당 파일 경로에 폴더가 존재해야 함) //1. Make Directories
if (!fs.existsSync("./assets")) {
fs.mkdir("./assets", (err) => {
if (err) {
console.log(err);
}
console.log("folder created");
});
}
// 2. Remove Directories
if(fs.existsSync("./assets")) {
fs.rmdir("./assets", (err) => {
if (err) {
console.log(err);
}
console.log("folder deleted");
});
}
fs.existsSync 메서드는 ./assets 폴더가 존재하는 지 확인함fs.mkdir 메서드는 생성할 폴더(경로)와 콜백 함수를 인자값으로 받으며./assets 폴더를 생성 함fs.rmdir 메서드는 제거할 폴더(경로)와 콜백 함수를 인자값으로 받으며./assets 폴더를 제거 함//1. Delete File
if (fs.existsSync("./docs/deleteme.txt")) {
fs.unlink("./docs/deleteme.txt", (err) => {
if (err) {
console.log(err);
} else {
console.log("file deleted");
}
});
}
fs.unlink 메서드는 삭제할 파일(경로)과 콜백 함수를 인자값으로 받으며, 해당 파일을 제거 함
//1. createReadStream & createWriteStream 활용
const fs = require("fs");
const readStream = fs.createReadStream("./docs/blog3.txt", {
encoding: "utf8",
});
const writeStream = fs.createWriteStream("./docs/blog4.txt");
readStream.on("data", (chunk) => {
console.log("--------------New Chunk-------------");
console.log(chunk);
writeStream.write("\nNew CHUNK \n");
writeStream.write(chunk);
});
fs.createReadStream은 데이터를 가져올 파일의 경로와 옵션 등을 인자로 받음on은 event listener라고 생각하면 되며, 특정 용량의 버퍼(chunk)를 받을 때마다 콜백 함수를 실행할 수 있음 fs.createWriteStream은 데이터를 Write할 스트림을 생성하며, 스트리밍을 통해 데이터를 받을 파일의 경로와 옵션을 인자값으로 받음 writeStream.write을 통해 readStream의 Chunk 데이터들이 차례대로 writeStream에 전달되어 적힘.