์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋…ธ๋“œ 2] 3์žฅ. ๋…ธ๋“œ ๊ธฐ๋Šฅ ์•Œ์•„๋ณด๊ธฐ (2)

23-24/Node.js 2

by _๋„๋‹ด 2023. 10. 13. 10:00

๋ณธ๋ฌธ

728x90

 

 

๐ŸŒŸ3์žฅ(2) ํ‚ค์›Œ๋“œ๐ŸŒŸ

fs๋ชจ๋“ˆ์˜ CRUD

๋™๊ธฐ๋ฉ”์„œ๋“œ

๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ

๋™๊ธฐ-๋ธ”๋กœํ‚น ๋ฐฉ์‹๊ณผ ๋น„๋™๊ธฐ-๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹

Buffer

Stream

 

 

 

 

3.6 ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผํ•˜๊ธฐ

 

fs ๋ชจ๋“ˆ : ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ ๋ชจ๋“ˆ (ํŒŒ์ผ ์ƒ์„ฑ, ์‚ญ์ œ, ์ฝ๊ธฐ, ์“ฐ๊ธฐ | ํด๋” ์ƒ์„ฑ, ์‚ญ์ œ). ์ฝœ๋ฐฑ ํ˜•์‹ ๋ชจ๋“ˆ

 

์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์ฐจ์ด์  : ์›น์—์„œ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ ๋Œ€๋ถ€๋ถ„ ๊ธˆ์ง€

 

 

 

์•„๋ž˜์˜ ๋‘ ๊ฐ€์ง€ ํŒŒ์ผ์„ ํ†ตํ•ด fs ๋ชจ๋“ˆ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ์ตํžˆ๊ธฐ (์ฝ๊ธฐ):

 

// readme.txt

์ง์„ ์ฝ๊ฑฐ๋ผ
 
// readFile.js

const fs = require('fs');

fs.readFile('./readme1.txt', (err, data) => {
  if (err) {
    throw err;
  }
  console.log(data);
  console.log(data.toString());
});
 

๋‘ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ณ  js๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋‚˜์˜จ๋‹ค.

 

 

์œ„์˜ js ํŒŒ์ผ์„ ์„ค๋ช…ํ•˜์ž๋ฉด,

1) ๋ชจ๋“ˆ์„ ๋ถ€๋ฅด๊ณ ,

2) ์ฝ์„ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ(์ฝ˜์†” ๊ธฐ์ค€)๋ฅผ ์ง€์ •ํ•œ๋‹ค.

3) ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ ์ธ์ˆ˜๋กœ ๊ฐ™์ด ๋„ฃ๋Š”๋‹ค

4) ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์—๋Ÿฌ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.

 

 

์œ„์˜ ํ„ฐ๋ฏธ๋„์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜จ ๊ฒฝ์šฐ.

 

 

 

๋ฒ„ํผ : readFile์˜ ๊ฒฐ๊ณผ๋ฌผ ์ œ๊ณต ํ˜•์‹. ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ. ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ์Œ. ์ปดํ“จํ„ฐ๋งˆ๋‹ค ๋‹ค๋ฆ„.

 

 

 

 

 

 

ํ”„๋กœ๋ฏธ์Šค ํ˜•์‹์œผ๋กœ ๋ฐ”๊พผ fs ๋ชจ๋“ˆ :

const fs = require('fs').promises;

fs.readFile('./readme.txt')
.then((data) => {
    console.log(data);
    console.log(data.toString());
  })
  .catch((err) => {
    console.error(err);
  });
 

 

* promises ์†์„ฑ์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

* . ๋งˆ์นจํ‘œ๋ฅผ ํ™œ์šฉํ•œ๋‹ค

 

 

 

 

์•„๋ž˜์˜ ํŒŒ์ผ์„ ํ†ตํ•ด fs ๋ชจ๋“ˆ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ์ตํžˆ๊ธฐ (์ƒ์„ฑ, ์“ฐ๊ธฐ):

 

const fs = require('fs');

fs.writeFile('./writeme.txt', '๊ธ€์ด ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค', (err) => {
  if (err) {
    throw err;
  }
  fs.readFile('./writeme.txt', (err, data) => {
    if (err) {
      throw err;
    }
    console.log(data.toString());
  });
});
 

 

