UGLYPEAR AI 사업 전환 완료: 고성능 문서 압축 × RAG 데이터 엔지니어링 기반신규 사업 알아보기 →

PNG 압축 원리: DEFLATE 알고리즘은 왜 무손실인가?

결론부터 말씀드리면: PNG가 무손실 압축인 이유는 DEFLATE 알고리즘을 사용하기 때문입니다. LZ77 사전 압축과 Huffman 코딩 두 단계가 모두 완전히 가역적인 수학 연산이며, 압축 해제 후 데이터가 원본 데이터와 바이트 단위로 일치합니다. PNG의 압축 흐름은 다음과 같습니다. 픽셀 데이터가 먼저 필터 행 예측을 거쳐 인접 픽셀 간의 중복을 제거한 다음, DEFLATE 알고리즘으로 압축됩니다. 3000x2000 UI 스크린샷 한 장의 경우, PNG는 원본 17.2MB에서 0.35MB로 압축되어 감소율 97.9%, 그리고 각 픽셀 값은 변하지 않습니다. 아래에서는 PNG 파일 구조와 DEFLATE 알고리즘 원리 두 측면에서 상세히 설명합니다.

이미지 압축의 전체 방법에 익숙하지 않으시다면, 먼저 이미지 압축 가이드: JPG/PNG/WebP 형식 비교를 읽어보시길 권장합니다.

1. PNG 파일 구조: 데이터는 어떻게 조직되는가

PNG 파일은 일련의 데이터 청크(chunk)로 구성되며, 각 청크는 유형, 길이, 데이터, 검증의 네 부분을 포함합니다. 이 청크의 역할을 이해하면 PNG 파일의 내부 구조를 이해하는 것입니다.

데이터 청크전체 이름기능필수 여부일반적인 크기
서명PNG Signature8바이트 파일 식별(89 50 4E 47 0D 0A 1A 0A)필수8바이트
IHDRImage Header이미지 기본 정보(너비/높이/색 심도/색상 유형)필수25바이트
IDATImage Data압축된 픽셀 데이터(DEFLATE 인코딩)필수가변(주체)
IENDImage End파일 종료 마크필수12바이트
PLTEPalette팔레트(인덱스 색 모드)인덱스 색 필수≤768바이트
tRNSTransparency투명도 정보선택가변
tEXtText텍스트 메타데이터(작성자/설명 등)선택가변
gAMAImage GammaGamma 보정 정보선택16바이트

PNG 파일의 가장 핵심적인 청크는 IDAT이며, 필터 행 예측과 DEFLATE 압축을 거친 픽셀 데이터를 저장합니다. 3000x2000 24비트 RGB 이미지의 원본 픽셀 데이터는 약 17.2MB(3000x2000x3바이트)이며, PNG 압축 후 IDAT 부분은 0.3-0.5MB에 불과할 수 있습니다. 압축 효과는 주로 이미지 콘텐츠의 반복 가능성에 따라 결정됩니다. 대면적 단색의 압축률이 가장 높고, 잡음 사진의 압축률이 가장 낮습니다.

2. DEFLATE 알고리즘 원리: LZ77+Huffman 두 단계 압축

PNG의 핵심 압축 엔진은 DEFLATE 알고리즘이며, 두 단계로 구성됩니다. 첫 번째 단계 LZ77 사전 압축이 반복 시퀀스를 제거하고, 두 번째 단계 Huffman 코딩이 인코딩 중복을 제거합니다. 두 단계 모두 무손실 가역 연산이며, 이것이 PNG 압축이 무손실인 근본 원인입니다.

단계알고리즘원리제거되는 중복가역성
첫 번째 단계LZ77반복되는 바이트 시퀀스를 찾아 (거리, 길이) 참조로 대체반복 시퀀스 중복완전히 가역
두 번째 단계Huffman 코딩고주파 데이터는 짧은 코드 사용, 저주파 데이터는 긴 코드 사용인코딩 중복완전히 가역

1) LZ77 사전 압축

