.JPG 포맷은 어떻게 작동하는가 *인간 인지를 통한 이미지 압축 이해*

발행: (2026년 1월 6일 오후 10:03 GMT+9)
14 min read
원문: Dev.to

Source: Dev.to

JPG 포맷은 어떻게 작동할까? 인간 인지를 통한 이미지 압축 이해

JPEG(또는 JPG)는 오늘날 가장 널리 사용되는 이미지 압축 포맷 중 하나이며, 사진을 웹에 올리거나 디지털 카메라에서 저장할 때 흔히 마주하게 됩니다. 이 글에서는 JPEG가 그리고 어떻게 작동하는지, 특히 인간 시각 시스템에 기반한 압축 기법을 중심으로 살펴보겠습니다.


1. 인간 시각 시스템과 압축

1.1 인간 눈은 색상을 어떻게 인식할까?

  • 삼원색(레드, 그린, 블루): 인간의 망막에는 L(긴 파장), M(중간 파장), S(짧은 파장) 라는 세 종류의 원추세포가 있어 색을 감지합니다.
  • 채도와 명도: 인간은 색상의 **채도(채도)**와 **명도(밝기)**를 색상 자체보다 더 민감하게 구분합니다.

1.2 인간 눈은 세부 정보를 어떻게 처리할까?

  • 주변 시야 vs 중심 시야: 시야 중심(황반)에서는 고해상도 정보를 처리하지만, 주변부에서는 저해상도 정보를 주로 사용합니다.
  • 주파수 감도: 인간은 저주파(큰 구조) 정보를 고주파(미세 디테일)보다 더 잘 인식합니다.

핵심 포인트: JPEG는 이러한 인간 시각 특성을 활용해 눈에 덜 띄는 정보를 과감히 버립니다.


2. JPEG 압축 파이프라인

아래는 JPEG 압축 과정의 전형적인 흐름도입니다.

flowchart TD
    A[입력 이미지 (RGB)] --> B[색 공간 변환 (YCbCr)]
    B --> C[블록 분할 (8x8 픽셀)]
    C --> D[이산 코사인 변환 (DCT)]
    D --> E[양자화 (Quantization)]
    E --> F[엔트로피 코딩 (Huffman / RLE)]
    F --> G[압축된 JPEG 파일]

2.1 색 공간 변환 (RGB → YCbCr)

  • Y(휘도): 밝기 정보를 담고, 인간이 가장 민감하게 인식합니다.
  • Cb, Cr(색차): 색 차 정보를 담으며, 인간은 휘도보다 색 차에 덜 민감합니다.
  • 채도 다운샘플링: 일반적으로 4:2:0, 4:2:2 같은 비율로 Cb와 Cr을 샘플링해 데이터 양을 줄입니다.

2.2 8×8 블록으로 나누기

이미지는 8×8 픽셀 블록으로 나뉘며, 각 블록은 독립적으로 처리됩니다. 이는 DCT가 효율적으로 작동하도록 하기 위함입니다.

2.3 이산 코사인 변환 (DCT)

  • 공간 도메인(픽셀 값)을 주파수 도메인으로 변환합니다.
  • 블록의 좌측 상단에 위치한 DC 계수는 평균 밝기를 나타내고, 나머지 AC 계수는 변화량(고주파)을 나타냅니다.

2.4 양자화 (Quantization)

Quantized = round(DCT_coeff / Quantization_Table)
  • 인간이 덜 민감한 고주파 AC 계수는 큰 양자화 스텝을 사용해 더 많이 버립니다.
  • 양자화 테이블은 품질 설정에 따라 달라지며, 품질이 높을수록 작은 스텝을 사용합니다.

2.5 엔트로피 코딩

  • 런-길이 인코딩(RLE): 연속된 0을 압축합니다.
  • 허프만 코딩: 빈도가 높은 심볼에 짧은 비트를 할당해 전체 비트 수를 최소화합니다.

3. JPEG 디코딩 (복원) 과정

디코딩은 위 과정을 역순으로 수행합니다.

  1. 허프만 디코딩 → RLE 복원
  2. 양자화 역변환 (양자화 테이블을 사용해 원래 DCT 계수 근사값을 복원)
  3. 역 DCT (주파수 → 공간)
  4. 블록 결합 → 색 공간 역변환 (YCbCr → RGB)

디코딩 과정에서도 손실이 발생합니다. 특히 양자화 단계가 비가역적이기 때문에 원본 이미지와 완전히 동일하게 복원되지 않습니다.


4. 실용적인 팁

상황권장 JPEG 품질 설정이유
웹 페이지 썸네일60~70파일 크기를 크게 줄이면서 눈에 띄는 품질 저하 없음
인쇄용 고해상도 사진90~100디테일 보존 필요
모바일 앱에서 실시간 전송50~60네트워크 대역폭 절감
  • 프로그레시브 JPEG: 여러 스캔을 통해 저해상도부터 점진적으로 품질을 높여 보여줍니다. 느린 네트워크 환경에서 유용합니다.
  • Exif 메타데이터: JPEG 파일에 사진 촬영 정보가 포함될 수 있으니, 개인정보 보호가 필요할 경우 메타데이터를 제거하세요.

5. JPEG와 다른 포맷 비교

포맷손실/무손실주요 사용 사례장점단점
JPEG손실사진, 웹 이미지높은 압축률, 널리 지원품질 저하, 색상 변형
PNG무손실아이콘, 로고, 투명 이미지품질 유지, 알파 채널파일 크기 큼
WebP손실/무손실웹 최적화JPEG보다 25~35% 작은 파일구형 브라우저 호환성 이슈
HEIF/HEIC손실/무손실최신 스마트폰 사진뛰어난 압축 효율지원 범위 제한

