기본 패턴
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