LZ77은 "슬라이딩 윈도우" 사전 압축 알고리즘입니다. 슬라이딩 윈도우(보통 32KB)를 유지하고, 윈도우 내에서 현재 위치와 일치하는 가장 긴 바이트 시퀀스를 찾습니다. 일치가 발견되면 (거리, 길이) 참조로 이 바이트를 대체하고, 일치가 없으면 원본 바이트를 출력합니다.

예를 들어 설명하면, 이미지 데이터에 연속된 흰색 픽셀(RGB 255,255,255)이 1000번 반복된다고 가정합니다. LZ77은 윈도우에서 이 반복 패턴을 찾아, 첫 번째 3바이트 시퀀스를 기록한 후, 후속 999개 시퀀스를 "3바이트 뒤로 돌아가서 3바이트 복사, 999번 반복"이라는 참조 하나로 대체합니다. 3000바이트의 원본 데이터가 10여 바이트의 참조 시퀀스로 압축되어, 압축률이 99%를 초과합니다.

데이터 특징LZ77 압축 효과일반적인 압축률원인
대면적 단색우수95%+반복 시퀀스가 길어 참조 대체 효율이 높음
수평 그라데이션양호70%-85%그라데이션 패턴 매칭 가능
규칙적 텍스처양호60%-80%텍스처 반복 참조 가능
랜덤 노이즈불량0%-10%매칭 가능한 반복 시퀀스 없음
자연 사진불량5%-20%픽셀 차이가 커서 매칭 적음

2) Huffman 코딩

LZ77에서 출력된 데이터(참조와 원본 바이트 혼합)는 다시 Huffman 코딩을 거칩니다. Huffman 코딩의 핵심 아이디어는 출현 빈도가 높은 심볼은 짧은 코드를, 빈도가 낮은 심볼은 긴 코드를 할당하여 평균 코드 길이를 줄이는 것입니다.

예를 들어, LZ77 출력에서 "참조 마크"의 출현 빈도가 60%를 차지하고, 원본 바이트 값 255가 20%를 차지하며, 다른 값들은 각각 적은 비율을 차지한다고 가정합니다. Huffman은 "참조 마크"에 2비트 코드를, 255에 3비트 코드를, 저주파 값에 8-12비트 코드를 할당합니다. 이렇게 하면 각 심볼의 평균 코드 길이가 고정된 8비트에서 3-4비트로 낮아져, 추가로 약 50% 압축됩니다.

DEFLATE는 두 가지 Huffman 코딩 방식을 사용합니다. 고정 Huffman 트리(사전 설정된 코드 테이블, 속도는 빠르지만 압축률이 일반적)와 동적 Huffman 트리(실제 데이터 빈도에 따라 최적의 코드 테이블 구축, 압축률이 더 높지만 추가 코드 테이블 저장 필요). PNG 표준은 최적의 압축 효과를 얻기 위해 동적 Huffman 코딩을 사용할 것을 요구합니다.

3. 무손실 압축 메커니즘: 필터 행 예측+DEFLATE

PNG의 무손실 압축은 DEFLATE 알고리즘에 의존할 뿐만 아니라, 중요한 전처리 단계인 필터 행 예측(Filter)에 의존합니다. 이 단계는 DEFLATE 이전에 실행되며, 픽셀 데이터를 LZ77 압축에 더 적합하게 만드는 것이 목적입니다.

이미지의 인접 픽셀은 보통 비슷한 값을 가집니다(예: 하늘 영역의 픽셀 값이 근접). 필터 행 예측은 각 픽셀 값에서 왼쪽 또는 위쪽 픽셀 값을 빼서, 절대값을 차이값으로 변환합니다. 차이값은 보통 작거나 0이며, 이러한 데이터 패턴이 LZ77과 Huffman 압축에 더 적합합니다.

필터 유형이름예측 공식적용 시나리오
0None예측하지 않음, 원본 값규칙 없는 노이즈 데이터
1Sub현재 값 - 왼쪽 값수평 그라데이션 이미지
2Up현재 값 - 위쪽 값수직 그라데이션 이미지
3Average현재 값 - (왼쪽+위쪽)/2부드러운 전환 이미지
4Paeth현재 값 - Paeth 예측 값범용(대부분의 이미지에 최적)

