JPEG 품질 슬라이더는 퍼센트가 아니다! 80과 100은 대체 무엇이 다른가

이미지를 내보낼 때 그 JPEG 품질 슬라이더를 계속 퍼센트처럼 쓰고 있진 않나요? 80으로 맞추면 “화질을 80%나 지켰다”고 생각하고, 100으로 올리면 “이제 하나도 안 잃었다”고 느껴요.

이 이해는 전부 뒤집어야 해요. 슬라이더의 숫자는 “화질이 몇 퍼센트”라는 것과 아무 관계가 없고, 품질 100도 무손실이 아니에요. 바로 써먹을 수 있는 결론부터 말하자면—사진을 안심하고 보관하려면 85–92, 웹과 소셜 미디어에 올릴 거라면 75–82면 충분해요. 100은 기본값으로 두지 마세요. 파일 크기만 두세 배로 키울 뿐 화질은 전혀 더 좋아지지 않아요. 아래에서 이 슬라이더를 쉽게 풀어볼게요.

한마디로: JPEG 품질 슬라이더가 제어하는 것은 “화질을 얼마나 보존할지”가 아니라 양자화 테이블에 들어 있는 제수(나누는 수)들이 얼마나 가혹한지예요. 제수가 클수록 반올림이 거칠어지고 정보가 더 많이 버려져요. 화질이나 파일 크기와 선형 관계도 아니에요. 100에서 90으로 가는 변화는 20에서 10으로 가는 변화와 같지 않아요.

JPEG 품질 슬라이더는 도대체 무엇을 하는가

먼저 전제부터 짚어볼게요. JPEG는 손실 형식이에요. 저장 버튼을 누르는 순간부터 무언가를 버려요. 슬라이더는 “얼마나 심하게 버릴지”만 정할 뿐, “버릴지 말지”는 정하지 않아요. 버리는 방식에는 정해진 공정이 있고, 슬라이더는 이 라인에서 마지막 관문이에요.

저장할 때 이미지는 먼저 RGB에서 YCbCr로 변환되어 밝기와 색이 두 갈래로 나뉘어요. 이렇게 나누는 이유는 사람 눈이 색보다 밝기를 훨씬 잘 보기 때문이에요. 먼저 분리해야 나중에 밝기를 집중적으로 보존하기 쉬워요.

다음으로 전체 이미지가 8×8 픽셀 블록으로 잘리고, 각 블록에 이산 코사인 변환(DCT)을 적용해 픽셀 색을 일련의 주파수 값으로 바꿔요. 화음을 개별 음표로 나누는 것에 비유할 수 있어요. 저주파는 화면의 바탕색과 그라데이션이고, 고주파는 날카로운 가장자리와 미세한 질감이에요. 이 과정에 대한 자세한 설명은 위키백과 JPEG 항목에 잘 정리되어 있어요.

진짜 결정타는 마지막 단계에 있어요. 각 주파수 값은 양자화 테이블(Quantization Table)에 있는 숫자로 나눈 뒤 반올림해서 정수로 만들어요. 반올림은 정보가 영구히 죽는 지점이에요. 나누어떨어지지 않는 나머지는 그대로 버려지고 돌아오지 않아요. 품질 슬라이더가 관리하는 것은 이 제수들이 얼마나 가혹한지예요. 슬라이더 값이 높으면 제수가 작아져 반올림이 데이터를 거의 해치지 않아요. 슬라이더 값이 낮으면 제수가 커져 반올림이 세부 정보를 곧바로 지워버려요. 고주파 성분의 제수는 더 빠르게 커지기 때문에, 매번 가장 먼저 희생되는 것은 가장자리와 미세 질감이에요.

그래서 퍼센트가 될 수 없어요. 100에서 90으로 내리는 것과 20에서 10으로 내리는 것은 제수의 변화가 전혀 다르고, 화질과 파일 크기의 차이도 완전히 달라요. 90 근처에서 한 칸 움직여도 거의 느끼지 못할 수 있지만, 20 근처에서 한 칸 움직이면 이미지는 크게 손상돼요. 이것을 퍼센트로 이해하는 것이 이 컨트롤에 대한 가장 흔하고 값비싼 오해예요.

왜 품질 100은 무손실이 아닌가

