GZIP 아카이브 형식
GZIP은 파일 압축 및 압축 해제에 사용되는 널리 사용되는 파일 형식이자 소프트웨어 응용 프로그램입니다. 1990년대 초 Jean-Loup Gailly와 Mark Adler가 무료 오픈 소스 압축 알고리즘으로 개발했습니다. “GZIP"이라는 이름은 GNU ZIP의 약자로 GNU 프로젝트와의 연관성을 나타냅니다.
GZIP 압축은 파일 크기를 줄여 네트워크를 통해 전송하거나 디스크에 저장하기 쉽게 만듭니다. 반복되는 데이터 문자열을 참조로 대체하여 압축을 달성하므로 중복성과 전체 파일 크기가 줄어듭니다. GZIP은 HTML, CSS, JavaScript, XML, JSON과 같은 텍스트 기반 파일을 압축하는 데 특히 효율적이지만 다른 유형의 파일을 압축하는 데에도 사용할 수 있습니다.
GZIP 아카이브 정보 정보
GZIP 아카이브 정보는 GZIP 압축 알고리즘을 사용하여 압축된 파일에 포함된 메타데이터 및 데이터를 의미합니다. GZIP 아카이브에는 일반적으로 파일 속성, 타임스탬프, 압축 방법, 압축 해제 및 파일 복원에 필요한 기타 관련 데이터와 같은 정보가 포함됩니다. 이 메타데이터는 압축 파일을 적절하게 식별하고 처리하는 데 중요합니다.
또한 GZIP 아카이브 정보에는 압축 수준, 체크섬, 압축 중에 사용되는 추가 플래그나 옵션 등 압축 프로세스 자체에 대한 세부정보도 포함될 수 있습니다. 이 정보는 압축을 풀 때 압축된 데이터의 무결성과 정확성을 보장하는 데 필수적입니다. 전반적으로 GZIP 아카이브 정보를 이해하는 것은 데이터 저장, 네트워크를 통한 전송 또는 보관 목적 등 압축 파일을 효과적으로 관리하고 작업하는 데 필수적입니다.
GZIP 아카이브 형식의 진화
GZIP 아카이브 형식은 Jean-loup Gailly와 Mark Adler가 GNU 프로젝트의 일부로 GZIP 압축 알고리즘을 개발한 1980년대 후반에 뿌리를 두고 있습니다. GZIP은 GNU ZIP의 약자로 GNU 프로젝트 내에서의 기원을 반영합니다. 목표는 다양한 컴퓨터 시스템에서 호환성을 유지하면서 파일 크기를 효율적으로 줄일 수 있는 압축 도구를 만드는 것이었습니다.
Jean-loup Gailly와 Mark Adler는 초기 Unix 시스템에 있는 압축 유틸리티에 대한 무료 대안으로 이 프로그램을 개발했습니다. 이는 GNU 프로젝트의 일부로 설계되었으므로 gzip의 “g"입니다. 초기 릴리스인 버전 0.1은 1992년 10월 31일에 대중에게 공개되었으며, 이후 1993년 2월에 버전 1.0이 공개되었습니다.
GZIP 구조
GZIP은 LZ77과 Huffman 코딩 기술을 병합하는 DEFLATE 알고리즘을 활용합니다. DEFLATE는 당시 널리 퍼졌던 압축 및 유사한 보관 유틸리티의 효율성을 제한했던 특허로 인해 방해가 되는 LZW 및 기타 압축 알고리즘을 대체하기 위해 개발되었습니다. GZIP 파일 형식은 세 가지 주요 부분으로 구성된 잘 정의된 구조를 따릅니다.
- 헤더(10바이트): 이 섹션은 아카이브와 그 내용에 대한 필수 정보를 제공합니다. 헤더 데이터에 대한 분석은 다음과 같습니다.
- Magic Number(4바이트): 파일을 GZIP 아카이브로 식별합니다. 압축 해제 도구가 인식하는 특정 16진수 값(1f 8b)이 있습니다.
- 압축 방법(1바이트): 이 바이트는 일반적으로 GZIP에서 사용되는 DEFLATE 압축 알고리즘을 나타내는 값 8을 보유합니다.
- 헤더 플래그(1바이트): 이 플래그는 파일 이름 인코딩이나 주석 존재와 같은 압축 해제의 특정 측면을 제어합니다.
- 생성 시간(4바이트): 이 섹션은 아카이브가 생성된 시간을 나타내는 Unix 타임스탬프를 저장합니다.
- CRC-32 (4바이트): 이 순환 중복 검사 값은 압축 해제 중 오류 감지에 사용됩니다. 이는 압축되지 않은 데이터를 기반으로 계산되며 압축 해제 소프트웨어가 추출된 파일의 무결성을 확인할 수 있도록 합니다.
이 형식의 이점
- 무손실 압축: GZIP은 정보 손실 없이 데이터를 압축합니다. 일부 압축 기술과 달리 압축 해제 후 원본 파일을 완벽하게 재구성할 수 있습니다. 이는 데이터 무결성을 유지하는 것이 필수적인 중요한 문서, 이미지 또는 코드에 매우 중요합니다.
- 넓은 호환성: GZIP의 가장 큰 장점 중 하나는 광범위한 채택입니다. 대부분의 운영 체제, 아카이브 유틸리티(WinRAR, 7-Zip) 및 웹 서버에서 지원됩니다. 이를 통해 특정 소프트웨어 없이도 다양한 플랫폼에서 GZIP 파일을 쉽게 열 수 있습니다. 또한 GZIP은 Unix 기반 시스템, Linux, Windows 및 macOS를 포함한 다양한 운영 체제에서 널리 지원됩니다. 이러한 크로스 플랫폼 호환성을 통해 GZIP 압축 파일을 다양한 환경에서 원활하게 생성하고 압축을 풀 수 있습니다.
- 스트리밍 가능한 압축: GZIP은 스트림 압축을 지원하므로 전체 파일이 처리될 때까지 기다릴 필요 없이 즉시 파일을 압축하거나 압축을 풀 수 있습니다. 이는 네트워크 통신 및 데이터 백업 작업과 같이 데이터가 지속적으로 생성되거나 전송되는 시나리오에 적합합니다.
- 개방형 표준: GZIP은 공개적으로 사용 가능한 사양을 갖춘 파일 압축을 위한 개방적이고 널리 채택된 표준입니다. 이러한 개방성은 다양한 소프트웨어 애플리케이션 및 시스템 간의 상호 운용성과 호환성을 장려하여 GZIP 압축 파일 작업을 위한 도구 및 라이브러리의 활발한 생태계를 조성합니다. GZIP을 활용하는 것은 일반적으로 간단합니다. 많은 도구와 소프트웨어가 이 형식의 파일을 자동으로 압축하거나 압축 해제합니다. 또한 압축 해제 프로세스는 효율적이며 최소한의 리소스가 필요합니다.
GZIP 아카이브 지원 작업
Aspose.ZIP 을 사용하면 사용자가 특정 항목이나 전체 아카이브를 추출할 수 있습니다. .NET용 Aspose.ZIP의 경우 GzipArchiveClass를 사용하여 .gz 파일을 연 다음 해당 항목을 반복하여 원하는 위치에 추출할 수 있습니다. Java용 Aspose.ZIP의 경우 GzipArchive를 사용하여 .gz 파일을 열고 항목을 추출하는 유사한 접근 방식입니다.
GZIP 파일 - 내부 구조
GZIP 아카이브는 깔끔하게 포장된 패키지와 같습니다. 형식과 압축 방법을 소개하는 10바이트 헤더로 시작됩니다. 핵심은 영리한 알고리즘을 사용하여 축소된 압축된 데이터 섹션에 있습니다. 마지막으로 8바이트 바닥글은 체크섬으로 데이터 무결성을 확인하여 압축 해제 후 파일이 안전하게 도착하도록 보장합니다.
내부 아카이브 구조
- 파일 메타데이터 - tar 아카이브와 유사하게 각 파일은 수정 시간 및 권한과 같은 기본 정보를 저장합니다. 그러나 이 섹션은 유연하며 필요에 따라 ACL(액세스 제어 목록) 또는 EA(확장 속성)와 같은 추가 세부 정보를 생략하거나 포함할 수 있습니다. 데이터 무결성을 보장하려면 일반 파일에 대해 강력한 해시 기능(예: SHA1)을 포함하는 것이 좋습니다.
- 다중 콘텐츠 스트림 - 기존 아카이브와 달리 파일은 내부 데이터 파일 내에 둘 이상의 데이터 스트림을 가질 수 있습니다. 이는 파일과 관련된 확장된 속성이나 리소스 포크를 저장하는 데 유용합니다.
- 헤더 - 내부 인덱스 파일에는 파일 헤더가 포함되어 있으며 내부 데이터 파일 전체에 흩어져 있는 헤더를 미러링합니다. 그러나 별도로 저장되는 경우 인덱스 헤더는 데이터 파일 내 해당 데이터의 시작 위치를 참조해야 합니다. 또한 인덱스의 디렉터리 항목에는 포함된 파일과 내부 파일 인덱스 내의 해당 오프셋이 나열됩니다.
- 중복 메타데이터의 이론적 근거 - 이 설계 선택은 효율적인 데이터 스트리밍/디코딩과 임의 파일 액세스를 모두 보장합니다. 또한 메타데이터가 잘 압축되므로 스토리지 오버헤드가 최소화됩니다. 테스트에 따르면 메타데이터는 일반적으로 저장 공간의 0.3% 미만을 차지하므로 절충할 가치가 있습니다.
- 블록 헤더 - 블록 헤더는 외부 파일과 유사하며 블록 크기 정보와 고유 식별자 시퀀스를 포함합니다.
GZIP 사용 예
Aspose.ZIP API를 사용하면 다른 타사 애플리케이션 없이도 애플리케이션에서 아카이브를 추출할 수 있습니다. Aspose.ZIP API는 GZIP 아카이브 작업을 위한 GzipArchive 클래스를 제공합니다.
GZIP with compress only single source via C#
Such archives like GZIP, LZ, BZIP2, XZ, Z do not support entries and can compress only single source. See samples with such a compression.
using (FileStream source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
using (GzipArchive archive = new GzipArchive())
{
archive.SetSource(source);
archive.Save(«archive.gz”);
}
}
GZIP 아카이브에 대한 추가 정보
사람들이 물어봤어
1. GZIP이란 무엇입니까?
GZIP(GNU zipped archive)은 더 쉬운 저장과 전송을 위해 파일 크기를 줄이는 널리 사용되는 파일 형식입니다.
2. GZIP 압축은 ZIP과 같은 다른 형식과 어떻게 비교됩니까?
GZIP은 일반적으로 ZIP에 비해 더 높은 압축률을 제공하며, 특히 텍스트 기반 파일을 압축할 때 더욱 그렇습니다. 그러나 ZIP 아카이브에는 여러 파일 및 디렉터리에 대한 지원이 포함되는 경우가 많으므로 여러 파일을 함께 패키징하는 데 더 유용하게 사용할 수 있습니다. .
3. GZIP은 여러 파일을 단일 아카이브로 압축할 수 있나요?
GZIP은 여러 파일이나 디렉터리가 아닌 단일 파일을 압축하도록 설계되었습니다. 그러나 tar와 같은 도구를 GZIP과 함께 사용하여 tarball tar 아카이브 를 생성하는 것이 일반적입니다. GZIP을 사용하여 압축하여 단일 압축 파일을 만듭니다.