์‹คํ–‰ํ•˜๋ฉด ํ„ฐ๋ฏธ๋„์— ์•„๋ž˜์™€ ๊ฐ™์€ ์ถœ๋ ฅ๊ฐ’ ํ™•์ธ ๊ฐ€๋Šฅ

 

์‹ค์ œ๋กœ writeme.txt ํŒŒ์ผ ์ƒ์„ฑ, ์ฝ๊ธฐ ๊ฐ€๋Šฅ.

 

 

 

 

 

 

 

 


 

 

3.6.1 ๋™๊ธฐ ๋ฉ”์„œ๋“œ์™€ ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ

 

 

๋™๊ธฐ ๋ฐฉ์‹ : fs ๋ชจ๋“ˆ, readFileSync, writeFileSync ๋“ฑ ~Sync ๋ฉ”์„œ๋“œ (์ดˆ๊ธฐํ™”ํ•  ๊ฒฝ์šฐ)

 

๋น„๋™๊ธฐ ๋ฐฉ์‹ : setTimeout, process.nextTick ๋“ฑ์˜ ๋Œ€๋ถ€๋ถ„

 

 

 

 

 

์•„๋ž˜์˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•œ ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ ๋ฐฉ์‹ ๊ด€์ฐฐ:

// readme2.txt

์ €๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ์–ด๋ณด์„ธ์š”.
 
// async.js

const fs = require('fs');

console.log('์‹œ์ž‘');
fs.readFile('./readme2.txt', (err, data) => {
  if (err) {
    throw err;
  }
  console.log('1๋ฒˆ', data.toString());
});
fs.readFile('./readme2.txt', (err, data) => {
  if (err) {
    throw err;
  }
  console.log('2๋ฒˆ', data.toString());
});
fs.readFile('./readme2.txt', (err, data) => {
  if (err) {
    throw err;
  }
  console.log('3๋ฒˆ', data.toString());
});
console.log('๋');
 

 

์œ„์˜ ํŒŒ์ผ ์‹คํ–‰ ๊ฒฐ๊ณผ

๋ฐ˜๋ณต ์‹คํ–‰ ๋•Œ๋งˆ๋‹ค 3-5 ๋ฒˆ์งธ ์ค„ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง

 

 

์‹คํ–‰ ์ˆœ์„œ:

1) ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ํ•ด๋‹น ํŒŒ์ผ ์ฝ๊ธฐ ์š”์ฒญ

2) ๋‹ค์Œ ์ž‘์—…์œผ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ

3) ๋‚˜์ค‘์— ์ฝ๊ธฐ๊ฐ€ ์™„๋ฃŒ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ๊ฐ€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์— ์•Œ๋ฆผ (๋ฐฑ๊ทธ๋ผ์šด๋“œ๋Š” ์„ธ ๊ฐœ๋ฅผ ๊ฑฐ์˜ ๋™์‹์— ์‹คํ–‰)

4) ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๊ทธ๋•Œ ๋“ฑ๋กํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์‹คํ–‰

 

์žฅ์  :

I/O ์š”์ฒญ์ด ๋งŽ์ด ๋“ค์–ด์™€๋„ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์š”์ฒญ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ž„, ์ดํ›„ ์ƒˆ๋กœ์šด ์š”์ฒญ ๊ณ„์† ๋ฐ›์Œ.

 

 

 

 

***NOTE***

  • ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ : ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ์™„๋ฃŒ ํ™•์ธ ์—ฌ๋ถ€
  • ๋ธ”๋กœํ‚น๊ณผ ๋…ผ๋ธ”๋กœํ‚น : ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ return ๋˜๋Š”์ง€ ์—ฌ๋ถ€

 

๋…ธ๋“œ์˜ ๊ฒฝ์šฐ, ๋™๊ธฐ-๋ธ”๋กœํ‚น ๋ฐฉ์‹๊ณผ ๋น„๋™๊ธฐ-๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹์ด ๋Œ€๋ถ€๋ถ„. ๋‚˜๋จธ์ง€๋Š” ๊ฑฐ์˜ ์—†์Œ.

  • ๋™๊ธฐ-๋ธ”๋กœํ‚น ๋ฐฉ์‹ : ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€ ๊ณ„์† ํ™•์ธ. ํ˜ธ์ถœ ํ•จ์ˆ˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ์™„๋ฃŒ ํ›„ return
  • ๋น„๋™๊ธฐ-๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹ : ํ˜ธ์ถœ ํ•จ์ˆ˜ ๋ฐ”๋กœ return, ๋‹ค์œผ ใ…์ž‘์—…์œผ๋กœ. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€๋Š” ๋‚˜์ค‘์— ๋ฐฑ ๊ทธ๋ผ์šด๋“œ์—์„œ ๋๋‚ฌ๋‹ค๊ณ  ์•Œ๋ฆฌ๋ฉด ๊ทธ ๋•Œ ์ฒ˜๋ฆฌ (์œ„์˜ ์˜ˆ์‹œ ์‚ฌ๋ก€)

 

 

 