답부터 말하자면, 품질 100이 무손실이 되지 못하는 데에는 두 가지 치명적인 이유가 있어요. 하나는 슬라이더와 무관하고, 하나는 슬라이더를 끝까지 올려도 피할 수 없어요.

첫 번째는 색차 서브샘플링(크로마 서브샘플링)이에요. RGB가 YCbCr로 변환된 뒤, 실제 압축이 시작되기 전에 대부분의 인코더는 이미 색차 세부 정보의 약 75%를 버려요. 이유는 역시 같아요. 사람 눈은 색에 둔감해서 버려도 보이지 않아요. 이 단계는 슬라이더가 전혀 관리하지 않아요. 100으로 설정해도 그대로 실행돼요.

두 번째는 계산 과정 자체가 깔끔하지 않다는 점이에요. 양자화 테이블의 제수를 최소로 낮춰도 “픽셀을 주파수로, 주파수를 다시 픽셀로” 바꾸는 왕복 과정에는 작은 반올림 오차가 남아요. 저장된 파일을 풀어보면 이미 저장 버튼을 눌렀을 때의 그 픽셀들이 아니에요.

정말 1비트도 잃지 않으려면 무손실 경로를 택하세요. PNG, TIFF, 또는 WebP의 무손실 모드예요. 손실은 일방통행이고, JPEG의 어떤 설정도 마찬가지예요. “완벽해” 보이는 100도 예외가 아니에요.

85–92와 75–82, 어떻게 골라야 하는가

수많은 실측과 픽셀 단위 비교는 결국 아주 명확한 경계로 수렴해요. 두 구간이 거의 모든 상황을 커버해요.

85–92는 보존용이에요. 포트폴리오, 고객에게 낼 사진, 손대기 아까운 원본들은 이 구간에 두세요. 품질 90으로 저장한 파일은 대략 압축하지 않은 원본의 1/8에서 1/12 정도이고, 차이는 육안으로 보이지 않아요. 400%로 확대해 특정 작은 부분을 들여다봐야 변화를 겨우 찾아낼 수 있어요.

75–82는 웹용이에요. 웹사이트 이미지, 소셜 미디어 업로드는 이 구간에 두세요. 파일은 보존용보다 40%–60% 더 작아지고, 대가는 주로 복잡한 질감 부분이 약간 뭉개지거나 선명도가 떨어지는 것이지만 일반적으로 보면 거의 알아차리지 못해요.

이전 글 『손실과 무손실』을 봤다면 거기서 제시한 80–85 스위트 스폿은 이 두 구간과 충돌하지 않아요. 80 근처는 원래 웹용 구간에 들어가고, 85는 바로 보존용 구간으로 접어들어요. 이미 80–85로 저장한 이미지는 원본에서 다시 인코딩할 필요는 없어요.

세 구간을 한 문장으로 모으면: 남겨둘 것은 85–92, 내보낼 것은 75–82, 60 이하는 지뢰밭이니 피하세요.

같은 사진의 같은 부분을 JPEG 품질 90·75·35로 내보낸 비교. 90과 75는 구분이 안 되고, 35는 뚜렷이 흐릿하고 블록처럼 보임
같은 부분, 세 번의 실제 내보내기. 품질 90은 102 KB, 품질 75는 62 KB. 보이는 차이 없이 약 40% 작아집니다. 붕괴 구간인 35는 28 KB 더 작지만 이미지는 흐릿하고 블록처럼 됩니다.

내보낼 때 기본값을 100으로 올리는 것은 전략이 아니라 불안이에요. 품질 85 파일은 품질 100보다 60%–75% 작지만 화질상 어떤 차이도 보이지 않아요. 웹에서는 로딩 시간만 공연히 늘어나요. 웹사이트 이미지에 대한 이 계산은 『웹 이미지 속도 향상』 편에서 자세히 따져봤어요.

왜 품질 60 이하부터 무너지는가

슬라이더가 60을 지나 아래로 내려가면 화질은 비탈이 아니라 절벽처럼 떨어져요.

원인은 역시 반올림이에요. 값이 너무 낮으면 고주파 성분의 제수가 터무니없이 커지고, 어떤 주파수 값은 나눈 뒤 반올림하면 바로 0이 돼요. 이 세부 정보는 저장되지 않은 것이나 다름없어요. 그래서 시각 정보의 한 종류가 통째로 사라져요. 머리카락, 직물의 조직, 세리프체의 획 끝이 가장 먼저 사라지는 부류예요.

