gzip (DEFLATE)
gzip이 텍스트를 줄이는 과정을 보세요. 반복은 짧은 복사가 되고, 허프만 코드는 자주 나오는 기호에 더 적은 비트를 줍니다.
- 윈도: 32 KB
- 복사: 3-258바이트
- 코드: 최대 15비트
- gzip 프레임: 18바이트
용어 설명
- 리터럴: 있는 그대로 쓴 문자. 그 위치에서 시작하는 3글자 이상의 반복이 없기 때문입니다.
- 복사: "이만큼 앞에서 이만큼의 문자를 가져와라"라는 뜻의 길이와 거리. 자신이 만들어 내는 텍스트와 겹쳐도 됩니다.
- 윈도: 압축기가 반복을 찾으려고 얼마나 앞까지 볼 수 있는지. gzip은 32 KB, Brotli는 최대 16 MB입니다.
- 허프만 코드: 기호마다 정한 비트 코드. 자주 나오는 기호일수록 짧으며, 가장 드문 두 기호를 계속 합쳐 나가는 트리로 만듭니다.
- 접두어 없음: 어떤 코드도 다른 코드의 앞부분이 아니어서, 구분자 없이도 코드 열을 다시 읽을 수 있습니다.
텍스트는 23자이고, 압축하지 않으면 184비트입니다. 압축기는 왼쪽에서 오른쪽으로 읽으며, 각 위치에서 다음에 오는 내용이 앞에 나온 적이 있는지 묻습니다.
스페이스바: 재생 또는 일시정지. 좌우 화살표 키: 단계 이동. Home과 End 키: 처음과 끝으로 이동.
해 보세요: 같은 글자를 여러 번 입력해 보세요. 거리가 1인 복사 하나로 전부 덮을 수 있습니다. 복사는 자신이 만들어 내는 텍스트와 겹쳐도 되기 때문입니다.
작동 방식
gzip은 DEFLATE를 두 단계로 실행합니다. LZ77은 텍스트를 따라가며 각 위치에서 직전 32 KB 안에 이미 나온 가장 긴 바이트 열을 찾습니다. 그 바이트를 다시 쓰는 대신 쌍 하나를 씁니다. 몇 바이트를 복사할지(3-258)와 얼마나 앞에 있는지입니다. 남은 것, 즉 리터럴과 이 쌍들은 이어서 허프만 코드로 기록됩니다. 자주 나오는 기호는 짧은 코드를, 드문 기호는 긴 코드를 받습니다. gzip은 결과를 10바이트 헤더와 CRC-32 체크섬이 든 8바이트 트레일러로 감쌉니다.
언제 쓰면 좋을까
gzip은 반복이 많은 텍스트를 압축합니다. HTML, CSS, JavaScript, JSON, 로그, CSV가 그렇습니다. 모든 브라우저와 서버가 이해하고, 어느 레벨에서나 빠르며, 응답을 실시간으로 압축할 때 안전한 기본값입니다. JPEG, PNG, WOFF2, ZIP처럼 이미 압축된 데이터에는 남은 반복이 없어서 gzip은 자기 프레임만 덧붙입니다.
내 텍스트로
같은 두 단계를 실제 gzip(레벨 6)이 더 긴 텍스트에서 수행합니다. 내 텍스트를 붙여 넣거나 Gzip & Brotli 압축 도구에서 가져오세요.