SVG 압축이 중요한 이유: 성능 이점과 실제 비교
전후 예제, 웹 성능 이점 및 SVGO와 Tiny SVG를 사용한 실용적인 최적화 시나리오로 SVG 압축의 중요성 이해
SVG 압축이 중요한 이유
문제: 최적화되지 않은 SVG 파일
SVG 파일이 비대해지는 이유
디자이너가 SVG 파일을 내보낼 때 다음이 포함되는 경우가 많습니다:
- 편집기 메타데이터 - 소프트웨어 버전, 플러그인 정보
- 숨겨진 요소 - 보이지 않는 레이어, 안내선, 마스크
- 중복 속성 - 브라우저에 필요하지 않은 기본값
- 비효율적인 경로 데이터 - 과도한 소수점 정밀도
- 사용되지 않는 정의 - 참조되지 않는 그라데이션, 필터
- 주석 - 디자인 노트 및 타임스탬프
실제 예제
최적화 전 (Figma 내보내기):
<svg width="24" height="24" viewBox="0 0 24 24">
<g clip-path="url(#clip0_123_456)">
<path d="M12.0000 2.00000L2.00000 12.0000..." fill="black"/>
</g>
<defs>
<clipPath id="clip0_123_456">
<rect width="24.0000" height="24.0000" fill="white"/>
</clipPath>
</defs>
</svg>크기: 567 바이트
최적화 후:
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2L2 12h3v10h5v-6h4v6h5V12h3L12 2z"/>
</svg>크기: 108 바이트
감소: 80.9% 더 작음! 🎉
SVG 압축이 중요한 이유
1. 파일 크기 감소
일반적인 압축률:
- 단순 아이콘: 60-80% 감소
- 복잡한 일러스트: 30-50% 감소
- 디자인 도구 내보내기: 70-90% 감소
예시: Material Design 아이콘
최적화 전: 2,456 바이트
최적화 후: 428 바이트
감소: 82.6%
2. 더 빠른 페이지 로드 시간
100개 최적화되지 않은 아이콘 × 2 KB = 200 KB
100개 최적화된 아이콘 × 400 바이트 = 40 KB
절약: 160 KB (-80%)
4G 로드 시간: 1.2s → 0.24s
3. 대역폭 비용 절감
월 100만 페이지뷰, 50 KB SVG 자산 웹사이트:
최적화되지 않음: 50 KB × 1,000,000 = 50 GB/월
최적화됨: 12 KB × 1,000,000 = 12 GB/월
절약: 38 GB/월
비용 절감 ($0.10/GB): $3.80/월 = $45.60/년
4. 더 나은 사용자 경험
SVG 최적화로 개선되는 지표:
- ⚡ FCP (First Contentful Paint): 아이콘이 더 빨리 나타남
- 📊 LCP (Largest Contentful Paint): 주요 이미지 빠른 로드
- 🎯 CLS (Cumulative Layout Shift): 레이아웃 이동 방지
- 💪 TBT (Total Blocking Time): JavaScript 파싱 감소
실제 압축 예제
예제 1: 단순 아이콘
최적화 전: 567 바이트
최적화 후: 108 바이트
감소: 80.9%
개선 사항:
- ✅ clip-path 제거
- ✅ 정수로 정밀도 감소
- ✅ defs 제거
- ✅ width/height 제거 (viewBox만 사용)
예제 2: 그라데이션이 있는 로고
최적화 전: 1,156 바이트
최적화 후: 362 바이트
감소: 68.7%
개선 사항:
- ✅ XML 선언 제거
- ✅ 그라데이션 ID 단축
- ✅ 기본값 제거
- ✅ 색상 코드 단축 (#FFFFFF → #fff)
압축 vs 비압축: 나란히 비교
시나리오 1: 아이콘 세트 (100개 아이콘)
| 지표 | 최적화 전 | 최적화 후 | 개선 |
|---|---|---|---|
| 평균 아이콘 크기 | 2.1 KB | 450 바이트 | 78.6% 작음 |
| 총 크기 | 210 KB | 45 KB | 165 KB 절약 |
| Gzip 압축 | 58 KB | 18 KB | 40 KB 절약 |
| 로드 시간 (3G) | 2.1s | 0.6s | 1.5s 빠름 |
| 파싱 시간 | 145ms | 38ms | 107ms 빠름 |
시나리오 2: 전체 웹사이트
포함 사항:
- 1개 로고 (8 KB → 1.2 KB)
- 20개 UI 아이콘 (40 KB → 9 KB)
- 3개 일러스트 (180 KB → 48 KB)
| 지표 | 최적화 전 | 최적화 후 | 개선 |
|---|---|---|---|
| 총 SVG 크기 | 228 KB | 58.2 KB | 169.8 KB 절약 |
| 페이지 로드 시간 | 3.2s | 2.1s | 1.1s 빠름 |
| Lighthouse 점수 | 72 | 94 | +22 점 |
Gzip vs Brotli 압축
Gzip 압축
최적화 전 SVG: 12.5 KB → 3.8 KB (gzip) = 69.6% 감소
최적화 후 SVG: 4.2 KB → 1.9 KB (gzip) = 54.8% 감소
결합 최적화 + gzip:
12.5 KB → 1.9 KB = 84.8% 총 감소
Brotli 압축 (더 나음)
최적화 전 SVG: 12.5 KB → 3.2 KB (brotli) = 74.4% 감소
최적화 후 SVG: 4.2 KB → 1.6 KB (brotli) = 61.9% 감소
결합 최적화 + brotli:
12.5 KB → 1.6 KB = 87.2% 총 감소
SVG 파일 최적화 방법
방법 1: Tiny SVG 사용 (이 도구!)
단계:
- Tiny SVG 웹사이트 방문
- SVG 업로드 또는 붙여넣기
- 설정 조정 (multipass, 정밀도)
- 최적화된 SVG 다운로드
구성:
✅ Multipass: 켜기
✅ 숫자 정밀도: 2
✅ 변환 정밀도: 4
✅ 주석 제거: 켜기
✅ 메타데이터 제거: 켜기
방법 2: 명령줄 (SVGO)
# 설치
npm install -g svgo
# 단일 파일
svgo input.svg -o output.svg
# 여러 파일
svgo icons/*.svg -o icons-optimized/
# 옵션 포함
svgo input.svg --multipass --precision=2 -o output.svg방법 3: 빌드 도구 통합
Vite
// vite.config.ts
import svgr from 'vite-plugin-svgr'
export default defineConfig({
plugins: [
svgr({
svgrOptions: {
plugins: ['@svgr/plugin-svgo'],
svgoConfig: {
multipass: true,
}
}
})
]
})최적화 체크리스트
✅ 최적화 전
- 원본 SVG 파일 백업
- SVG가 브라우저에서 올바르게 표시되는지 확인
- 현재 파일 크기 기록
✅ 최적화 중
- 메타데이터 및 주석 제거
- 적절한 정밀도 설정 (아이콘 2-3, 일러스트 3-4)
- multipass 최적화 활성화
- viewBox 속성 유지
- 사용하지 않는 defs 제거
- 경로 단순화
✅ 최적화 후
- 시각적 모양 확인 (전후 비교)
- 파일 크기 감소 확인
- 모든 대상 브라우저에서 테스트
- 성능 영향 측정
결론
SVG 압축은 선택 사항이 아닙니다 - 현대 웹 성능에 필수적입니다:
주요 요점
- 엄청난 파일 크기 감소 - 60-90% 더 작은 파일
- 더 빠른 페이지 로드 - 개선된 Core Web Vitals
- 더 나은 사용자 경험 - 더 빠른 상호작용 시간
- 더 낮은 비용 - 대역폭 및 CDN 비용 절감
- 쉬운 구현 - Tiny SVG 같은 도구로 간단함
최종 권장사항
모든 프로젝트에 대해:
- ✅ 배포 전 항상 SVG 파일 최적화
- ✅ Tiny SVG 또는 SVGO 같은 도구 사용
- ✅ 서버 압축 활성화 (Brotli > Gzip)
- ✅ CI/CD 파이프라인에서 파일 크기 모니터링
최적화 설정:
- 아이콘: 정밀도 2, multipass 켜기
- 일러스트: 정밀도 3-4, multipass 켜기
- 로고: viewBox 유지, 정밀도 2
지금 SVG 최적화를 시작하고 파일 크기와 웹 성능의 극적인 개선을 확인하세요!
지금 시도: SVG를 Tiny SVG에 업로드하고 즉각적인 결과를 확인하세요!