๋™๊ธฐ ๋ฐฉ์‹์„ ์ด์šฉํ•ด ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•  ๋•Œ ์ฝ”๋“œ :

// sync.js

const fs = require('fs');

console.log('์‹œ์ž‘');
let data = fs.readFileSync('./readme2.txt');
console.log('1๋ฒˆ', data.toString());
data = fs.readFileSync('./readme2.txt');
console.log('2๋ฒˆ', data.toString());
data = fs.readFileSync('./readme2.txt');
console.log('3๋ฒˆ', data.toString());
console.log('๋');
 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

 

์œ„์˜ ๋ฐ˜๋ณต์‹œ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ์ฝ”๋“œ์™€์˜ ์ฐจ์ด์  :

  • readFile -> readFileSync ๋ฉ”์„œ๋“œ(์ฝœ๋ฐฑํ•จ์ˆ˜ X, ์ง์ ‘ return ๊ฐ’ ๋ฐ›๊ธฐ. ๋ฐ”๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฒฐ๊ณผ ๊ฐ€์ ธ์˜ด)
  • readFileSync ๋ฉ”์„œ๋“œ๋กœ ์ธํ•ด ๋งค์šฐ ๋งŽ์€ ์š”์ฒญ์ด ๋“ค์–ด์šธ ๊ฒฝ์šฐ ์„ฑ๋Šฅ์— ๋ฌธ์ œ ๋ฐœ์ƒ (๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์‹œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐ๋งŒ ํ•  ์ˆ˜ ์žˆ์Œ - ๋น„ํšจ์œจ์ )
  • ๊ฒฐ๊ตญ, readFileSync ๋ณด๋‹ค fs ๋ฉ”์„œ๋“œ ์ถ”์ฒœ. ๋” ํšจ์œจ์ ์ด๋ฏ€๋กœ.

 

 

 

 

 

๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ์ด์šฉํ•ด ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•  ๋•Œ ์ฝ”๋“œ :

 

// asyncOrder.js


const fs = require('fs');

console.log('์‹œ์ž‘');
fs.readFile('./readme2.txt', (err, data) => {
  if (err) {
    throw err;
  }
  console.log('1๋ฒˆ', data.toString());
  fs.readFile('./readme2.txt', (err, data) => {
    if (err) {
      throw err;
    }
    console.log('2๋ฒˆ', data.toString());
    fs.readFile('./readme2.txt', (err, data) => {
      if (err) {
        throw err;
      }
      console.log('3๋ฒˆ', data.toString());
      console.log('๋');
    });
  });
});
 

readFile ์ฝœ๋ฐฑ ๋‹ค์Œ์— '}'๋กœ ๋‹ซ๊ธฐ ์ „, readFile์„ ์ž…๋ ฅ.

 

 

์ฝ˜์†” ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜๋กœ, ๋™๊ธฐ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์™€ ๊ฒฐ๊ณผ๋Š” ๋™์ผ.

 

* ๋‹จ์  : ์ฝœ๋ฐฑ ์ง€์˜ฅ ๋ฐœ์ƒ

 

 

 

 

 

 

์œ„์˜ ๋‹จ์ ์„ asyn/await์™€ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์ด์šฉํ•ด ์–ด๋Š ์ •๋„ ํ•ด๊ฒฐํ•œ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Œ.

 

// asyncOrderPromise.js

const fs = require('fs').promises;

console.log('์‹œ์ž‘');
fs.readFile('./readme2.txt')
  .then((data) => {
    console.log('1๋ฒˆ', data.toString());
    return fs.readFile('./readme2.txt');
  })
  .then((data) => {
    console.log('2๋ฒˆ', data.toString());
    return fs.readFile('./readme2.txt');
  })
  .then((data) => {
    console.log('3๋ฒˆ', data.toString());
    console.log('๋');
  })
  .catch((err) => {
    console.error(err);
  });
 

 

