ํ์ผ ์์คํ
Node.js์์ ํ์ผ ์์คํ
์ ๋ค๋ฃจ๊ธฐ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก fs (File System) ๋ชจ๋์ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ชจ๋์ ํ์ผ ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์ญ์ , ์ด๋, ์ด๋ฆ ๋ณ๊ฒฝ ๋ฑ ๋ค์ํ ํ์ผ ์์คํ
์์
์ ์ํํ ์ ์๊ฒ ํด์ค๋๋ค.
fs
: ํ์ผ ์์คํ
์์
์ ์ํํ๊ธฐ ์ํ ๋ชจ๋
๋ฌธ๋ฒ
const fs = require('fs');
JavaScript
๋ณต์ฌ
fs ๋ชจ๋ ์ฃผ์ ๋ฉ์๋ ๋ฐ ์์ฑ
๋ฉ์๋ ๋ฐ ์์ฑ | ์ค๋ช
|
fs.readFile() | ํ์ผ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ์ต๋๋ค. |
fs.writeFile() | ํ์ผ์ ๋ด์ฉ์ ๋น๋๊ธฐ์ ์ผ๋ก ์๋๋ค. |
fs.unlink() | ํ์ผ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ญ์ ํฉ๋๋ค. |
fs.mkdir() | ๋๋ ํ ๋ฆฌ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์์ฑํฉ๋๋ค. |
fs.readdir() | ๋๋ ํ ๋ฆฌ์ ํ์ผ ๋ชฉ๋ก์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ์ด์ต๋๋ค. |
fs.rename() | ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ์ ์ด๋ฆ์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. |
ํ์ผ ์ฝ๊ธฐ (fs.readFile)
โข
ํ์ผ์ ๋ด์ฉ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ์ด์ต๋๋ค.
fs.readFile(path, [options], callback);
JavaScript
๋ณต์ฌ
const fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.error('Error reading file:', err);
return;
}
console.log('File content:', data);
});
JavaScript
๋ณต์ฌ
ํ์ผ ์ฐ๊ธฐ (fs.writeFile)
โข
ํ์ผ์ ๋ด์ฉ์ ๋น๋๊ธฐ์ ์ผ๋ก ์๋๋ค.
fs.writeFile(path, [options], callback);
JavaScript
๋ณต์ฌ
const fs = require('fs');
const contentToWrite = 'Hello, Node.js!';
fs.writeFile('newFile.txt', contentToWrite, 'utf8', (err) => {
if (err) {
console.error('Error writing file:', err);
return;
}
console.log('File has been written.');
});
JavaScript
๋ณต์ฌ
ํ์ผ ์ญ์ (fs.unlink)
โข
ํ์ผ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ญ์ ํฉ๋๋ค.
fs.unlink(path, callback);
JavaScript
๋ณต์ฌ
const fs = require('fs');
fs.unlink('fileToDelete.txt', (err) => {
if (err) {
console.error('Error deleting file:', err);
return;
}
console.log('File has been deleted.');
});
JavaScript
๋ณต์ฌ
๋๋ ํ ๋ฆฌ ์์ฑ (fs.mkdir):
โข
๋๋ ํ ๋ฆฌ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์์ฑํฉ๋๋ค.
fs.mkdir(path, [options], callback);
JavaScript
๋ณต์ฌ
const fs = require('fs');
fs.mkdir('newDirectory', (err) => {
if (err) {
console.error('Error creating directory:', err);
return;
}
console.log('Directory has been created.');
});
JavaScript
๋ณต์ฌ
๋๋ ํ ๋ฆฌ ์ฝ๊ธฐ (fs.readdir):
โข
๋๋ ํ ๋ฆฌ์ ํ์ผ ๋ชฉ๋ก์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ์ด์ต๋๋ค.
fs.readdir(path, [options], callback);
JavaScript
๋ณต์ฌ
const fs = require('fs');
fs.readdir('directoryToRead', (err, files) => {
if (err) {
console.error('Error reading directory:', err);
return;
}
console.log('Files in the directory:', files);
});
JavaScript
๋ณต์ฌ
ํ์ผ ์ด๋ ๋๋ ์ด๋ฆ ๋ณ๊ฒฝ (fs.rename):
โข
ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ์ ์ด๋ฆ์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
fs.rename(oldPath, newPath, callback);
JavaScript
๋ณต์ฌ
const fs = require('fs');
fs.rename('oldName.txt', 'newName.txt', (err) => {
if (err) {
console.error('Error renaming file:', err);
return;
}
console.log('File has been renamed.');
});
JavaScript
๋ณต์ฌ
์ฌ์ฉ ๋ชฉ์
โข
ํ์ผ์ ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์ญ์ ๋ฑ์ ์์
์ ์ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
โข
๋๋ ํ ๋ฆฌ์ ์์ฑ, ์ฝ๊ธฐ, ํ์ผ์ ์ด๋ ๋๋ ์ด๋ฆ ๋ณ๊ฒฝ ๋ฑ ํ์ผ ์์คํ
๊ด๋ฆฌ์ ํ์ฉ๋ฉ๋๋ค.
๋๊ธฐ ๋ฉ์๋์ ๋น๋๊ธฐ ๋ฉ์๋
๋น๋๊ธฐ์ ํ์ผ ์ ๋ ฅ
const fs = require('fs');
console.log('์์');
fs.readFile('./test1.txt', (err, data) => {
if (err) {
throw err;
}
console.log('1๋ฒ', data.toString());
});
fs.readFile('./test2.txt', (err, data) => {
if (err) {
throw err;
}
console.log('2๋ฒ', data.toString());
});
fs.readFile('./test3.txt', (err, data) => {
if (err) {
throw err;
}
console.log('3๋ฒ', data.toString());
});
console.log('๋');
JavaScript
๋ณต์ฌ
๋๊ธฐ์ ํ์ผ ์ ๋ ฅ
const fs = require('fs');
console.log('์์');
let data = fs.readFileSync('./test1.txt');
console.log('1๋ฒ', data.toString());
data = fs.readFileSync('./test2.txt');
console.log('2๋ฒ', data.toString());
data = fs.readFileSync('./test3.txt');
console.log('3๋ฒ', data.toString());
console.log('๋');
JavaScript
๋ณต์ฌ
์์๋ฅผ ์ ์งํ๊ธฐ ์ํ, ์ฝ๋ฐฑ ๊ธฐ๋ฐ ๋น๋๊ธฐ์ ํ์ผ ์ ๋ ฅ
const fs = require('fs');
console.log('์์');
fs.readFile('./test1.txt', (err, data) => {
console.log('1๋ฒ', data.toString());
fs.readFile('./test1.txt', (err, data) => {
console.log('2๋ฒ', data.toString());
fs.readFile('./test1.txt', (err, data) => {
console.log('3๋ฒ', data.toString());
fs.readFile('./test1.txt', (err, data) => {
console.log('4๋ฒ', data.toString());
fs.readFile('./test1.txt', (err, data) => {
console.log('5๋ฒ', data.toString());
fs.readFile('./test1.txt', (err, data) => {
console.log('6๋ฒ', data.toString());
fs.readFile('./test1.txt', (err, data) => {
console.log('7๋ฒ', data.toString());
fs.readFile('./test1.txt', (err, data) => {
console.log('8๋ฒ', data.toString());
fs.readFile('./test1.txt', (err, data) => {
console.log('9๋ฒ', data.toString());
fs.readFile('./test1.txt', (err, data) => {
console.log('10๋ฒ', data.toString());
console.log('๋');
});
});
});
});
});
});
});
});
});
});
JavaScript
๋ณต์ฌ
์ฝ๋ฐฑ์ง์ฅ
: ์ฝ๋ฐฑํจ์ ๊ธฐ๋ฐ, ๋น๋๊ธฐ์ ์์ฒญ์ผ๋ก ์์๋ฅผ ์ ์งํ๋ ค๊ณ ํ ๋, ์ฝ๋ฐฑ์ด ๋๋์ง ์๋ ์ง์ฅ์ด ๋์ด๋ฒ๋ฆฐ๋ค.
์์๋ฅผ ์ ์งํ๊ธฐ ์ํ, Promise ๊ธฐ๋ฐ ๋น๋๊ธฐ์ ํ์ผ ์ ๋ ฅ
const fs = require('fs').promises;
console.log('์์');
fs.readFile('./test1.txt')
.then((data) => {
console.log('1๋ฒ', data.toString());
return fs.readFile('./test2.txt');
})
.then((data) => {
console.log('2๋ฒ', data.toString());
return fs.readFile('./test3.txt');
})
.then((data) => {
console.log('3๋ฒ', data.toString());
console.log('๋');
})
.catch((err) => {
console.error(err);
});
JavaScript
๋ณต์ฌ
๋ฒํผ (Buffer)
์ ์
๋ฒํผ๋ ์ผ๋ จ์ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ์ ์ฅํ๋ ๊ณต๊ฐ์ผ๋ก, ์ฃผ๋ก ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉ๋ฉ๋๋ค. Node.js์์๋ Buffer ํด๋์ค๋ฅผ ์ ๊ณตํ์ฌ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ๊ณ ์กฐ์ํ ์ ์์ต๋๋ค.
๋ฒํผ๋ง
: ๋ฐ์ดํฐ ํ๋ฆ์ ์กฐ์ ํ๊ธฐ ์ํด, ๋ฐ์ดํฐ ์ ์ก์ ํ์ํ ์ต์ํ์ ๋ฐ์ดํฐ๋ฅผ ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅํ๋ ๊ณผ์
์๊ฐํด๋ณด๊ธฐ
โข
์ปดํจํฐ ์ฌ์ - RAM 4GB
1.
์๋ณธ ํ์ผ ์ฉ๋ : 1GB, ๋ฒํผ 1GB, ๋ค์ด๋ก๋ ๋์ ์์ฒญ ๊ฐ๋ฅ ์ฌ์ฉ์ ์ : 4๋ช
2.
์๋ณธ ํ์ผ ์ฉ๋ : 1GB, ๋ฒํผ 1MB, ๋ค์ด๋ก๋ ๋์ ์์ฒญ ์ฌ์ฉ์ ์ : 4000๋ช
์ฃผ์ ํน์ง
1.
๊ณ ์ ๋ ํฌ๊ธฐ: ๋ฒํผ๋ ์์ฑ ์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋๋ฉฐ, ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
2.
์ํ์ค๋ก ๋ฐ์ดํฐ ์ก์ธ์ค: ๋ฒํผ์ ๋ด์ฉ์ ๋ฐ์ดํธ์ ์ํ์ค๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ๋ฐ์ดํธ๋ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ ๊ทผ๋ฉ๋๋ค.
3.
์ด์ง ๋ฐ์ดํฐ ๋ค๋ฃจ๊ธฐ: ์ฃผ๋ก ํ์ผ์ด๋ ๋คํธ์ํฌ์์ ์ ์ก๋๋ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ฃผ์ ์์ฑ ๋ฐ ๋ฉ์๋
๋ฉ์๋/์์ฑ | ์ค๋ช
|
Buffer.from() | ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ก ์๋ก์ด ๋ฒํผ๋ฅผ ์์ฑํฉ๋๋ค. |
toString() | ๋ฒํผ์ ๋ด์ฉ์ ๋ฌธ์์ด๋ก ๋ณํํฉ๋๋ค. |
concat() | ์ฌ๋ฌ ๋ฒํผ๋ฅผ ํ๋๋ก ํฉ์นฉ๋๋ค. |
Buffer.alloc() | ์ง์ ๋ ํฌ๊ธฐ์ ์๋ก์ด ๋ฒํผ๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํฉ๋๋ค. |
Buffer.from()
// ๋ฌธ์์ด์ ๋ฒํผ๋ก ๋ณํ
const bufferFromStr = Buffer.from('Hello, Buffer!', 'utf8');
// ๋ฐฐ์ด์ ๋ฒํผ๋ก ๋ณํ
const bufferFromArray = Buffer.from([1, 2, 3, 4, 5]);
// ๋ฒํผ๋ฅผ ๋ณต์ฌํ์ฌ ์๋ก์ด ๋ฒํผ ์์ฑ
const bufferCopy = Buffer.from(bufferFromStr);
JavaScript
๋ณต์ฌ
Buffer.toString()
const buffer = Buffer.from('Hello, Buffer!', 'utf8');
// ๋ฒํผ๋ฅผ ๋ฌธ์์ด๋ก ๋ณํ
const bufferToString = buffer.toString('utf8');
console.log(bufferToString); // 'Hello, Buffer!'
JavaScript
๋ณต์ฌ
Buffer.concat()
const buffer1 = Buffer.from('Hello, ');
const buffer2 = Buffer.from('Buffer!');
const concatenatedBuffer = Buffer.concat([buffer1, buffer2]);
console.log(concatenatedBuffer.toString()); // 'Hello, Buffer!'
JavaScript
๋ณต์ฌ
Buffer.alloc()
// 10๋ฐ์ดํธ ํฌ๊ธฐ์ ์ด๊ธฐํ๋ ๋ฒํผ ์์ฑ
const initializedBuffer = Buffer.alloc(10);
// 10๋ฐ์ดํธ ํฌ๊ธฐ์ ๋ฏธ๋ฆฌ ์ง์ ๋ ๊ฐ์ผ๋ก ์ด๊ธฐํ๋ ๋ฒํผ ์์ฑ
const filledBuffer = Buffer.alloc(10, 1); // ๊ฐ ๋ฐ์ดํธ์๋ 1์ด ์ฑ์์ง
JavaScript
๋ณต์ฌ
์คํธ๋ฆผ (Stream)
์ ์
Node.js์ Stream ๋ชจ๋์ ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ชจ๋๋ก, ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ์์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ์ฒ๋ฆฌํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ํจ์จ์ ์ด๋ฉฐ, ๋คํธ์ํฌ๋ ํ์ผ๊ณผ ๊ฐ์ ์
์ถ๋ ฅ ์์
์ ํนํ ์ ์ฉํฉ๋๋ค
๋ฌธ๋ฒ
์คํธ๋ฆผ์ stream ๋ชจ๋์ ํตํด ์ฌ์ฉํ ์ ์์ต๋๋ค.
const stream = require('stream');
JavaScript
๋ณต์ฌ
์ฃผ์ ์์ฑ ๋ฐ ๋ฉ์๋
Readable Stream (์ฝ๊ธฐ ์คํธ๋ฆผ)
์์ฑ ๋๋ ๋ฉ์๋ | ์ค๋ช
|
data | ์ด๋ฒคํธ ํธ๋ค๋ฌ, ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ. |
end | ์ด๋ฒคํธ ํธ๋ค๋ฌ, ์คํธ๋ฆผ์ ๋์ ๋๋ฌํ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ. |
read(size) | ์คํธ๋ฆผ์์ ์ง์ ๋ ํฌ๊ธฐ๋งํผ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. |
Writable Stream (์ฐ๊ธฐ ์คํธ๋ฆผ)
์์ฑ ๋๋ ๋ฉ์๋ | ์ค๋ช
|
write(chunk, encoding, callback) | ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ์๋๋ค. |
end([chunk, encoding, callback]) | ์คํธ๋ฆผ์ ๋์ ๋ํ๋ด๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ์คํธ๋ฆผ์ ์ข
๋ฃํฉ๋๋ค. |
Duplex Stream (์๋ฐฉํฅ ์คํธ๋ฆผ):
Readable๊ณผ Writable์ ๊ฒฐํฉํ ์คํธ๋ฆผ.
์์์ฝ๋
const { Readable, Writable } = require('stream');
// Readable Stream ์์
const readableStream = new Readable({
read(size) {
this.push('Hello, ');
this.push('world!');
this.push(null); // ๋ ์ด์ ๋ฐ์ดํฐ๊ฐ ์์์ ์๋ฆผ
}
});
// Writable Stream ์์
const writableStream = new Writable({
write(chunk, encoding, callback) {
console.log(chunk.toString());
callback();
}
});
readableStream.pipe(writableStream); // Readable ์คํธ๋ฆผ์์ ๋ฐ์ดํฐ๋ฅผ Writable ์คํธ๋ฆผ์ผ๋ก ์ ์ก
JavaScript
๋ณต์ฌ
์ฌ์ฉ ๋ชฉ์
โข
๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: ํ์ผ์ด๋ ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ๋ ์ ์ฉํฉ๋๋ค.
โข
์ค์๊ฐ ๋ฐ์ดํฐ ์ ์ก: ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ๋ค๋ฅธ ์์คํ
์ ์ ์กํ ๋ ์ฌ์ฉํฉ๋๋ค.
โข
๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ: ์คํธ๋ฆผ์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก ์์
์ ์ค๋จํ์ง ์๊ณ ๊ณ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ์ ์์ต๋๋ค.