#8PerformanceMedium

Compression (CompressionStream API)

Compression — CompressionStream API

브라우저 내장 CompressionStream / DecompressionStream API 를 사용해 클라이언트에서 직접 gzip 압축/해제를 수행하는 헬퍼를 만드세요. localStorage/IndexedDB 저장 전 압축, 큰 텍스트를 서버로 전송하기 전 압축 등에 실제로 쓰는 패턴입니다.

요구사항

  1. compressText(text: string): Promise<Uint8Array> — UTF-8 인코딩 후 gzip 압축
  2. decompressText(bytes: Uint8Array): Promise<string> — gzip 해제 후 UTF-8 디코딩
  3. 라운드 트립 보장: decompressText(await compressText(s)) === s 모든 문자열에 대해
  4. 반복 텍스트는 의미 있게 줄어듦: 같은 문자열을 1000번 반복한 입력은 압축 후 원본보다 훨씬 작음
  5. 빈 문자열, 멀티바이트(한글/이모지) 등 다양한 입력 정상 처리

힌트

const stream = new Blob([data]).stream().pipeThrough(new CompressionStream('gzip'));
const buffer = await new Response(stream).arrayBuffer();
return new Uint8Array(buffer);

해제는 같은 패턴으로 DecompressionStream('gzip') 사용.

학습 포인트

  • CompressionStream / DecompressionStream Web API 의 실제 사용
  • ReadableStream → pipeThrough → Response 패턴 (Web Streams)
  • 클라이언트 측 압축의 실용적 시나리오 (네트워크 전송 + 로컬 저장)
Sandpack 로드 중…