남은 화면은 표준적인 JPEG 아티팩트예요. 8×8 색 블록이 군데군데 나타나고, 그라데이션에는 띠 모양의 색 밴딩이 생기고, 날카로운 가장자리 주변에는 거친 테두리와 모스키토 노이즈(mosquito noise)가 생겨요. 큰 형태는 남아 있지만 이 이미지는 더 이상 “사람에게 보여주기 위한 이미지”라고 할 수 없어요. 각 아티팩트가 어떤 모습으로 생기는지는 따로 그림으로 풀어 쓴 글이 있어요.

JPEG 품질 90과 품질 30의 확대 비교. 저품질 쪽은 흐릿한 빛줄기, 블록으로 무너진 벽돌 벽, 얼룩진 하늘
60 미만에서 일어나는 일. 두 줄 모두 같은 위치를 3배 확대. 왼쪽이 품질 90, 오른쪽이 품질 30. 위 줄은 빛줄기와 벽돌 벽: 가는 선이 먼저 사라지고 줄눈이 블록으로 무너집니다. 아래 줄은 하늘과 벽의 경계: 매끄러운 그라데이션에 얼룩무늬가 생기고 가장자리가 번집니다.

그래서 제 결론은 이거예요. 60이 일반 이미지의 실질적 하한선이에요. 60보다 더 낮춰서 아끼는 몇 KB는 한눈에 봐도 가짜처럼 보이는 결과와 바꾸는 셈이니 가치가 없어요.

같은 품질 90이어도 소프트웨어마다 내보낸 결과가 다르다

“품질 90”은 어디서나 통하는 기준이 아니에요. JPEG 규격은 권장 양자화 테이블 세트(Annex K)를 제시하지만, 어느 소프트웨어가 어느 테이블을 쓰고 어떻게 스케일링하는지는 각자 정해요. 같은 “고품질”이라도 널리 쓰이는 도구 네 가지가 내놓는 숫자는 완전히 달라요. Photoshop의 눈금은 0–12이고, 그 10은 참조 구현인 libjpeg의 90에 대략 해당해요. GIMP와 ImageMagick은 둘 다 1–100 눈금이고, GIMP의 “고품질” 설정은 85, ImageMagick은 92를 써요. libjpeg는 참조 구현으로서 자체 참조값이 90이에요.

두 도구 모두 “품질 85”로 설정해도 내보낸 파일은 같지 않아요. 그러니 한 소프트웨어에서 외운 숫자를 다른 소프트웨어에 그대로 적용하지 마세요. 소프트웨어와 프로젝트를 넘나들며 비교할 때 믿을 수 있는 방법은 두 가지뿐이에요. 실제 출력 파일 크기를 보고, 실제 화면 결과를 보는 거예요.

육안보다 믿을 만한 척도: SSIM

슬라이더는 믿을 수 없고, 육안은 화면과 컨디션에 영향을 받아요. “차이를 못 보겠다”는 것을 그래도 정량화할 수 있을까요? 할 수 있어요. 훨씬 믿을 만한 방법은 다른 척도로 바꾸는 거예요. 구조적 유사도 지수(SSIM, Structural Similarity Index Measure)예요.

이것은 픽셀을 하나씩 비교하지 않고 구조, 밝기, 대비 세 가지가 얼마나 변했는지 봐요. “몇 개 픽셀이 다른지 세는” 방식보다 사람 눈이 이미지를 판단하는 방식에 더 가까워요. 점수는 0에서 1까지이고, 1이면 두 이미지가 완전히 같아요. 공식과 유래는 위키백과 SSIM 항목에 잘 설명되어 있어요.

흔한 품질 구간에 대해 SSIM은 대략 이런 수준이에요. 품질 85 파일은 보통 0.97보다 높은 점수를 받아 원본과 시각적으로 구분되지 않아요. 60으로 떨어지면 점수는 0.90–0.93에 머물고 약간 흐려지며 확대해야 겨우 보여요. 40이 되면 0.82–0.87밖에 남지 않고 아티팩트가 육안으로 보여요.

이 숫자들은 슬라이더보다 훨씬 정직해요. 추측에 기대지 않고 품질을 정하려면 ImageMagick의 compare 명령으로 두 이미지의 SSIM을 직접 계산해 “파일 크기를 최대한 줄이면서도 0.85라는 인지 한계선 아래로 떨어지지 않는” 지점을 찾으면 돼요. 이 척도의 사용법은 『SSIM 심층 설명』에 따로 썼어요.