PNG 인코더는 각 행에 대해 독립적으로 필터 유형을 선택할 수 있습니다. SmartSlim은 자체 개발한 Rust 압축 엔진을 기반으로, 각 행에 대해 5가지 필터 방식을 모두 시도하여 압축 효과가 가장 좋은 것을 선택합니다. 이는 고정된 단일 필터 방식을 사용하는 것보다 추가로 10%–20% 용량을 줄일 수 있습니다.

완전한 압축 흐름:
원본 픽셀 → 필터 행 예측(최적 필터 선택) → LZ77 사전 압축 → Huffman 코딩 → IDAT 데이터 청크

압축 해제 흐름은 완전 역방향입니다:
IDAT 데이터 청크 → Huffman 디코딩 → LZ77 압축 해제 → 역 필터 복원 → 원본 픽셀

두 단계 모두 정확한 수학적 역 연산이며, 압축 해제된 픽셀 데이터는 원본 데이터와 바이트 단위로 동일합니다. 이것이 PNG 무손실의 근본 보장입니다.

4. 실측: PNG vs JPEG vs WebP 용량 비교

동일한 테스트 이미지 그룹을 사용하여 세 가지 형식의 압축 효과를 비교하며, 다양한 유형의 이미지 콘텐츠를 커버합니다.

이미지 유형크기원본 BMPPNGJPEG(q80)WebP(q80)PNG 압축률
UI 스크린샷1920x10805.93MB0.35MB0.82MB0.28MB94.1%
선 프레임2000x15008.58MB0.42MB1.15MB0.35MB95.1%
자연 사진3000x200017.16MB12.50MB1.80MB1.42MB27.2%
인물 사진4000x300034.33MB28.80MB3.50MB2.80MB16.1%
아이콘 세트1024x10243.00MB0.08MB0.45MB0.06MB97.3%
스캔 문서2480x350824.80MB1.20MB0.85MB0.72MB95.2%

실측 데이터가 핵심 결론을 보여줍니다. PNG의 압축 효과는 이미지 유형에 크게 의존합니다. UI 스크린샷, 선 프레임, 아이콘 등 대면적 단색 영역을 포함한 이미지의 경우, PNG 압축률은 94%–97%에 달하여 JPEG를 훨씬 초과합니다. 하지만 자연 사진, 인물 사진 등 픽셀 차이가 큰 이미지의 경우, PNG 압축률은 16%–27%에 불과하여 JPEG의 89%–90%보다 훨씬 낮습니다.

표준 PNG와 최적화 PNG를 예로 들어, PNG 최적화 전후 비교를 다시 살펴봅니다.

이미지 유형표준 PNG최적화 PNG최적화 후 감소율최적화 방식
UI 스크린샷0.42MB0.35MB16.7%Paeth 필터+zlib 최고 레벨
선 프레임0.52MB0.42MB19.2%행별 최적 필터+메타데이터 삭제
아이콘 세트0.12MB0.08MB33.3%8비트 인덱스 색 변환+필터 최적화
스캔 문서1.50MB1.20MB20.0%행별 최적 필터+gAMA 삭제

SmartSlim의 PNG 최적화는 표준 PNG보다 추가로 15%–33% 용량을 줄일 수 있으며, 핵심은 행별 최적 필터 선택과 zlib 최고 압축 레벨의 조합 사용입니다.

더 많은 형식 비교는 무손실 압축 vs 손실 압축: 핵심 차이WebP vs PNG vs JPG 형식 비교를 참조하시기 바랍니다.

5. 자주 묻는 질문 FAQ

Q1: PNG는 왜 무손실 압축인가요?

PNG는 DEFLATE 알고리즘을 사용하여 데이터를 압축하며, 이 알고리즘은 LZ77 사전 압축과 Huffman 코딩의 두 단계로 구성됩니다. LZ77은 반복되는 바이트 시퀀스를 찾아 거리+길이 참조로 대체하고, Huffman은 고주파 데이터에 짧은 코드를 할당하는 가변 길이 인코딩을 사용합니다. 두 단계 모두 가역 연산이며, 압축 해제 시 Huffman 디코딩이 가변 길이 코드를 복원하고, LZ77이 참조에 따라 원본 바이트를 복원하여, 데이터가 완전히 일치하고 정보 손실이 없으므로 PNG는 무손실 압축입니다.