6. 결론

JPEG는 인간 시각 시스템을 모델링한 양자화주파수 기반 변환을 결합해 효율적인 이미지 압축을 구현합니다. 이해를 돕기 위해 핵심 단계들을 살펴보았으며, 실제 작업에 적용할 수 있는 팁도 제공했습니다.

요약: JPEG는 인간이 눈치채기 어려운 정보를 과감히 버리는 방식으로, 높은 압축률과 적당한 품질을 동시에 달성합니다. 이 원리를 알면 이미지 품질을 조절하거나, 다른 포맷과 비교할 때 더 현명한 선택을 할 수 있습니다.

JPG가 이렇게 잘 작동하는 이유

Joint Photographic Experts Group (JPG) 형식은 1992년에 도입되었으며, 다음과 같은 간단한 통찰에 기반합니다:

인간의 눈은 색상의 변화보다 밝기 변화에 훨씬 더 민감하다.

현대 카메라 센서는 우리 눈이 인식할 수 있는 것보다 훨씬 많은 정보를 포착합니다. JPG 압축은 이 차이를 이용해 파일 크기를 크게 줄이면서도 인지되는 이미지 품질을 유지합니다.

JPG 압축의 핵심 단계

  1. 색 공간 변환

    • 이미지는 일반적으로 RGB(Red, Green, Blue) 형태로 저장됩니다.
    • JPG는 RGB를 YCbCr 로 변환하여 밝기와 색상을 분리합니다:
      • Y → 휘도(밝기)
      • Cb → 파란색 크로마
      • Cr → 빨간색 크로마

    이 분리를 통해 알고리즘은 인간이 가장 눈에 띄는 밝기를 보존하면서 색상 데이터를 더 공격적으로 압축할 수 있습니다.

  2. 블록 분할

    • 이미지는 보통 8 × 8 픽셀 크기의 작은 블록으로 나뉩니다.
    • 각 블록은 독립적으로, 그리고 지역적인 디테일에 따라 서로 다른 수준으로 압축될 수 있습니다.
    • 과도한 압축은 눈에 보이는 블록 아티팩트를 생성할 수 있습니다.
  3. 이산 코사인 변환 (DCT)

    • 각 블록은 코사인 기반 변환을 거쳐 주파수 성분으로 변환됩니다.
    • 저주파 → 부드러운 영역(매우 중요)
    • 고주파 → 세밀한 디테일(덜 눈에 띔)

    이는 데이터를 효율적으로 감소시킬 준비를 합니다.

  4. 양자화 (손실 단계)

    • 특히 고주파 색상 데이터의 정밀도를 낮춥니다.
    • 눈에 잘 띄지 않을 정보를 버립니다.
    • 중요한 값을 우선시하기 위해 지그재그 패턴으로 계수를 순회합니다.
    • 이것이 JPG 압축의 유일한 실제 손실 단계이며, JPG를 반복 저장하면 시간이 지날수록 품질이 저하되는 이유입니다.
  5. 엔트로피 인코딩 및 재구성

    • 압축된 데이터는 엔트로피 인코딩되어 .jpg 파일에 담깁니다.
    • 디코딩 시 데이터는 다시 RGB로 변환됩니다.
    • 결과 이미지가 우리에게는 “같아 보이지만” 실제 데이터 양은 크게 감소합니다.

블록 크기와 양자화의 영향

효과작은 블록큰 블록
디테일디테일이 높고 파일이 커짐압축률이 높아지지만 눈에 띄는 아티팩트 발생
일반적인 결과섬세한 질감 보존에 유리높은 압축 시 눈에 띄는 블록 현상

실제로 JPG는 ≈ 75 %의 색상 디테일을 버리는 동시에 휘도는 거의 손상되지 않도록 유지합니다—사진에 매우 적합한 트레이드‑오프입니다.

JPG vs. PNG – 빠른 비교

FeatureJPGPNG
CompressionLossy (손실 압축)Lossless (무손실 압축)
Transparency❌ 없음✅ 있음
Best for사진UI, 로고, 텍스트
Typical file size더 작음더 큼

PNG Variants

VariantColour depthTransparencyTypical use
PNG‑8제한된 팔레트 (256색)단색 투명도간단한 그래픽, 아이콘
PNG‑32수백만 색진정한 알파 (전체 범위)UI 요소, 고품질 그래픽

Colour Models: Light‑Based vs. Ink‑Based

ModelComponentsInterpretation
RGB (빛 기반)빨강, 초록, 파랑검정 = 빛 없음, 흰색 = 전체 강도
CMYK (잉크 기반)시안, 마젠타, 노랑, 검정인쇄에 사용됨; RGB에서 색상 변환 필요

JPG/PNG는 화면‑중심 포맷이기 때문에 인쇄 전용이 아닙니다. 전문적인 출력물을 위해서는 인쇄‑준비 색상 공간(예: CMYK)으로 변환해야 합니다.

올바른 포맷 선택

사용 사례권장 포맷
📸 사진 촬영JPG
🎨 UI / 로고 / 투명도PNG
🌐 대역폭에 민감한 앱JPG
🖨️ 전문 인쇄인쇄 전용 포맷으로 변환 (예: TIFF, PDF, 또는 CMYK 인코딩 PNG)

JPG가 어떻게 작동하는지 이해하면 품질, 성능 및 저장 공간을 실제로 제어할 수 있습니다—단순히 내보내기 대화상자의 슬라이더가 아니라.

토론

프로젝트에서 JPG와 PNG 사이의 품질 차이를 눈치채신 적 있나요? 어떤 포맷을 주로 사용하시며—그 이유는 무엇인가요?

Read the original article on freeCodeCamp

Back to Blog

관련 글

더 보기 »