직접 해보기: 슬라이더·SSIM·최적 품질

아래 작은 도구는 모두 브라우저 안에서 동작하며 이미지는 어디로도 전송되지 않습니다. 이미지를 고르고(또는 “샘플 이미지로 체험” 클릭) 슬라이더를 움직이며 압축 후 크기와 SSIM 변화를 관찰할 수 있어요. SSIM ≥ 0.85에서 가장 작은 크기가 되는 설정을 자동 탐색할 수도 있습니다. SSIM 값은 방금 압축한 이미지에 대해 실시간으로 계산됩니다. 바로 앞 섹션의 그 척도예요.

원본
압축 후 (현재 품질)
차분 (버려진 세부)
크기: —
SSIM: —
—
확대 원본/압축 후
차분 강조 흰색 = 버려진 세부. 밝을수록 손실이 큼
소프트웨어 간 품질 변환기 (같은 숫자도 소프트웨어마다 의미가 다름. 그대로 가져오지 마세요)

참고: 브라우저 내장 JPEG 인코더는 크로마 서브샘플링과 양자화 테이블을 공개하지 않습니다. 이 도구는 슬라이더의 실제 효과를 보여주고 차분을 SSIM으로 정량화하는 것이지, 인코더 내부를 설정 가능하게 하는 것이 아닙니다. 그리고 이 글의 주장을 그대로 뒷받침합니다. 품질 100은 무손실이 아니고, 같은 숫자도 소프트웨어마다 의미가 다르다는 것 말입니다.

자주 묻는 질문

JPEG 품질은 80으로 두는 게 좋아요, 100이 좋아요?

대부분의 경우 80 근처면 충분하고, 100은 기본값이 되어서는 안 돼요. 품질 85 파일은 품질 100보다 60%–75% 작지만 육안으로는 어떤 차이도 보이지 않아요. 사진을 안전하게 보관하려면 85–92, 웹과 소셜 미디어는 75–82면 충분하고, 60 미만은 뚜렷한 아티팩트가 생겨요.

JPEG 품질 100은 무손실인가요?

아니에요. 100으로 최대치를 올려도 JPEG는 보통 먼저 색차 서브샘플링에서 색차 세부 정보의 약 75%를 버리고, 그다음 양자화와 반올림으로 돌이킬 수 없는 손실을 만들어요. 무손실을 원하면 PNG, TIFF 또는 무손실 WebP를 사용하세요.

왜 Photoshop에서는 품질 85를 찾을 수 없나요?

Photoshop의 JPEG 품질 눈금은 1–100이 아니라 0–12이고, 그 10은 참조 구현인 libjpeg의 90에 대략 해당해요. 소프트웨어마다 같은 숫자의 매핑이 다르니까, 소프트웨어를 넘나들 때 숫자를 그대로 적용하지 말고 실제 출력 파일 크기와 화면 결과를 기준으로 삼으세요.

이미지가 압축된 뒤 화질이 뚜렷하게 나빠졌는지 어떻게 판단하나요?

원본과 확대 비교하는 것이 가장 직접적이에요. 객관적 지표가 필요하면 SSIM을 사용하세요. 품질 85 JPEG는 보통 SSIM이 0.97보다 높아 원본과 시각적으로 구분되지 않아요. 40 정도면 0.82–0.87로 떨어져 아티팩트가 육안으로 보여요. ImageMagick의 compare 명령으로 이 점수를 바로 계산할 수 있어요.

마지막으로

슬라이더의 그 숫자는 제수(나누는 수)를 정하는 값이지 화질 퍼센트가 아니에요. 100은 무손실이 아니고, 60 이하는 절벽이에요. 정말 한 문장으로 외우고 싶다면: 사진은 85로 저장하고, 웹에 올릴 것은 80으로 저장하며, 100은 어디에도 쓸 필요가 없어요—파일만 두 배가 되고 화질은 전혀 오르지 않아요.

형식 선택, 크기 조정부터 품질 조정과 웹 속도 향상까지 쭉 이어서 보려면 『이미지 압축 완전 가이드』를 보세요. 전체 흐름이 그 한 편에 들어 있어요.