ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๋ฐฉ์‹์—๋Š” ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ŠคํŠธ๋ฆผ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ฒ„ํผ๋ง๊ณผ ์ŠคํŠธ๋ฆฌ๋ฐ์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์ผ์ƒ์ƒํ™œ์—์„œ ๋งŽ์ด ๋“ค์–ด๋ดค์„ ๊ฒƒ์ด๋‹ค. ๋ณดํ†ต ์˜์ƒ์„ ์‹œ์ฒญํ•  ๋•Œ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์šฉ์–ด๋“ค์ด๋‹ค. ์˜์ƒ์„ ๋กœ๋”ฉํ•  ๋•Œ ๋ฒ„ํผ๋ง์„ ํ•œ๋‹ค๊ณ  ํ•˜๊ณ , ์˜์ƒ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์†ก์ถœํ•  ๋•Œ๋Š” ์ŠคํŠธ๋ฆฌ๋ฐํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋ฒ„ํผ๋ง์€ ์˜์ƒ์„ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์œผ๋Š” ๋™์ž‘์ด๊ณ , ์ŠคํŠธ๋ฆฌ๋ฐ์€ ๋ฐฉ์†ก์ธ์˜ ์ปดํ“จํ„ฐ์—์„œ ์‹œ์ฒญ์ž์˜ ์ปดํ“จํ„ฐ๋กœ ์˜์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๊ธˆ์”ฉ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ŠคํŠธ๋ฆฌ๋ฐ์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฒ„ํผ๋ง์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ „์†ก์ด ๋„ˆ๋ฌด ๋Š๋ฆฌ๋ฉด ํ™”๋ฉด์„ ๋‚ด๋ณด๋‚ด๊ธฐ๊นŒ์ง€ ์ตœ์†Œํ•œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์•ผ ํ•˜๊ณ , ์˜์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ์žฌ์ƒ ์†๋„๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ „์†ก๋˜์–ด๋„ ๋ฏธ๋ฆฌ ์ „์†ก๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋…ธ๋“œ์˜ ๋ฒ„ํผ์™€ ์ŠคํŠธ๋ฆผ๋„ ๋น„์Šทํ•œ ๊ฐœ๋…์ด๋‹ค. ํŒŒ์ผ์„ ์ฝ์œผ๋ฉด ๋ฒ„ํผํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ๋…ธ๋“œ๋Š” ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ํŒŒ์ผ ํฌ๊ธฐ๋งŒํผ ๊ณต๊ฐ„์„ ๋งˆ๋ จํ•ด๋‘๋ฉฐ ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ ๋’ค ์‚ฌ์šฉ์ž๊ฐ€ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š”๋ฐ ์ด๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋กœ ๋ฒ„ํผ๋‹ค.

  • ๋ฒ„ํผ๋ž€? ์šฉ๋Ÿ‰์ด ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ํ•œ ๋ฒˆ์— ์ „์†ก์„ ํ•˜์ง€ ๋ชปํ•˜๋‹ˆ๊นŒ ํŠน์ • ๋‹จ์œ„ ๋งŒํผ ๋ฌถ์–ด์„œ ์ „์†ก์„ ํ•œ๋‹ค. ๊ทธ๋•Œ BUFFER์˜ ํฌ๊ธฐ๋งŒํผ BUFFER์— ๋‹ด์•„์„œ ์ „์†กํ•œ๋‹ค. ์ „์†ก ์†๋„ ์ฐจ์ด์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ, ์ž…๋ ฅ ์†๋„์— ๋น„ํ•ด ์ถœ๋ ฅ์†๋„๊ฐ€ ๋Š๋ฆฐ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„.
  • ์ŠคํŠธ๋ฆผ์ด๋ž€? ๋‹ค ์ฐฌ ๋ฒ„ํผ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋“ค์ด ์›€์ง์ผ ์ˆ˜ ์žˆ๋„๋ก ์ค‘๊ฐ„ ๋‹ค๋ฆฌ ์—ญํ• .

 

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๋Š” 1์ดˆ์— 100๊ฐœ์˜ ๋ฐ์ดํ„ฐ, ํ”„๋กœ๊ทธ๋žจ์€ 1์ดˆ์— 5๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•ด๋ณด์ž. ํ”„๋กœ๊ทธ๋žจ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ ์ž…๋ ฅ์žฅ์น˜๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋Œ€๊ธฐ๋ฅผ ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋ผ๋Š” ์ž„์‹œ๊ณต๊ฐ„์— ์ €์žฅํ•ด๋‘๊ณ  ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด๋˜๊ฑฐ๋‚˜ ๋ฒ„ํผ๊ฐ€ ๊ฝ‰์ฐจ๊ฒŒ ๋˜๋ฉด ๋ฒ„ํผ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ „์†ก์„ ํ•œ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด API ํ˜ธ์ถœํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ ์ž…์ถœ๋ ฅ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ณด๋ฉด ์ŠคํŠธ๋ฆผ๊ณผ ๋ฒ„ํผ๋Š” ํ•ญ์ƒ ๊ฐ™์ด ๋ฌถ์—ฌ ๋‹ค๋‹ˆ๋Š”๊ฒƒ์ด ์ข‹์„ ๊ฒƒ๊ฐ™์ง€๋งŒ ๋น ๋ฅธ ๋ฐ˜์‘์ด ์š”๊ตฌ๋˜๋Š” ๊ฒŒ์ž„๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์ด ์ด๋ค„์ง€๋Š” ์ฆ‰์‹œ ์ „์†ก์ด ์ด๋ฃจ์–ด์ ธ ๋น ๋ฅธ ๋ฐ˜์‘ ์†๋„๋ฅผ ๋ณด์—ฌ์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š๋‹ค.

 

