본문 바로가기

Node.js/3. 기본객체

3-4 stream

Stream은 데이터의 읽기 및 쓰기를 효율적으로 처리하기 위한 추상화된 인터페이스입니다. 대규모 데이터를 메모리에 한 번에 로드하지 않고, 조각(chunk) 단위로 처리할 수 있도록 돕습니다.


주요 스트림 타입

  1. Readable: 데이터 소스로부터 데이터를 읽는 스트림
  2. Writable: 데이터를 목적지로 쓰는 스트림
  3. Duplex: 읽기와 쓰기를 동시에 수행하는 스트림 (예: TCP 소켓)
  4. Transform: 입력 데이터를 처리하여 출력으로 변환하는 스트림 (예: 압축, 암호화)

 

1. Readable Stream (파일 읽기)

const fs = require('fs');

const readableStream = fs.createReadStream('input.txt', { encoding: 'utf8', highWaterMark: 16 });

readableStream.on('data', (chunk) => {
    console.log('Received chunk:', chunk);
});

readableStream.on('end', () => {
    console.log('No more data to read.');
});

readableStream.on('error', (err) => {
    console.error('Error:', err);
});

 

 

2. Writable Stream (파일 쓰기)

const fs = require('fs');

const writableStream = fs.createWriteStream('output.txt');

writableStream.write('Hello, Stream!\n');
writableStream.write('Writing data in chunks.\n');
writableStream.end('Finished writing data.');

writableStream.on('finish', () => {
    console.log('All data written to file.');
});

writableStream.on('error', (err) => {
    console.error('Error:', err);
});

 

 

3. Duplex Stream (TCP 에코 서버)

const net = require('net');

const server = net.createServer((socket) => {
    console.log('Client connected.');

    socket.on('data', (data) => {
        console.log('Received:', data.toString());
        socket.write(`Echo: ${data}`);
    });

    socket.on('end', () => {
        console.log('Client disconnected.');
    });
});

server.listen(8080, () => {
    console.log('Server is listening on port 8080.');
});

 

 

4. Transform Stream (압축 예제)

const fs = require('fs');
const zlib = require('zlib');

const readableStream = fs.createReadStream('input.txt');
const gzip = zlib.createGzip();
const writableStream = fs.createWriteStream('input.txt.gz');

readableStream.pipe(gzip).pipe(writableStream);

writableStream.on('finish', () => {
    console.log('File successfully compressed.');
});

'Node.js > 3. 기본객체' 카테고리의 다른 글

3-3 node.js fs (파일시스템)  (3) 2025.01.06
3-2 node.js 기본 모듈 리스트  (0) 2025.01.06
3-1 node.js 전역 객체  (0) 2025.01.06