더북(TheBook)

readme4.txt와 똑같은 내용의 writeme3.txt가 생성되었을 것입니다. 미리 읽기 스트림과 쓰기 스트림을 만들어둔 후 두 개의 스트림 사이를 pipe 메서드로 연결해주면 저절로 데이터가 writeStream으로 넘어갑니다. 따로 on('data')writeStream.write()를 하지 않아도 알아서 전달되므로 편리합니다. 노드 8.5 버전이 나오기 전까지는 이 방식으로 파일을 복사하곤 했습니다. 새로운 파일 복사 방식은 3.6.3절에 나옵니다.

pipe는 스트림 사이에 연결할 수 있습니다. 다음 코드는 파일을 읽은 후 gzip 방식으로 압축하는 코드입니다.

gzip.js

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

const readStream = fs.createReadStream('./readme4.txt');
const zlibStream = zlib.createGzip();
const writeStream = fs.createWriteStream('./readme4.txt.gz');
readStream.pipe(zlibStream).pipe(writeStream);

 

노드에서는 파일을 압축하는 zlib이라는 모듈도 제공합니다. 이 책에서는 많이 사용하지 않으므로 따로 설명하지는 않습니다. 다만 zlib의 createGzip()이라는 메서드가 스트림을 지원하므로 readStreamwriteStream 중간에서 파이핑을 할 수 있습니다. 버퍼 데이터가 전달되다가 gzip 압축을 거친 후 파일로 쓰여집니다.

콘솔

$ node gzip

 

readme4.txt.gz 파일이 생성됩니다.

이렇게 전체 파일을 모두 버퍼에 저장하는 readFile() 메서드와 부분으로 나눠 읽는 createReadStream() 메서드에 대해 알아보았습니다. 이제 나머지 fs 메서드를 살펴보겠습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.