์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ์œ„์˜ ์‚ฌ๋ก€์™€ ๋™์ผํ•จ.

 

 

* ์žฅ์  : ๋น„๋™๊ธฐ, ํ”„๋กœ๋ฏธ์Šค ๋ฐฉ๋ฒ• ์ž‘์„ฑ, ์ฝœ๋ฐฑ ์ง€์˜ฅ ํ•ด๊ฒฐ

 

 


 

 

3.6.2 ๋ฒ„ํผ์™€ ์ŠคํŠธ๋ฆผ ์ดํ•ดํ•˜๊ธฐ

 

 

๋ฒ„ํผ์ŠคํŠธ๋ฆผ์˜ ๋‚ด์šฉ์„ ์‚ฌ๋žŒ์ด์•Œ์•„๋ณด๋ ค๋ฉด string์œผ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ?

-> data ๊ฐ€ ๋ฒ„ํผ์ด๊ธฐ ๋•Œ๋ฌธ!

 

 

ํŒŒ์ผ ์ฝ๊ธฐ ์“ฐ๊ธฐ ๋ฐฉ์‹ :

1) ๋ฒ„ํผ ์ด์šฉ

์˜์ƒ์„ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์œผ๋Š” ๋™์ž‘

 

2) ์ŠคํŠธ๋ฆผ ์ด์šฉ

์ „์†ก ์ปดํ“จํ„ฐ์—์„œ ์ˆ˜์‹  ์ปดํ“จํ„ฐ๋กœ ์˜์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๊ธˆ์”ฉ ์ „์†ก

* ์ŠคํŠธ๋ฆผ ๊ณผ์ •์—์„œ ๋ฒ„ํผ ์ด์šฉ ๊ฐ€๋Šฅ(๋„ˆ๋ฌด ๋Š๋ฆฐ ์ „์†ก ์†๋„ ๋ณด์™„ ๋“ฑ)

 

 

 

๋…ธ๋“œ์˜ ํŒŒ์ผ ์ฝ๊ธฐ:

ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ํŒŒ์ผ ํฌ๊ธฐ๋งŒํผ์˜ ๊ณต๊ฐ„ ๋งˆ๋ จ

ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ

์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ ์กฐ์ž‘

 

 

๋…ธ๋“œ์˜ ๋ฒ„ํผ์™€ ์ŠคํŠธ๋ฆผ:

1) ๋ฒ„ํผ : readFile ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ฝ์€ ํŒŒ์ผ์˜ ํ˜•์‹.

๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ. ์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก ์ „์— ์–ด๋Š ๊ณต๊ฐ„์— ๋‹ด๊ฒจ์žˆ์„ ๋•Œ, ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋ผ๊ณ  ํ•œ๋‹ค

 

2) ์ŠคํŠธ๋ฆผ :

 

 

 

Buffer class : ๋ฒ„ํผ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ๋Š” ํด๋ž˜์Šค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ ์ œ๊ณต

 

  • from(๋ฌธ์ž์—ด): ๋ฌธ์ž์—ด์„ ๋ฒ„ํผ๋กœ ๋ฐ”๊ฟˆ. length ์†์„ฑ = ๋ฒ„ํผ์˜ ํฌ๊ธฐ. ๋ฐ”์ดํŠธ ๋‹จ์œ„.
  • toString(๋ฒ„ํผ): ๋ฒ„ํผ๋ฅผ ๋‹ค์‹œ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟˆ. ์ด๋•Œ base64๋‚˜ hex๋ฅผ ์ธ์ˆ˜๋กœ ๋„ฃ์œผ๋ฉด ํ•ด๋‹น ์ธ์ฝ”๋”ฉ์œผ๋กœ๋„ ๋ณ€ํ™˜.
  • concat(๋ฐฐ์—ด): ๋ฐฐ์—ด ์•ˆ์— ๋“  ๋ฒ„ํผ๋“ค์„ ํ•˜๋‚˜๋กœ ํ•ฉ์นจ.
  • alloc(๋ฐ”์ดํŠธ): ๋นˆ ๋ฒ„ํผ๋ฅผ ์ƒ์„ฑ. ๋ฐ”์ดํŠธ๋ฅผ ์ธ์ˆ˜๋กœ ๋„ฃ์œผ๋ฉด ํ•ด๋‹น ํฌ๊ธฐ์˜ ๋ฒ„ํผ๊ฐ€ ์ƒ์„ฑ.

 

 

 

