심층 분석

손실 vs 무손실: 이미지 포맷이 일부러 잊는 이유

koboshiCo-founder
·10분 읽기
손실 vs 무손실: 이미지 포맷이 일부러 잊는 이유
요약

무손실 압축은 데이터를 바꾸지 않고 다시 포장하고, 손실 압축은 데이터를 먼저 바꾼 다음 포장한다. 이 선택 하나가 사진이 JPEG으로는 10:1로 압축되고 PNG으로는 겨우 2:1에 그치는 이유, JPEG이 1992년에 손실 방식으로 만들어진 이유, PNG이 1995년에 무손실로 만들어진 이유, 최신 코덱이 두 모드를 모두 탑재하게 된 이유를 설명해 준다.

같은 12 MP 사진(4000 × 3000 픽셀)을 두 번 저장해 보자. 한 번은 PNG로 24 MB, 한 번은 품질 90의 JPEG으로 3.4 MB. 화면에 나란히 띄워 놓고 볼 때는 구분이 안 된다. 400%까지 확대해야 그제야 차이가 드러난다. 머리칼과 풀밭이 살짝 부드러워지고, 가장 선명한 가장자리 주변에 희미한 헤일로가 번진다.

파일은 두 개, 이미지는 하나, 크기는 7배 차이. 그런데 어느 쪽도 망가진 파일이 아니다. 지키기로 한 약속이 다를 뿐이다. PNG은 모든 비트를 빠짐없이 지키겠다는 약속을 했고, JPEG은 보는 사람이 눈치챌 만한 것은 모두 지키겠다는 약속을 했다. 이미지 포맷에 관한 거의 모든 것이 이 약속의 차이에서 갈린다.

압축이 두 갈래로 갈라진 이유

1948년, Claude Shannon이 "A Mathematical Theory of Communication"을 발표하면서 압축에는 넘을 수 없는 하한이 생겼다. 그의 정보원 부호화 정리에 의하면 데이터를 엔트로피, 즉 기호당 평균 정보의 양보다 작게 무손실로 표현하는 것은 불가능하다. 완전히 무작위인 이미지는 조금도 압축되지 않고, 순백의 이미지는 거의 0에 가깝게 줄어든다. 실제 이미지는 그 사이 어딘가에 있고, 어떤 무손실 알고리즘도 이 한계를 넘지 못한다.

손실 압축은 이 법칙의 빈틈에서 나왔다. 엔트로피의 하한은 원래 가진 데이터가 아니라 최종적으로 남길 데이터에 적용된다. 그러니 이미지를 먼저 살짝 다른, 엔트로피가 더 낮은 이미지로 바꿔 버리면 하한도 같이 낮아진다. 이것이 손실 압축의 전부다. 데이터를 먼저 바꾸고, 그다음 포장한다. 남은 문제는 어떤 변경까지 허용할 수 있느냐다.

그 답은 두 가지에 달렸다. 첫째는 이미지의 내용이다. 설정 패널 스크린샷은 단색과 반복되는 도형이 대부분이라 엔트로피가 낮고 예측이 쉽다. 숲 사진은 픽셀 단위로 볼 때 광자 샷 노이즈와 센서 리드 노이즈 투성이라 엔트로피가 높고 예측이 어렵다. 둘째는 그 파일을 읽는 주체다. 프로그램은 비트 하나하나가 정확해야 한다. 반면 사람의 눈에는 태생적인 오차 허용 범위가 있다. 색상의 공간 분해능이 낮고, 미세한 고주파 질감에는 둔감하며, 밝기는 절대값이 아니라 비율로 인지한다(베버의 법칙에 의하면 휘도는 대략 1~2% 차이부터 구분한다).

그래서 포맷이 갈라졌다. 내용이 예측 가능하고 읽는 주체가 기계거나 픽셀을 확대해 보는 사람이라면 무손실이 답이다. 내용이 노이즈투성이고 화면을 팔 길이쯤 떨어져서 보는 사람이 상대라면, 조금 잊어도 괜찮다.

손실 압축은 어떻게 동작하는가

