Oh MyUtils

GZIP 압축 & 해제 - Base64 GZIP 인코더 온라인

GZIP으로 텍스트와 파일을 압축 및 해제합니다. Base64 출력, 압축 통계, .gz 파일 다운로드 — 100% 클라이언트 사이드, 서버 전송 없음.

입력
출력
100% 클라이언트 사이드 — 데이터가 브라우저를 벗어나지 않습니다

자주 묻는 질문

GZIP 압축이란 무엇인가요?

GZIP은 DEFLATE 알고리즘(LZ77과 허프만 코딩의 조합)을 기반으로 한 파일 형식 및 압축 알고리즘입니다. 웹에서 가장 널리 사용되는 압축 형식으로, 거의 모든 HTTP 서버와 브라우저가 Content-Encoding: gzip 헤더를 통해 지원합니다. GZIP 파일은 10바이트 헤더, DEFLATE 압축 본문, CRC32 체크섬과 원본 크기를 포함하는 8바이트 푸터로 구성됩니다.

이 도구를 어떻게 사용하나요?

압축 또는 해제 탭을 선택하세요. 압축하려면 입력 영역에 텍스트를 입력하거나 파일을 드래그앤드롭하면 Base64 인코딩된 문자열로 압축 결과가 나타납니다. 복사하거나 .gz 파일로 다운로드할 수 있습니다. 해제하려면 Base64 인코딩된 GZIP 문자열을 붙여넣거나 .gz 파일을 드롭하면 원본 텍스트가 나타납니다.

데이터가 안전한가요? 서버로 전송되나요?

데이터는 100% 안전하며 브라우저를 벗어나지 않습니다. 모든 압축 및 해제는 브라우저의 네이티브 CompressionStream과 DecompressionStream API를 사용하여 완전히 클라이언트 사이드에서 수행됩니다. 어떤 서버로도 데이터가 전송되지 않아 API 키, 인증 토큰, 기밀 콘텐츠 등 민감한 데이터를 압축하는 데 안전합니다.

GZIP과 Deflate의 차이점은 무엇인가요?

GZIP과 Deflate는 동일한 기본 압축 알고리즘(DEFLATE, RFC 1951)을 사용합니다. 차이점은 래퍼입니다: GZIP은 Deflate 압축 데이터 주위에 10바이트 헤더와 8바이트 푸터를 추가합니다. 매우 작은 입력(약 50바이트 미만)의 경우 18바이트 GZIP 오버헤드로 인해 압축 출력이 원본보다 커질 수 있습니다.

압축 결과가 원본보다 큰 이유는 무엇인가요?

GZIP은 18바이트 오버헤드(10바이트 헤더 + 8바이트 푸터)와 Deflate 압축 메타데이터를 추가합니다. 매우 짧은 문자열(일반적으로 50-100바이트 미만)의 경우 오버헤드가 압축 절감을 초과합니다. 이는 예상된 동작입니다. GZIP은 HTML, JSON, XML, 로그 파일과 같은 반복 패턴이 있는 큰 텍스트에 가장 효과적입니다.

Base64 인코딩된 GZIP이란 무엇이며 언제 사용하나요?

Base64 인코딩된 GZIP은 데이터를 GZIP으로 압축한 후 바이너리 바이트를 Base64 ASCII 문자열로 인코딩한 결과입니다. JSON/XML 필드에 압축 데이터 저장, URL에 압축 페이로드 삽입, 텍스트 전용 프로토콜을 통한 압축 데이터 전송, 웹 애플리케이션의 localStorage 값 압축에 주로 사용됩니다.

어떤 브라우저에서 지원되나요?

이 도구는 CompressionStream과 DecompressionStream Web API를 사용하며, Chrome 80+, Edge 80+, Safari 16.4+, Firefox 113+에서 지원됩니다. 모든 주요 최신 브라우저가 이 API를 지원합니다. 브라우저가 지원하지 않으면 오류 메시지가 표시됩니다.

코드 예제

// Compress text to Base64-encoded GZIP
async function compressToBase64(text) {
  const stream = new Blob([new TextEncoder().encode(text)])
    .stream()
    .pipeThrough(new CompressionStream('gzip'));
  const buf = await new Response(stream).arrayBuffer();
  let binary = '';
  new Uint8Array(buf).forEach(b => binary += String.fromCharCode(b));
  return btoa(binary);
}

// Decompress Base64-encoded GZIP to text
async function decompressFromBase64(base64) {
  const binary = atob(base64);
  const bytes = Uint8Array.from(binary, c => c.charCodeAt(0));
  const stream = new Blob([bytes])
    .stream()
    .pipeThrough(new DecompressionStream('gzip'));
  return await new Response(stream).text();
}

// Usage
const compressed = await compressToBase64('Hello, World!');
console.log(compressed);
const decompressed = await decompressFromBase64(compressed);
console.log(decompressed); // "Hello, World!"

관련 도구