맨위로가기

Zlib

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

zlib는 장-루 가이와 마크 애들러가 개발한, DEFLATE 알고리즘을 사용하는 데이터 압축 라이브러리이다. C 언어로 작성되었으며, BSD 라이선스와 유사한 zlib 라이선스를 따른다. PNG 이미지 형식 등 다양한 소프트웨어에서 사용되며, 운영체제에 공유 라이브러리로 포함되어 PC, 서버, 휴대폰 등 다양한 환경에서 활용된다. zlib는 DEFLATE 알고리즘 외에 캡슐화 방식, 리소스 사용 제어, 오류 처리 등을 제공하며, 압축 속도와 압축률 간의 균형을 조절할 수 있다. 또한 인텔, 클라우드플레어, zlib-ng 등에서 성능 향상을 위한 포크가 존재한다.

더 읽어볼만한 페이지

  • Zlib 라이선스 소프트웨어 - 심플 다이렉트미디어 레이어
    심플 다이렉트미디어 레이어(SDL)는 다양한 운영체제에서 게임 및 멀티미디어 응용 프로그램 개발에 사용되는 크로스 플랫폼 개발 라이브러리로서 비디오, 오디오, 키보드, 마우스, 조이스틱과 같은 멀티미디어 기능에 대한 낮은 수준의 접근을 제공하며 OpenGL, Vulkan과 같은 3D 렌더링 API와 다양한 프로그래밍 언어 바인딩을 지원한다.
  • Zlib 라이선스 소프트웨어 - NSIS
    NSIS는 윈도우용 오픈 소스 설치 프로그램 제작 시스템으로, 스크립트 기반의 유연한 제어, 다양한 기능, 다국어 및 플러그인 지원, Modern UI를 통한 사용자 친화적 환경 구축을 제공하며, 윈앰프 설치 시스템에서 시작되어 여러 유명 소프트웨어에 활용되었고 POSIX 플랫폼 지원으로 리눅스, macOS 등에서도 컴파일이 가능하다.
  • 자유 압축 소프트웨어 - Gzip
    gzip은 DEFLATE 알고리즘을 기반으로 데이터를 압축하는 파일 형식으로, 매직 넘버, 헤더, 압축된 페이로드 등을 포함하며, 단일 파일 압축에 주로 사용되고 HTTP 압축 및 다양한 응용 분야에서 활용된다.
  • 자유 압축 소프트웨어 - Bzip2
    Bzip2는 줄리안 세워드가 개발한 자유 소프트웨어로, 버로우즈-휠러 변환, MTF 변환, 허프만 부호화 등의 압축 기법을 사용하여 gzip이나 ZIP보다 높은 압축률을 제공하지만 압축 속도가 느린 블록 정렬 압축 알고리즘이다.
  • 1995년 소프트웨어 - 김프
    김프(GIMP)는 GNU 프로젝트에서 개발된 크로스 플랫폼 기반의 무료 오픈소스 래스터 그래픽 편집기로, 다양한 운영체제를 지원하며 풍부한 기능을 제공하지만 사용자 인터페이스에 대한 비판과 일부 기능의 부족함에 대한 평가도 존재한다.
  • 1995년 소프트웨어 - 인터넷 익스플로러
    마이크로소프트가 개발한 웹 브라우저인 인터넷 익스플로러는 윈도우 운영 체제와의 통합으로 높은 시장 점유율을 유지했으나, 웹 표준 문제와 보안 취약점으로 비판받으며 2015년 엣지에 자리를 내주고 2022년 지원이 종료되었지만, 엣지의 IE 모드로 레거시 호환성을 유지하고 있다.
Zlib - [IT 관련 정보]에 관한 문서
기본 정보
zlib 로고
zlib 로고
출시일1995년 5월 1일
최신 버전1.3.1
최신 버전 출시일2024년 1월 22일
프로그래밍 언어C
운영 체제크로스 플랫폼
장르데이터 압축
라이선스zlib 라이선스
웹사이트zlib.net
식별자
IETF RFC1951
1950
1952

2. 기능

