처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.08.01 32

JPEG는 어떻게 이미지를 버려서 용량을 줄이나: 손실 압축의 원리

Hacker News 원문 보기

1992년에 표준화된 JPEG는 기술 세계의 기준으로 보면 이미 여러 세대 전에 사라졌어야 할 나이다. 그럼에도 웹, 카메라, 메신저 어디에서나 여전히 기본 이미지 포맷으로 살아남아 있다. 이 오래된 규격이 왜 이렇게 끈질기게 쓰이는지 이해하려면, JPEG가 파일 크기를 줄이기 위해 정확히 무엇을 '버리는지'를 들여다볼 필요가 있다. 원문은 웹페이지 안에서 직접 조작할 수 있는 인터랙티브 압축기를 제공하며 그 과정을 단계별로 설명하는데, 핵심은 사람의 눈이 잘 알아채지 못하는 정보를 골라서 제거한다는 발상에 있다.

압축의 일반 원리는 반복되는 패턴을 짧은 기호로 바꾸는 것이다. 긴 단어를 약자로 줄이는 것과 비슷하다. 그런데 사진이나 음향처럼 잡음이 많은 데이터는 반복 패턴이 잘 드러나지 않아 이 방식으로는 별로 줄지 않는다. 그래서 등장한 것이 손실 압축(lossy compression)이다. 원문의 비유를 빌리면, 책을 디지털이나 마이크로필름으로 옮겨 보관하는 것이 무손실 압축이라면, 아무도 읽지 않는 책을 아예 태워버리는 것이 손실 압축이다. 관건은 '아무도 신경 쓰지 않는 정보'를 골라내는 안목이며, JPEG는 이를 인간 시각의 두 가지 특성에 기대어 결정한다. 하나는 색보다 밝기가 더 중요하다는 점, 다른 하나는 급격한 변화(고주파)보다 완만한 변화(저주파)가 더 중요하다는 점이다.

밝기를 색에서 분리한다

일반적인 디지털 이미지는 각 픽셀을 빨강·초록·파랑(RGB) 세 값으로 저장한다. 문제는 밝기 정보가 이 세 채널에 고르게 흩어져 있어 따로 다루기 어렵다는 것이다. JPEG는 먼저 색 공간을 RGB에서 YCbCr로 변환한다. 이렇게 하면 밝기 정보는 전부 Y 채널 하나에 모이고, 색 정보는 Cb와 Cr 두 채널로 나뉜다. 밝기가 빠져나간 Cb·Cr 채널은 흐릿하게 '진흙 같은' 모습이 된다.

이 분리의 실익은 다음 단계에서 나온다. 사람 눈이 색 해상도에는 둔감하다는 점을 이용해, JPEG는 Y 채널은 원래 크기 그대로 두고 Cb·Cr 채널만 축소한다. 표준은 색 정보를 전부 유지하거나 절반, 혹은 4분의 1만 남기는 선택지를 허용한다. 일반 사진 앱은 보통 절반을, 영상은 4분의 1을 남긴다. 원문의 데모는 효과를 강조하려고 4분의 1을 택했는데, 이 단계만으로 3개의 온전한 채널이 1개의 온전한 채널과 4분의 1짜리 두 채널, 합쳐서 1과 2분의 1 분량으로 줄어든다. 아직 본격적인 압축을 시작하기도 전에 데이터가 절반이 된 셈이다.

주파수로 바꾼 뒤 정밀도를 깎는다

다음으로 각 채널을 8×8 픽셀 블록으로 나누고, 2차원 이산 코사인 변환(DCT)을 적용해 공간 영역에서 주파수 영역으로 바꾼다. 변환 전에는 블록 안 위치가 이미지 속 픽셀 위치를 뜻했지만, 변환 후에는 위치가 주파수 대역을 뜻한다. 블록의 왼쪽 위 구석이 가장 낮은 주파수, 오른쪽 아래 구석이 가장 높은 주파수다. 하늘처럼 변화가 적은 영역은 저주파 점 하나만 남고 나머지가 텅 비지만, 벽돌 질감처럼 복잡한 영역은 블록 전체가 고주파 값으로 채워진다.

품질(quality) 값이 개입하는 곳이 바로 이 지점이다. JPEG는 밝기용과 색용 두 개의 8×8 양자화 테이블을 두고, 각 블록의 주파수 값을 대응하는 테이블 값으로 나눈 뒤 소수점을 버리고 반올림한다. 사람이 덜 민감한 고주파 영역과 색 채널의 테이블 값은 크게 잡혀 있어 그만큼 정보가 더 많이 깎인다. 흥미로운 점은 이 과정으로 데이터 개수 자체는 줄지 않는다는 것이다. 대신 큰 수로 나누어 반올림할수록 값들이 0이나 작은 정수로 수렴해 반복이 많아지고, 그 결과 뒤이어 적용되는 무손실 압축이 훨씬 잘 먹힌다. 여기에 각 블록의 값을 저주파에서 고주파 순서로 읽는 지그재그 배열까지 더해, 심하게 깎인 작은 수들이 나란히 모이며 압축 효율을 끌어올린다.

되돌릴 때 드러나는 한계

이미지를 다시 읽을 때는 이 과정을 거꾸로 밟는다. 무손실 압축을 풀고, 이번엔 테이블 값으로 나누는 대신 곱해 양자화를 역산하며, 역 DCT로 주파수를 다시 공간 영역으로 되돌린다. 다만 인코딩 때 반올림으로 버린 소수점은 영영 복원되지 않으므로, 되살아난 값은 원본의 근사치일 뿐이다. 품질을 낮게 잡았을수록 나눗셈 제수가 커지고, 그만큼 복원 정확도는 떨어진다. 마지막으로 축소했던 Cb·Cr 색 채널을 원래 크기로 다시 키우는데, 사라진 픽셀은 주변 값을 평균 내 채워 넣는 보간으로 메운다. 어떤 보간법을 쓰든 완벽하지 않아 결과물은 다소 뭉개지거나 블록처럼 각지게 나타난다.

실무자 입장에서 이 구조는 몇 가지 판단 기준을 시사한다. JPEG의 화질 저하가 왜 하늘 같은 평탄한 영역보다 텍스트나 날카로운 경계에서 먼저 두드러지는지, 왜 색이 번지는 아티팩트가 밝기 뭉개짐보다 눈에 덜 띄는지가 모두 이 파이프라인에서 설명된다. 로고나 스크린샷처럼 경계가 뚜렷한 이미지를 JPEG로 저장하면 링잉과 블록 노이즈가 심해지는 이유이기도 하다. 결국 JPEG의 30여 년 생명력은 화려한 알고리즘이 아니라, 사람의 시각이 무엇을 놓치는지를 정확히 겨냥해 그 부분만 골라 버리는 설계에서 나온다. 다만 그 전제가 어긋나는 콘텐츠에서는 손실이 그대로 눈에 보이며, 이 지점이 무손실 PNG나 이후 등장한 포맷들과의 선택 기준이 된다.

이 뉴스가 유용했나요?

TTJ 코딩클래스 정규반

월급 외 수입,
코딩으로 만들 수 있습니다

17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.

144+실전 강의
17개수익 모델
4.9수강생 평점
정규반 자세히 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.