Q2: PNG와 JPEG 중 어느 것이 압축률이 더 높은가요?

사진 유형 이미지의 경우 JPEG 압축률이 PNG보다 훨씬 높습니다. 3000x2000 사진 한 장의 경우, PNG는 약 12.5MB, JPEG 품질 80은 약 1.8MB로 7배 차이가 납니다. 이는 JPEG가 손실 DCT 변환을 사용하여 고주파 디테일을 폐기하는 반면, PNG는 각 픽셀을 무손실로 보존해야 하기 때문입니다. 하지만 선 프레임, 스크린샷, 아이콘 등 대면적 단색을 포함한 이미지의 경우, PNG가 오히려 더 작습니다. UI 스크린샷 한 장의 경우 PNG 0.3MB, JPEG 품질 80은 약 0.8MB입니다. 형식 선택은 콘텐츠 유형에 따라 달라야 합니다.

Q3: PNG 압축률은 최대 얼마나 높을 수 있나요?

이는 이미지 콘텐츠에 따라 다릅니다. 대면적 단색 또는 그라데이션 이미지의 압축률은 90% 이상에 달할 수 있으며(예: UI 스크린샷을 5MB에서 0.3MB로 압축), 잡음이 많은 사진의 압축률은 보통 10%-30%에 불과합니다. 이는 픽셀 차이가 크고 LZ77이 반복 시퀀스를 찾을 수 없기 때문입니다. PNG는 DEFLATE 알고리즘을 사용하므로 이론적 한계가 ZIP 압축 수준에 있으며, JPEG처럼 정보를 폐기하여 극도로 높은 압축률을 얻을 수는 없습니다.

Q4: PNG 최적화와 PNG 압축의 차이는 무엇인가요?

PNG 압축은 원본 픽셀 데이터를 DEFLATE로 PNG 형식에 인코딩하는 것을 말하며, 이는 표준 흐름입니다. PNG 최적화는 표준 압축을 기반으로 용량을 추가로 줄이는 것으로, 다음을 포함합니다. 5가지 필터 행 예측을 시도하여 최적 선택, zlib 최고 압축 레벨 사용, 메타데이터 청크(예: tEXt/gAMA) 삭제, 24비트 RGBA를 8비트 인덱스 색으로 변환(색이 256종 이하인 경우). SmartSlim의 PNG 최적화는 표준 PNG보다 추가로 15%-30% 용량을 줄일 수 있습니다.

요약

PNG가 무손실 압축을 할 수 있는 핵심은 DEFLATE 알고리즘의 LZ77과 Huffman 두 단계가 모두 완전히 가역적인 수학 연산이며, 필터 행 예측 전처리가 데이터의 압축 가능성을 높이기 때문입니다. PNG는 UI 스크린샷, 선 프레임, 아이콘 등 대면적 단색 이미지에 대해 압축 효과가 매우 우수하며(압축률 94%–97%), 사진 유형 이미지에 대해서는 압축률이 제한적입니다(16%–27%). 이러한 시나리오에서는 JPEG 또는 WebP를 선택해야 합니다.

PNG 이미지 용량을 최적화해야 할 경우, SmartSlim은 Rust 압축 엔진을 기반으로 행별 최적 필터와 zlib 최고 레벨 압축을 제공하며, 표준 PNG보다 추가로 15%–33% 용량을 줄이고, png/jpg/jpeg/webp/bmp/tiff 등 9가지 이미지 형식을 지원하며, 로컬 압축으로 데이터가 외부로 나가지 않습니다.

파일을 압축해야 하나요? SmartSlim을 사용해 보세요

자체 개발한 Rust 압축 엔진을 기반으로, PDF/이미지/동영상/Office/OFD 등 10개 분야 40개 이상의 형식을 지원합니다. 로컬 압축으로 데이터가 외부로 나가지 않습니다.