zlib는 C 언어로 작성되었으며, 대부분의 프로그래밍 언어에서 래퍼 라이브러리 등의 형태로 제공되어 사용 가능하다. 예를 들어, Java SE의 Java Runtime Environment (JRE)에는 표준 Java 클래스 라이브러리의 패키지로 포함되어 있으며, Java 플랫폼에서도 이용할 수 있다. .NET Framework/.NET Core에서는 [https://learn.microsoft.com/en-us/dotnet/api/system.io.compression System.IO.Compression] 네임스페이스에서 관련 클래스들을 제공한다.

zlib는 상업·비상업 여부와 관계없이 많은 소프트웨어에서 사용되고 있다[19]。PNG 형식이 Deflate 구현을 필요로 하므로, 데이터 압축뿐만 아니라 이미지를 표시하는 대부분의 소프트웨어에서도 사용된다. 또한, 대부분의 운영 체제 (OS)에서 공유 라이브러리로 포함되어 있다. PC·서버·휴대폰 등, 매우 많은 OS에서 사용되는 라이브러리이므로, 문제가 발견되면 광범위한 시스템에 영향을 미친다. 2002년과 2005년에 보안 문제가 발견·수정되었지만, 그 후에도 취약점이 발견될 때마다 패치가 제공되고 있으며[20], 시스템을 안정적으로 유지하기 위해서는 라이브러리 업데이트가 필요하다.

zlib는 다음과 같은 주요 기능을 제공한다.


  • 압축 알고리즘: 2018년 9월 기준으로 zlib는 DEFLATE라는 하나의 알고리즘만 지원하며, 이 알고리즘은 LZ77 변형과 허프만 코딩의 조합을 사용한다.[6] 이 알고리즘은 다양한 데이터에 대해 적은 시스템 자원 사용으로도 좋은 압축률을 제공하며, ZIP 아카이브 형식에도 사용된다.
  • 리소스 사용 제어: 프로세서 및 메모리 사용을 제어하는 기능을 제공한다. 압축 수준 값을 통해 속도와 압축률 간의 균형을 맞출 수 있으며, 메모리가 제한된 임베디드 시스템 환경을 위한 메모리 절약 기능도 제공한다.
  • 전략: 특정 유형의 데이터에 맞게 압축을 최적화할 수 있다. 런-렝스 인코딩(RLE) 전략은 긴 길이의 반복되는 바이트가 포함된 데이터에 대해 더 빠른 속도로 좋은 결과를 제공할 수 있다. 일반적인 데이터의 경우 기본 전략을 사용하는 것이 좋다.
  • 오류 처리: 압축 데이터의 오류를 감지하고 건너뛸 수 있다. "full-flush" 지점을 압축 스트림에 기록하면 손상된 데이터를 건너뛰고 압축 해제를 재동기화할 수 있다. 단, 손상된 데이터의 오류 복구는 제공되지 않는다.
  • 데이터 길이: 압축 또는 압축 해제할 수 있는 데이터 길이에 제한이 없다. 라이브러리를 반복적으로 호출하여 무제한의 데이터 블록을 처리할 수 있다.[1]

2. 1. 캡슐화

원시 DEFLATE 압축 데이터(RFC 1951)[3]는 일반적으로 헤더와 푸터를 추가하여 데이터를 캡슐화하는 zlib 또는 gzip 래퍼와 함께 기록된다. 이는 원시 DEFLATE 데이터에서 제공되지 않는 스트림 식별 및 오류 감지를 제공한다.

zlib 래퍼(RFC 1950)[4]는 gzip 래퍼(RFC 1952)[5]보다 작다. gzip 래퍼는 파일 이름 및 기타 파일 시스템 정보를 저장하기 때문이다. zlib의 데이터 형식은 압축 데이터 앞에 2바이트 이상의 헤더와 뒤에 4바이트의 Adler-32 푸터가 붙는다.

헤더의 처음 2바이트는 다음과 같다.

바이트비트내용
1바이트째상위 4비트압축 정보, LZ77의 윈도우 크기. 7이면 32KB의 윈도우 크기.
하위 4비트압축 방식. 일반적으로는 숫자 8.
2바이트째상위 2비트압축 레벨. 기본값은 2.
6비트째사전(프리셋) 유무.
하위 5비트헤더 2바이트 분의 체크 비트.



사전(프리셋)을 사용하는 경우에는 3바이트째부터 사전 정보가 이어진다. 사용하지 않으면 압축 데이터가 이어진다.

gzip 형식은 10바이트 이상의 헤더와 8바이트의 푸터가 붙는다.

2. 2. 알고리즘

2018년 9월 기준으로 zlib는 DEFLATE라고 불리는 하나의 알고리즘만 지원하며, 이 알고리즘은 LZ77 (Lempel–Ziv 1977) 변형과 허프만 코딩의 조합을 사용한다.[6] 이 알고리즘은 다양한 데이터에 대해 적은 시스템 자원 사용으로도 좋은 압축률을 제공한다. 이 알고리즘은 또한 ZIP 아카이브 형식에도 사용된다. 헤더는 다른 알고리즘을 허용하지만 현재 구현된 것은 없다.

2. 3. 리소스 사용

zlib는 프로세서 및 메모리 사용을 제어하는 기능을 제공한다. 압축 수준 값을 제공하여 속도와 압축 사이에서 균형을 맞출 수 있다. 또한 일부 임베디드 시스템과 같이 메모리가 제한된 환경에서 유용한 메모리 절약 기능도 제공한다.

2. 4. 전략

압축은 특정 유형의 데이터에 맞게 최적화될 수 있다. 라이브러리를 사용하여 항상 특정 유형의 데이터를 압축하는 경우, 특정 전략을 사용하면 압축률과 성능을 향상시킬 수 있다. 예를 들어, 데이터에 긴 길이의 반복되는 바이트가 포함된 경우 런-렝스 인코딩(RLE) 전략이 더 빠른 속도로 좋은 결과를 제공할 수 있다. 일반적인 데이터의 경우 기본 전략을 사용하는 것이 좋다.

2. 5. 오류 처리

압축 데이터의 오류는 감지되어 건너뛸 수 있다. 또한 "full-flush" 지점이 압축 스트림에 기록되면 손상된 데이터를 건너뛸 수 있으며, 압축 해제는 다음 플러시 지점에서 재동기화된다. 단, 손상된 데이터의 오류 복구는 제공되지 않는다. Full-flush 지점은 일부 데이터 손실이 중요하지 않은 신뢰할 수 없는 채널의 대용량 데이터 스트림(일부 멀티미디어 응용 프로그램 등)에 유용하다. 그러나 플러시 지점을 많이 생성하면 압축 속도와 압축량(비율)에 영향을 미칠 수 있다.

2. 6. 데이터 길이

zlib은 압축 또는 압축 해제할 수 있는 데이터 길이에 제한이 없다. 라이브러리를 반복적으로 호출하여 무제한의 데이터 블록을 처리할 수 있다. 일부 보조 코드(카운터)는 긴 데이터 스트림에 대해 오버플로가 발생할 수 있지만, 실제 압축 또는 압축 해제에는 영향을 미치지 않는다.[1]

긴 (또는 무한) 데이터 스트림을 압축할 때는 정기적으로 전체 플러시 지점을 쓰는 것이 좋다.[1]

3. 데이터 형식

zlib의 데이터 형식은 압축 데이터 앞에 2바이트 이상의 헤더와 뒤에 4바이트의 Adler-32 푸터가 붙는다.

헤더의 처음 2바이트는 다음과 같다.

바이트비트내용
1바이트째상위 4비트압축 정보이며 LZ77의 윈도우 크기. 7이면 32KB의 윈도우 크기.
하위 4비트압축 방식. 일반적으로는 숫자 8.
2바이트째상위 2비트압축 레벨. 기본값은 2.
6비트째사전(프리셋)이 있는지 여부.
하위 5비트헤더 2바이트 분의 체크 비트.



사전(프리셋)을 사용하는 경우에는 3바이트째부터 사전 정보가 이어진다. 사용하지 않으면 압축 데이터가 이어진다.

참고로, gzip 형식의 경우에는 10바이트 이상의 헤더와 8바이트의 푸터가 붙는다.

4. 미디어 타입

IANA에 2012년 8월 발행된 에서 `application/zlib`가 정의되었으며, application/gzip과 함께 정식으로 등록되었다.[21]

5. 응용 프로그램

오늘날 zlib은 zlib과 DEFLATE가 표준 문서에서 빈번히 쓰이는 것을 미루어볼 때 de facto 표준이라고 할 수 있다. 수많은 응용 프로그램은 직간접적으로 압축을 위해 zlib을 사용하고 있다[23][7].


  • 리눅스 커널: 압축된 네트워크 프로토콜, 압축된 파일 시스템을 구현하고 부팅 시 커널 이미지를 압축 해제하는 데 사용된다.
  • GNU Binutils 및 GNU 디버거(GDB)
  • libpng: PNG 이미지 형식의 참조 구현으로, 비트맵 데이터에 대한 스트림 압축으로 DEFLATE를 지정한다.
  • libwww: 웹 브라우저와 같은 웹 애플리케이션을 위한 API
  • 아파치 HTTP 서버: HTTP/1.1을 구현하기 위해 zlib를 사용한다.
  • cURL 라이브러리: HTTP 응답을 압축 해제하기 위해 zlib를 사용한다.[8]
  • 오픈SSH 클라이언트 및 서버: Secure Shell 프로토콜에서 제공하는 선택적 압축을 수행하기 위해 zlib에 의존한다.
  • 오픈SSL, GnuTLS 보안 라이브러리: 선택적으로 zlib를 사용하여 TLS 연결을 압축할 수 있다.
  • FFmpeg 멀티미디어 라이브러리: Matroska와 같은 디지털 컨테이너 형식의 DEFLATE 압축 부분 읽기 및 쓰기에 zlib를 사용한다.
  • rsync 원격 파일 동기화 프로그램: 선택적 프로토콜 압축을 구현하기 위해 zlib를 사용한다.
  • dpkg, RPM 패키지 매니저 패키지 관리자: 압축된 소프트웨어 패키지에서 파일을 압축 해제하기 위해 zlib를 사용한다.
  • 아파치 서브버전, CVS 버전 관리 시스템: 원격 저장소와의 트래픽을 압축하기 위해 zlib를 사용한다.
  • 아파치 ORC 열 지향 데이터 저장 형식: ZLib를 기본 압축 방법으로 사용한다.[9]
  • Git 버전 관리 시스템: 데이터 객체(블롭, 트리, 커밋 및 태그)의 내용을 저장하기 위해 zlib를 사용한다.
  • PostgreSQL RDBMS: 데이터베이스 백업을 위해 사용자 지정 덤프 형식(pg_dump -Fc)으로 zlib를 사용한다.
  • Microsoft .NET Framework 2.0 이상 클래스 System.IO.Compression.DeflateStream.[10]
  • Wind River Systems에서 만든 VxWorks 운영 체제의 일부인 TORNADO의 "deflate" 유틸리티: zlib를 사용하여 부트 ROM 이미지를 압축한다.
  • zlib-flate,[11] qpdf의 일부인 원시 zlib 압축 프로그램[12]
  • MySQL RDBMS: InnoDB 테이블에서 압축을 위해 ZLib LZ77을 사용한다 [13]


zlib는 코드의 이식성, 자유로운 라이선스, 비교적 작은 메모리 공간으로 인해 애플 아이폰 및 소니 플레이스테이션 3과 같은 많은 임베디드 장치에서도 사용된다.

6. 포크

zlib는 오래된 코드 기반으로 구축된 널리 사용되는 라이브러리이기에, 이 라이브러리에 대한 개선을 주장하는 제3자에 의해 자주 포크되기도 한다.


  • 인텔은 zlib의 고성능 포크를 가지고 있다.[14]
  • 클라우드플레어는 "대규모" 개선 사항이 있는 고성능 포크를 유지 관리한다.[15]
  • zlib-ng는 "차세대" 시스템을 위한 zlib 대체 포크이다. 이는 ANSI C를 지원하지 않는 컴파일러에 대한 해결 코드 제거, 클라우드플레어 및 인텔 최적화 통합, 하드웨어 가속 (SIMD 및 내장 함수) 추가, 그리고 버그를 찾는 데 도움이 되는 코드 검사기, 퍼징, 코드 커버리지를 사용한다.[16]

참조

[1] 서적 The Linux Cookbook, 2nd Edition: Tips and Techniques for Everyday Use https://books.google[...] No Starch Press 2004-10-22
[2] 서적 Programming Linux Games https://books.google[...] No Starch Press 2001-10-22
[3] 간행물
[4] 간행물
[5] 간행물
[6] 간행물
[7] 웹사이트 zlib Applications http://zlib.net/apps[...] 2002-04-18
[8] 웹사이트 c++ - Why does cURL use zlib? https://stackoverflo[...]
[9] 웹사이트 ORCFile in HDP 2: Better Compression, Better Performance https://blog.clouder[...] 2013-09-06
[10] 문서 System.IO.Compression.DeflateStream http://msdn.microsof[...]
[11] 문서 zlib-flate Debian
[12] 웹사이트 qpdf https://packages.deb[...]
[13] 웹사이트 MySQL :: MySQL 8.0 Reference Manual :: 15.9.1.5 How Compression Works for InnoDB Tables https://dev.mysql.co[...]
[14] 웹사이트 github Intel ZLIB https://github.com/i[...] 2024-01-25
[15] 웹사이트 Fighting Cancer: The Unexpected Benefit Of Open Sourcing Our Code https://blog.cloudfl[...] 2015-07-08
[16] 웹사이트 zlib-ng/zlib-ng: zlib replacement with optimizations for "next generation" systems. https://github.com/z[...] zlib-ng 2023-02-24
[17] 웹사이트 zlib Home Site http://zlib.net/ 2024-01-22
[18] 문서 zlib Manual https://zlib.net/man[...]
[19] 문서 http://zlib.net/apps[...]
[20] 뉴스 【セキュリティ ニュース】圧縮ライブラリ「zlib」の最新版に深刻な脆弱性(1ページ目 / 全1ページ):Security NEXT https://www.security[...]
[21] 웹사이트 RFC 6713 – The 'application/zlib' and 'application/gzip' Media Types https://datatracker.[...] Internet Engineering Task Force 2012-08
[22] 뉴스 Press release: Critical Open Source Software Projects Receive 6,000 Bug Fixes in First Year of Coverity Scan Site http://www.coverity.[...]
[23] 문서 zlib 응용 프로그램 http://zlib.net/apps[...] 2002-04-18



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com