손실 코덱은 흔히 "데이터를 버리는 방식"으로 설명된다. 맞는 말이지만 정확하지는 않다. 아무 데이터나 버리는 게 아니라, 인간 시각 모델이 골라낸 데이터만 버린다. 파이프라인은 이렇다.

  1. RGB를 휘도-색차 색 공간으로 변환한다(JPEG은 YCbCr, 다른 코덱도 비슷한 방식으로 분리한다). 눈은 색상 디테일보다 밝기 디테일을 훨씬 잘 구분하므로 크로마 채널은 4분의 1 해상도로 저장할 수 있다(4:2:0 서브샘플링). 이 단계 하나로 원본 데이터가 대략 50% 줄어드는데, 대부분의 사진에서는 눈에 띄지 않는다.

  2. 각 블록을 주파수로 변환한다. JPEG은 8 × 8 블록에 이산 코사인 변환을 적용하고, JPEG 2000은 웨이블릿을 쓰며, AV1과 HEVC는 더 크고 가변적인 크기의 변환을 쓴다. 결과는 언제나 같은 형태다. 큰 계수 몇 개가 전체적인 형태를 담고, 작은 계수 수십 개가 미세한 질감을 담는다.

  3. 양자화한다. 모든 계수를 스텝 크기로 나눈 뒤 정수로 반올림한다. 작은 계수는 0이 된다. 전체 파이프라인에서 손실이 발생하는 단계는 여기뿐이며, 인코더의 품질 설정이라는 것은 결국 이 스텝 크기에 곱하는 배율일 뿐이다. 품질 95는 작은 스텝으로 거의 모든 것을 남기고, 품질 30은 큰 스텝으로 미세한 질감 대부분을 지워 버린다.

  4. 살아남은 값을 엔트로피 부호화한다. 지그재그 스캔, 런렝스 부호화, 허프만 또는 산술 부호화가 여기서 쓰인다. 이 단계는 무손실이다. 이미 양자화된 숫자를 효율적으로 포장할 뿐이다.

위 목록을 한번 더 읽어 보자. 1, 2, 4단계는 전부 되돌릴 수 있는 처리다. 이미지가 실제로 망가지는 지점은 3단계 하나다. 의도적으로, 반올림 오차를 하나씩 쌓아 가면서.

이 파괴에는 특유의 흔적이 남는다. 품질을 너무 낮추면 블로킹(하늘이나 벽에 8 × 8 격자가 드러나는 현상), 링잉(텍스트와 고대비 가장자리 주변에 생기는 헤일로), 컬러 밴드(부드러운 그라데이션이 계단처럼 끊기는 현상)이 나타난다. 손실 파일을 다시 저장하면 이미 손상된 데이터 위에서 파이프라인이 다시 돌아간다. 세대 손실이 이렇게 쌓여서, 열 번쯤 다시 저장한 JPEG은 원본의 수채화처럼 보이게 된다.

무손실 압축은 어떻게 동작하는가

무손실 코덱에는 이런 재량이 없다. 디코딩된 파일은 원본과 비트 단위까지 일치해야 하므로 할 수 있는 일은 예측하고 포장하는 것뿐이다. 기본 구조는 두 단계다.

1단계: 상관관계 제거. PNG은 압축 전에 모든 스캔라인을 필터링한다. 인코더는 각 행마다 다섯 가지 예측기(None, Sub, Up, Average, Paeth) 중 하나를 골라, 실제 픽셀 값과 예측 값의 차이를 저장한다. 순백색 행 하나는 흰 픽셀 하나에 0 수천 개가 붙은 형태가 되고, 부드러운 그라데이션은 작고 천천히 변하는 잔차가 된다. 어느 쪽이든 값이 작아져 0 근처에 모이는데, 바로 이 형태가 다음 단계에서 가장 잘 압축된다.

2단계: 엔트로피 부호화. PNG은 DEFLATE를 쓴다. gzip과 zip을 뒷받침하는 바로 그 알고리즘으로, 1970년대 아이디어 두 개를 조합한 것이다. LZ77이 반복되는 바이트 열을 찾아 직전 32 KB 데이터를 가리키는 (거리, 길이) 포인터로 바꾸고, 이어서 허프만 부호화가 자주 나오는 값에는 짧은 비트 코드를, 드문 값에는 긴 코드를 부여한다. 어느 단계에서도 잃는 것은 없다. 압축된 스트림만 있으면 언제든 원본 바이트를 그대로 복원할 수 있다.

