Node.js파일과 스트림

zlib 압축 기본

Node.js `zlib`로 gzip 압축을 붙일 때 스트림과 함께 읽는 기본 흐름을 정리합니다.

마지막 수정 2026년 3월 21일

기본 패턴

javascript
import { createReadStream, createWriteStream } from "node:fs";
import { createGzip } from "node:zlib";
import { pipeline } from "node:stream/promises";

await pipeline(
  createReadStream("app.log"),
  createGzip(),
  createWriteStream("app.log.gz"),
);

설명

  • zlib는 Node.js에서 gzip, deflate, brotli 같은 압축을 처리할 때 쓰는 표준 라이브러리입니다.
  • 큰 파일을 다룰 때는 문자열 전체를 메모리에 올리기보다 스트림과 결합해 흘려 보내는 방식이 훨씬 자연스럽습니다.
  • 로그 보관, 백업 파일 생성, 네트워크 응답 압축처럼 "크기를 줄이는 비용이 가치 있는" 지점에서 주로 사용합니다.
  • 압축은 CPU 비용을 쓰고 용량을 줄이는 교환입니다. 데이터가 작거나 이미 압축된 포맷이면 이득이 거의 없을 수도 있습니다.
  • pipeline()을 함께 쓰면 중간 스트림에서 에러가 나도 한 곳에서 실패를 잡기 쉬워서 실전 코드가 훨씬 안정적입니다.

짧은 예제

javascript
import { gzipSync } from "node:zlib";

const compressed = gzipSync(Buffer.from("hello"));
console.log(compressed.length);

빠른 정리

항목설명
createGzip()gzip 스트림 생성
pipeline()스트림 연결과 에러 전파
압축 이점저장 공간 절약, 전송량 감소
압축 비용CPU 사용량 증가

주의할 점

압축은 항상 이득이 나는 최적화가 아닙니다. 응답 크기, CPU 예산, 이미 압축된 파일 여부를 함께 보고 적용해야 실제 성능 개선으로 이어집니다.

참고 링크

2 sources