Will find a way

스트림(Stream) 사용 예제 본문

BackEnd/NodeJs

스트림(Stream) 사용 예제

Jaka_Park 2024. 6. 12. 16:06

Node.js에서 파일 시스템 모듈(fs)과 스트림 모듈을 사용하여, 파일 'test.txt'를 읽고, 그 내용을 대문자로 변환한 후, 'test2.txt'라는 새로운 파일에 저장하는 예제.

 

// 1. 필요한 모듈 로드
// 'stream' 모듈에서 'Transform' 객체를 가져온다.
// 'Transform' 스트림은 입력 데이터를 받아 변환 후 출력할 수 있는 스트림
// 'fs' 모듈은 파일 시스템을 조작하기 위해 사용되며, 여기서는 파일을 읽고 쓰는데 사용된다.

const { transform } = require("stream");
const fs = require("fs");

// 2. 청크 크기 설정
// 청크 크기를 설정한다. 이 예제에서는 64Kb로 설정했다.
// 스트림은 데이터를 일정크기(청크)로 나누어서 처리

const chunkSize = 64 * 1024;

// 3. Transform 스트림 생성
// Transform 클래스를 사용하여 새로운 변환 스트림을 생성한다.
// highWaterMark 옵션은 스트림이 처리할 최대 청크 크기를 설정한다.
// transform 메서드는 스트림이 데이터를 변환할 때 호출된다. 여기서는 입력 데이터를 문자열로
// 변환한 후 대문자로 변환하고, 'this.push'를 사용하여 변환된 데이터를 출력 스트림에 전달.
// 변환이 완료되면 callback 함수를 호출하여 다음 청크를 처리할 수 있도록 한다.

const transformData = new Transform({
  highWaterMark: chukSize,
  transform(chunk, en, callback){
    this.push(chunk.toString().toUpperCase());
  }
  callback();
});

// 4. 읽기 스트림 생성
// fs.createReadStream 메서드를 사용하여 파일 'test.txt'에서 데이터를 읽기 위한 스트림을 생성한다.
// highWaterMark 옵션을 사용하여 읽기 스트림의 청크 크기를 설정한다.

const test = fs.createReadStream('test.txt', { highWaterMark: chunkSize });

// 5. 쓰기 스트림 생성
// fs.createWriteStream 메서드를 사용하여 파일 test2.txt에 데이터를 쓰기위한 스트림을 생성한다.
const test2 = fs.createWriteStream('test2.txt`);

// 6. 스트림 파이프라인 구성
// pipe 메서드를 사용하여 스트림을 연결
// test 읽기 스트림의 데이터를 transformData 스트림으로 전달하고
// 변환된 데이터를 test2 쓰기 스트림으로 전달한다.
// test.txt의 내용이 대문자로 변환되어 test2.txt에 저장된다.

test.pipe(transform).pipe(test2);