이래서 PNG은 스크린샷에는 무척 강하고 사진에는 속수무책이다. 인터페이스 그래픽에는 반복이 넘친다. 똑같은 행, 반복해서 나오는 아이콘, 단색이 길게 이어지는 영역. LZ77이 곳곳에서 일치 구간을 찾아내고, 필터가 남은 부분을 0에 가까운 잔차로 바꿔 준다. 사진에는 반복이 없다. 샷 노이즈 때문에 모든 픽셀이 이웃과 조금씩 다르니 예측은 계속 빗나가고, 잔차는 크고 무작위로 남고, LZ77은 가리킬 대상을 찾지 못한다. 12 MP 사진을 PNG으로 압축하면 원시 픽셀 대비 보통 1.3:1에서 1.6:1에 그친다. 눈으로 보기에 비슷한 품질의 JPEG은 10:1에 이른다.

커진 파일의 대가로 얻는 것은 절대적인 보장이다. PNG을 디코딩해서 픽셀을 해시해 볼 때 그 값은 언제나 원본과 일치한다. OCR에 넣을 스크린샷, 다시 편집할 스캔, 논문이나 법정에 제출될 수도 있는 의료·과학 이미지에서는 이 보장이 전부다.

JPEG이 1992년 손실에 베팅한 이유

Joint Photographic Experts Group은 1986년에 작업을 시작했고, 당시의 제약이 이후의 설계 결정 전부를 설명해 준다. 20 MB 하드 드라이브가 수백 달러였고, 1.44 MB 플로피가 파일을 옮기는 표준 수단이었다. 모뎀은 운이 좋아야 14.4 kbps로 돌아갔다. 압축하지 않은 921 KB짜리 VGA 사진 한 장을 받는 데 대략 9분이 걸렸다. 10:1 손실 버전은 1분이면 도착하지만, 2:1 무손실 버전은 여전히 4분이 넘는다.

위원회가 직접 돌려 본 테스트에서도 결론은 같았다. 무손실로는 더 이상 갈 수 없다. 목표로 삼은 사진 이미지("연속 톤 이미지")에는 그만큼의 중복이 없었다. 그 수치 앞에서 위원회는 남은 유일한 여유분, 즉 "보는 사람" 쪽에서 답을 찾기로 했다.

잘 알려지지 않은 사실이 하나 있다. 1992년에 발표된 표준(ISO/IEC 10918-1)에는 무손실 모드도 들어 있다. DCT를 아예 거치지 않고, 일곱 가지 고정 예측기 중 하나를 골라 최대 세 개의 이웃 픽셀로 값을 예측한 뒤 잔차를 엔트로피 부호화하는 방식이다. PNG이 3년 뒤에 쓰게 될 것과 개념적으로 같은 기법이다. 그러나 이 모드는 거의 구현되지 않았다. 디코더도 인코더도 이 모드를 외면했고, 의료 영상에서 무손실 JPEG이 정말 필요해지자 별도의 표준이 만들어졌다(JPEG-LS, ISO/IEC 14495, 1999).

특허도 피해 가야 했다. JPEG의 산술 부호화 옵션은 IBM의 Q-coder 특허에 얽혀 있었고, 그래서 로열티 프리 베이스라인은 허프만 부호화로 정해졌으며 대부분의 구현은 산술 부호화 쪽은 건드리지도 않았다. 특허가 코덱 설계를 좌우한 것은 1992년이 처음은 아니었다. 그리고 그 문제는 곧 훨씬 심각해진다.

JPEG은 근본적으로 심리시각학에 건 베팅이었다. 압축의 마지막 5배는 수학이 아니라 생물학이다.

PNG이 1995년 무손실에 베팅한 이유

PNG은 기술 프로젝트로 시작한 게 아니다. 법적 비상사태에서 시작됐다.

1994년 12월, Unisys가 GIF를 사용하는 소프트웨어에 라이선스 비용을 받겠다고 발표했다. GIF의 압축이 LZW 알고리즘에 의존하는데, 이 알고리즘이 Unisys가 물려받은 1985년 특허의 적용 대상이었기 때문이다. GIF를 만든 CompuServe는 Unisys와 계약을 맺고 그 비용을 개발자들에게 떠넘겼다. Usenet 그래픽 커뮤니티는 분노했다. GIF는 7년 동안 공짜였고, 초기 웹을 채우던 이미지와 도구 전체가 하루아침에 특허 위에 올라앉은 셈이 됐다.