์ถœ์ฒ˜ ์ž๋ฃŒ
tcpschool.com/cpp/cpp_io_streamBuffer

 


ํŒŒ์ผ ์ฝ๊ณ  ์“ฐ๊ธฐ์— ๊ด€๋ จ๋œ ๋ฌธ์ œ

ํŒŒ์ผ์„ ์ฝ์–ด 1MB ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑ

const fs = require("fs");
//let data = [];

const LIMIT = 1024*1024;
let read_size = 0;
let count = 1;

let write_stream = fs.createWriteStream('test.txt.' + count);

//๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ
const read_stream = fs.createReadStream('./test2.jpg'); 

read_stream.on('data', function(chunk) {
	read_size += chunk.length;
	
	if (read_size >= LIMIT * count) {
		const now_data = chunk.slice(0, LIMIT - (read_size - chunk.length));
		const next_data = chunk.slice(LIMIT - (read_size - chunk.length));
		write_stream.write(now_data);
		write_stream.end();
		count++;
		write_stream = fs.createWriteStream('test.txt.' + count); 
		write_stream.write(next_data);
		
	} else {
		write_stream.write(chunk);
	}
});

read_stream.on('open', function(chunk) {
	console.log('open');
});

read_stream.on('close', function() {
	write_stream.end();
	console.log('close file');
});

read_stream.on('error', function(err) {
	console.log('error', err);
});

 

๋ถ„ํ• ๋œ ํŒŒ์ผ์„ ์—ฐ์†์œผ๋กœ ์ด์–ด๋ถ™์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑ (ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ๋Š” ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.)

const fs = require("fs");

const files = ['test.txt.1', 'test.txt.2'];

let write_stream = fs.createWriteStream('test222.jpg');

function readAndWrite(idx) {
	if (idx >= files.length) {
		write_stream.end();
		console.log("end");
		return;
	}
	
	const file_path = files[idx];
	//๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ
	const read_stream = fs.createReadStream(file_path); 

	read_stream.on('data', function(chunk) {
		write_stream.write(chunk);
	});

	read_stream.on('open', function(chunk) {
		console.log('open');
	});

	read_stream.on('close', function() {
		console.log('close file');
		readAndWrite(idx + 1);
	});

	read_stream.on('error', function(err) {
		console.log('error', err);
	});
	
}

readAndWrite(0);

 

๋ฐ˜์‘ํ˜•

'Node.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Node.js] IntelliJ์— Node.js ํ™˜๊ฒฝ ์„ค์ •ํ•˜๊ธฐ  (0) 2021.04.08
๋Œ“๊ธ€