const buffer = Buffer.from('์ €๋ฅผ ๋ฒ„ํผ๋กœ ๋ฐ”๊ฟ”๋ณด์„ธ์š”');
console.log('from():', buffer);
console.log('length:', buffer.length);
console.log('toString():', buffer.toString());

const array = [Buffer.from('๋„์—„ '), Buffer.from('๋„์—„ '), Buffer.from('๋„์–ด์“ฐ๊ธฐ')];
const buffer2 = Buffer.concat(array);
console.log('concat():', buffer2.toString());

const buffer3 = Buffer.alloc(5);
console.log('alloc():', buffer3);
 

 

 

์ฝ˜์†” ๊ฒฐ๊ณผ

 

* ๋‹จ์  : ํŒŒ์ผ์˜ ์šฉ๋Ÿ‰์— ๋งž์ถฐ์„œ ํ•ด๋‹น ํฌ๊ธฐ์˜ ๋ฒ„ํผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋งŒ๋“ค์–ด์•ผ ํ•จ. ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ. (์„œ๋ฒ„ ๋“ฑ)

* ๋‹จ์  : ๋ชจ๋“  ๋‚ด์šฉ์„ ๋ฒ„ํผ์— ๋‹ค ์ž‘์„ฑํ•œ ํ›„ ๋‹ค์Œ ๋™์ž‘์œผ๋กœ ์ง„ํ–‰. ๋งค๋ฒˆ ์ „์ฒด ์šฉ๋Ÿ‰์˜ ๋ฒ„ํผ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•ด ์‹œ๊ฐ„ ์†Œ์š”

 

 

 

Buffer ํ•ด๊ฒฐ : ์ŠคํŠธ๋ฆผ

-> ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ๋งŒ๋“ค๊ธฐ

-> ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ์— ๊ฑธ์ณ ๋‚˜๋ˆ  ๋ณด๋‚ด๊ธฐ

 

 

 

(๋ฒ„ํผ) 100mb ํŒŒ์ผ ์ „์†ก -> ๋ฉ”๋ชจ๋ฆฌ 100mb ํ™•๋ณด -> ๋ฒ„ํผ๋กœ 100mb ์˜ฎ๊น€

 

 

(์ŠคํŠธ๋ฆผ) 100bm ํŒŒ์ผ์„ 1mb๋กœ 100๋ฒˆ ๋‚˜๋ˆ  ์ „์†ก -> ๋ฉ”๋ชจ๋ฆฌ ๊ฐ๊ฐ 1mb ํ™•๋ณด -> ๋ฒ„ํผ๋กœ 1mb ์˜ฎ๊น€ -> ๋‹ค์Œ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ๊ฐ 1mb ํ™•๋ณด -> ๋ฒ„ํผ๋กœ 1mb ์˜ฎ๊น€ -> ..... " 100๋ฒˆ ๋ฐ˜๋ณต"

 

 

 

 

 

 

 

 

createReadStream์˜ ์˜ˆ์ œ :

 

 

// readme3.txt

์ €๋Š” ์กฐ๊ธˆ์”ฉ ์กฐ๊ธˆ์”ฉ ๋‚˜๋ˆ ์„œ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋ˆ ์ง„ ์กฐ๊ฐ์„ chunk๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
 
const fs = require('fs');

const readStream = fs.createReadStream('./readme3.txt', { highWaterMark: 16 });
const data = [];

readStream.on('data', (chunk) => {
  data.push(chunk);
  console.log('data :', chunk, chunk.length);
});

readStream.on('end', () => {
  console.log('end :', Buffer.concat(data).toString());
});

readStream.on('error', (err) => {
  console.log('error :', err);
});
 

 

 

 

 

 

์ฝ˜์†” ์ถœ๋ ฅ ๊ฒฐ๊ณผ

 

 


์ถœ์ฒ˜: ์กฐํ˜„์˜, ใ€ŽNode.js ๊ต๊ณผ์„œใ€ ๊ฐœ์ •ํŒ 3ํŒ, ๊ธธ๋ฒ—(2022), 3-6์žฅ.

Node.js #2 

Editor : ๋ผ๋งˆ

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