몇 주 만인 1995년 1월 초, Thomas Boutell이 대안 포맷의 첫 초안을 올렸다. 자원봉사자들이 메일링 리스트에 모여 몇 달 만에 설계를 끝냈다. PNG 1.0은 1996년 10월 W3C 권고로, 이어서 1997년 3월 RFC 2083으로 나왔다.

두 가지 요구 사항만은 논쟁의 대상이 아니었다. 모든 알고리즘은 특허에서 자유로워야 했고, 그 조건을 채운 것이 DEFLATE였다(Phil Katz의 PKZIP에서 온 LZ77과 허프만의 조합을 Jean-loup Gailly와 Mark Adler가 zlib으로 구현한 것). 그리고 포맷은 무조건 무손실이어야 했다. 커뮤니티는 GIF를 대체하려는 중이었다. 화질이 나빠지는 대체재는 나오자마자 무시당했을 게 뻔하고, 특허에 걸리지 않는 알고리즘만 쓴다는 조건에서는 JPEG을 굴리던 지각 부호화 기법을 가져올 여지도 없었다.

무엇을 담을지도 그만큼 중요했다. PNG의 목표는 GIF가 실제로 나르고 다니던 종류의 이미지였다. 로고, 다이어그램, 선화, 아이콘, 스크린샷. 선명한 가장자리와 단색 위주의, 바로 JPEG의 링잉 아티팩트가 가장 잘 드러나는 종류다. 사진까지 노렸다면 DCT를 다시 발명해야 했고, 이미 자리를 잡은 로열티 프리 JPEG과 정면으로 붙어야 했다. PNG은 이길 수 있는 싸움을 골랐고, 그 싸움에서 완전히 이겼다. GIF 특허는 2003년(미국 밖에서는 2004년)에 만료됐지만, 그때는 이미 PNG이 그 자리를 차지한 뒤였다.

그래도 손실이 시장을 차지한 이유

PNG은 틈새를 얻었고, JPEG은 그 나머지 전부를 가져갔다.

이유는 물량이다. 웹 이미지의 압도적 다수는 사진이고, 사진에서 손실 압축은 타협이 아니라 정답에 가까운 도구다. 2025년 Web Almanac 기준으로도 JPEG은 웹에 제공되는 전체 이미지의 약 **57%**를 차지한다. 등장한 지 30년이 지난 시점에도. 소셜 피드, 뉴스 사진, 상품 사진, 부동산 매물 사진은 전부 연속 톤 이미지라서, 품질 75의 손실 인코딩만으로도 사람들이 실제로 쓰는 화면에서는 원본과 구분이 되지 않는다.

경제 논리도 같은 방향으로 민다. 스토리지와 대역폭은 바이트당 과금되는데, 10:1과 2:1은 사소한 차이가 아니다. 비슷한 품질 기준으로 전송 비용이 5배 벌어진다. 페이지 속도는 파일 크기를 따르고, 파일 크기는 압축을 따른다. 카메라와 휴대폰은 기본값이 손실 포맷(JPEG 또는 HEIC)으로 출시되고, 모든 CMS는 손실 썸네일을 만들어 낸다. 소셜 플랫폼은 업로드되는 모든 이미지를 재인코딩한다. 용량을 줄이려는 목적도 있고, 메타데이터와 그 안에 숨어 있을지 모르는 악성 코드를 벗겨 내려는 목적도 있다. 사진가가 완벽한 TIFF를 올려도, 타임라인에 올라가는 것은 품질 85의 JPEG이다.

무손실은 진 것이라기보다, 그 보장이 값어치를 하는 곳으로 물러났다고 보는 게 맞다. 아티팩트가 바로 눈에 띄면서 어차피 압축도 잘 되는 스크린샷과 UI 에셋, 손실 세대가 겹칠 때마다 손상이 쌓이는 편집 파이프라인의 마스터, "대충 비슷하다"가 증거로 통하지 않는 의료·법률·과학 이미지가 그곳이다. 이 틈새 안에서 PNG과 TIFF는 적수가 없다. 다만 트래픽이 몰리는 곳이 아닐 뿐이다.

포맷들의 종착지

