1. 개요
데이터 압축은 같은 내용을 저장하거나 전송하는 데 필요한 데이터량을 줄이는 표현 변환이다. 핵심은 단순히 파일을 작게 만드는 데 있지 않다. 압축을 푼 뒤 무엇을 그대로 복원해야 하는지, 어떤 변화까지 허용할 수 있는지, 줄어든 크기가 그 손실을 감수할 만큼 가치가 있는지를 함께 판단해야 한다. 이 문제는 이진수와 정보 표현, 데이터 무결성 검증, 검색 엔진의 작동 원리, 기계학습의 학습 과정, 인터넷 주소 체계와 이어진다.
이 문서의 시각자료는 세 역할로 나뉜다. 첫 그래프는 같은 폭포 사진을 여러 JPEG 품질 설정으로 다시 인코딩한 실제 측정값을, 다음 다이어그램은 무손실·손실 복원의 원리를, 실제 마사 폭포 사진은 측정에 사용한 장면의 질감과 경계 맥락을 보여 준다. 사진 자체를 보고 파일 크기나 PSNR을 추정할 수는 없다.
2. 상세
2.1. 무엇을 줄이는가 — 반복과 표현 비용
압축기는 입력에 반복되는 패턴이 있거나 더 짧게 표현할 수 있는 구조가 있는지를 찾는다. 무손실 압축은 이 구조를 이용하되 복원 때 입력 데이터를 정확히 되살릴 정보를 남긴다. 손실 압축은 사람이 쓰는 목적에서 덜 중요하다고 정한 세부를 줄이거나 더 거칠게 표현해 크기를 더 낮출 수 있다. 따라서 압축 결과는 파일 형식 이름만으로 결정되지 않고 입력 내용, 해상도, 인코더와 설정의 영향을 함께 받는다.
압축 전후의 크기를 비교할 때도 기준을 먼저 확인해야 한다. 디코딩된 RGB 픽셀 배열, 카메라가 만든 JPEG, PNG 파일은 서로 다른 표현이므로 같은 수치처럼 놓을 수 없다. “몇 퍼센트 압축했다”는 말에는 무엇을 분모로 삼았는지가 따라붙어야 한다.
2.2. 무손실과 손실 — 복원 기준의 차이
무손실 압축은 압축을 풀었을 때 입력 비트열을 동일하게 복원한다. 프로그램 파일, 문서 원본, 정확한 픽셀 값이 필요한 자료처럼 한 비트의 변화도 문제가 될 수 있는 경우에 적합하다. PNG는 대표적인 무손실 래스터 이미지 형식이다.
손실 압축은 일부 정보를 버리거나 근사해 더 작은 파일을 만든다. JPEG는 사진에 널리 쓰이는 손실 형식이다. 한편 “JPEG는 사진, PNG는 그림”이라는 문장은 절대 법칙이 아니다. 사진의 목적, 투명도 필요 여부, 편집 횟수, 허용 가능한 왜곡과 전송 환경을 함께 보고 형식과 설정을 선택해야 한다. 형식이 같아도 인코더와 품질 설정이 다르면 결과가 달라진다.
2.3. 같은 사진의 통제 실험 — 크기와 픽셀 오차
첫 그래프는 미국 국립공원관리청이 공개한 마사 폭포 사진의 Wikimedia Commons 1920픽셀 JPEG를 입력으로 삼았다. 이를 1067×1600 sRGB 8비트 RGB 배열로 디코딩하고, Sharp 0.34.5·libvips 8.17.3에서 품질 설정만 10·25·40·55·70·85·100으로 바꿨다. 색차 서브샘플링 4:2:0, 비점진 JPEG, 최적화된 허프먼 부호, mozjpeg 미사용 조건은 고정했다. Sharp의 quality는 1~100 범위의 인코더 설정이지 보편적인 화질 백분율이 아니다.
출력 크기는 차례로 70.78·159.19·223.14·279.07·363.59·549.05·1623.30 KiB였다. 같은 파일을 다시 RGB로 풀어 기준 배열과 비교한 PSNR은 24.69·27.34·28.59·29.51·30.73·33.12·42.13 dB였다. 이번 입력과 고정 조건에서는 품질 설정이 높아질수록 파일 크기와 PSNR이 모두 커졌고, 특히 85에서 100 사이의 크기 증가가 컸다. 그러나 이 곡선의 모양과 수치를 다른 사진이나 다른 인코더에 그대로 적용할 수는 없다.
2.4. PSNR은 무엇을 말하고 무엇을 말하지 않는가
MSE는 기준 배열과 복원 배열의 각 RGB 채널 값 차이를 제곱해 평균한 값이다. 8비트 채널에서는 PSNR = 10 log₁₀(255²/MSE)로 계산할 수 있다. PSNR이 클수록 이 기준 배열과의 평균적인 수치 오차가 작다는 뜻이다.
하지만 PSNR은 사람이 느끼는 선명도나 아름다움의 점수가 아니다. 같은 PSNR이어도 왜곡이 얼굴, 글자, 잎사귀처럼 눈에 민감한 위치에 몰리면 체감은 달라질 수 있다. 품질 100의 PSNR도 유한한 42.13 dB였으므로 이 설정 역시 기준 픽셀을 비트 단위로 완전히 복원한 무손실 결과가 아니다.
이번 기준 배열은 이미 JPEG였던 Commons 파일을 디코딩한 값이다. 카메라 앞 실제 장면의 무손실 원본이 아니다. 화면에 보이는 폭포 사진 또한 웹 전송을 위해 WebP로 최적화한 보조본으로, 그래프에 쓰인 일곱 JPEG 출력 파일이나 기준 RGB 배열 그 자체가 아니다. 측정은 재현 스크립트 scripts/wiki/measure-image-compression.mjs에 입력 해시·크기·인코더 옵션·PSNR 식과 함께 고정했다.
3. 수능에서는 이렇게 나온다
압축 지문은 비교 대상보다 비교 조건을 먼저 읽어야 한다.
- 복원 조건을 확인한다. 입력과 완전히 같아야 하면 무손실, 일부 변화를 허용하면 손실의 문제다.
- 독립 변인과 종속 변인을 가른다. 이번 그래프에서는 JPEG 품질 설정만 바꾸고 파일 크기와 PSNR을 측정했다.
- 같은 척도인지 확인한다. KiB는 저장량, dB는 픽셀 오차에서 계산한 PSNR이므로 한 축의 높이만으로 두 값을 직접 비교할 수 없다.
- 일반화 범위를 제한한다. 사진·인코더·색차 처리·해상도가 달라지면 결과가 바뀐다.
- 효율과 보존을 함께 평가한다. 더 작은 파일이 언제나 더 좋은 것도, 더 큰 파일이 언제나 목적에 더 맞는 것도 아니다.
4. 헷갈리기 쉬운 것들
| 흔한 오해 |
왜 틀렸나 |
바르게 이해하기 |
| 품질 70은 원본 화질의 70%다 |
quality는 특정 인코더의 설정값이며 보편적인 백분율이 아니다 |
같은 입력·인코더·옵션 안에서 비교한다 |
| PSNR이 높으면 사람이 반드시 더 좋게 느낀다 |
PSNR은 평균 픽셀 오차 지표이며 지각 품질과 동일하지 않다 |
수치 오차와 사람의 지각 평가를 구분한다 |
| JPEG 품질 100이면 무손실이다 |
이번 결과도 기준 배열과 차이가 남았다 |
손실 형식의 높은 설정과 무손실 복원을 구분한다 |
| 화면의 폭포 사진이 그래프의 측정 파일이다 |
화면 사진은 WebP 보조본이고 그래프는 별도 JPEG 출력들을 측정했다 |
그래프·다이어그램·사진의 역할을 나누어 읽는다 |
| 압축은 보안 기술이다 |
압축은 데이터량을 줄이고, 암호화는 내용을 알아보지 못하게 한다 |
무결성 검증·암호화와 목적을 구분한다 |
5. 관련 개념