포맷연도모드주로 쓰이는 곳
JPEG1992손실(무손실 모드가 있지만 거의 안 씀)사진, 범용 폴백
JPEG 20002000둘 다(손실 9/7, 무손실 5/3 웨이블릿)디지털 시네마, 아카이브
PNG1996무손실스크린샷, UI, 그래픽
GIF1987무손실, 최대 256색간단한 애니메이션, 밈
TIFF1986컨테이너: raw, LZW, ZIP, JPEG인쇄, 스캔, 아카이빙
WebP2010둘 다웹 배포, LCP 이미지의 약 11%
HEIC2015실질적으로 손실(HEVC에 무손실 모드 있음)iPhone 사진
AVIF2019둘 다브라우저에서 최고 손실 압축률
JPEG XL2021둘 다, 무손실 JPEG 재압축까지Safari, 플래그로 켜는 Chrome

두 가지 흐름이 눈에 띈다. 첫째, 새 코덱은 더 이상 편을 들지 않는다. WebP, HEIC, AVIF, JPEG XL은 손실과 무손실 모드를 하나의 표준에 함께 담고, JPEG 2000은 이미 2000년에 그렇게 하고 있었다. 손실 대 무손실이라는 질문은 "어느 포맷이냐"에서 "어느 모드냐"로 옮겨갔다. 둘째, 경계 사례도 계속 나온다. JPEG XL은 기존 JPEG을 무손실로 약 80% 크기까지 재압축할 수 있는데, 이는 두 진영이 30년 동안 서로의 수학을 흡수해 왔기에 가능한 기술이다.

실전에서 선택하기

결정 트리는 짧다.

  • 사진을 게시하는가? 손실이다. 호환성이 중요하면 JPEG, 크기가 중요하면 WebP나 AVIF.
  • 스크린샷, 로고처럼 텍스트와 단색 위주의 이미지를 저장하는가? 무손실이다. PNG.
  • 편집이 목적인가? 마스터는 무손실로 보관하고, 배포용은 손실 포맷으로 내보내되, 손실 파일을 같은 포맷으로 다시 저장하지는 마라. 한 세대가 지날 때마다 손상이 쌓인다.
  • 변환이 목적인가? 입력이 아니라 용도에 맞춰 출력을 골라라. 사진 갤러리에 올릴 PNG 스크린샷이라면 JPEG이나 WebP로 바꾸는 게 맞고, 디자인 파일에 넣을 JPEG이라면 PNG로 바꿔라. 품질이 좋아져서가 아니라(그럴 수는 없다), 더 이상 잃지 않기 위해서다.

이 마지막 지점에서 iPhone 사진을 다루는 사람들이 자주 헷갈린다. HEIC는 이미 손실 방식의 HEVC 압축이다. HEIC를 PNG로 변환한다고 잃어버린 정보가 되살아나지는 않는다. 현재 상태를 그대로 얼려 두고 더 이상의 손실을 막아 줄 뿐인데, 편집할 계획이 있다면 그것만으로도 가치가 있다. 공유가 목적이라면 곧바로 JPEG으로 변환하는 게 정답이다. 우리의 HEIC to JPG, HEIC to PNG, HEIC to WebP 변환기는 변환을 브라우저 안에서 로컬로 처리하므로 파일이 기기를 떠나지 않는다.

같은 논리가 나머지 조합에도 그대로 적용된다. JPEG을 무손실 편집 워크플로우로 옮길 때는 JPG to PNG. 웹에 올릴 PNG 스크린샷을 줄일 때는 PNG to JPG, 파일은 더 작게 하면서 투명도는 지키고 싶다면 PNG to WebP. 반대 방향이라면 WebP to PNGWebP to JPG가 오래된 소프트웨어와의 호환성을 되살려 준다. 비압축 BMP 스캔을 다룬다면 BMP to JPG, BMP to PNG, BMP to WebP가 한 번에 같은 손실-무손실 선택을 제공한다. 문서도 같은 갈림길에 선다. PDF 페이지를 이미지로 내보낼 때는 사진 위주의 페이지라면 PDF to JPG, 텍스트가 선명해야 한다면 PDF to PNG를 고르면 된다.

30년이 흐른 지금, 살아남은 포맷에는 공통점이 있다. 사용자가 무엇을 잊어도 되고 무엇은 잊어서는 안 되는지를 정확히 알고 만들어졌다는 것이다.

더 읽을 블로그 글