Skip to main content
압축은 네트워크 성능을 크게 개선하지만, 잘못 사용하면 오히려 성능이 저하될 수 있습니다. 이 문서는 압축을 효과적으로 사용하는 최적화 전략을 설명합니다.

압축의 트레이드오프

압축은 CPU 시간네트워크 시간을 교환합니다.

손익분기점

결론: 네트워크가 느릴수록, 데이터가 클수록 압축 효과 큼

최적의 Threshold 찾기

Threshold는 압축할 최소 크기입니다.

Threshold별 효과

권장 Threshold

적합한 경우:
  • 모바일 네트워크 (느린 속도)
  • 대역폭 비용이 비쌈
  • 대부분 응답이 작음 (< 10KB)
단점: CPU 사용량 증가

실험으로 최적값 찾기

알고리즘 선택 전략

Brotli vs Gzip

사용 전략

사전 압축 → Brotli 사용
장점:
  • 압축 시간 걱정 없음 (미리 압축)
  • 최고 압축률 (quality 11)
  • 런타임 CPU 부하 없음

환경별 전략

캐싱과 압축 조합

압축과 캐싱을 함께 사용하면 최고의 성능을 얻습니다.

효과

레이어별 최적화:
  1. 브라우저 캐시: 0ms (가장 빠름)
  2. CDN 캐시: 10ms (네트워크만)
  3. 서버 캐시: 50ms (압축만, DB 없음)
  4. DB 조회: 500ms (압축 + DB)

CDN과 압축

CloudFront 최적화

CloudFront 설정:
  • Origin에서 압축된 응답 수신
  • CloudFront가 그대로 캐싱
  • 엣지에서 빠르게 제공

Vary 헤더 주의

압축 사용 시 Accept-Encoding에 따라 다른 응답이므로:

사전 압축 (Pre-compression)

빌드 시 정적 파일을 미리 압축하면 런타임 CPU 부하가 없습니다.

빌드 스크립트

서버 설정

장점:
  • 런타임 CPU 부하 없음
  • 최고 압축률 (quality 11)
  • 즉시 응답

성능 측정

1. 브라우저 개발자 도구

2. 서버 로깅

3. 부하 테스트

실전 최적화 체크리스트

✅ 전역 압축 활성화
✅ Threshold 설정
  • 일반: 1024 (1KB)
  • 모바일: 256 (256B)
  • 고성능: 4096 (4KB)
✅ 알고리즘 선택
  • 정적: brotli (사전 압축)
  • 동적: gzip (실시간)

일반적인 실수

피해야 할 실수:
  1. 모든 응답을 압축: 작은 응답은 비효율적
  2. 이미 압축된 파일 재압축: 효과 없음
  3. 스트리밍 압축: 지연 발생
  4. 개발 환경에서 압축: 디버깅 어려움
  5. Brotli를 실시간 압축: CPU 부하 높음

성능 벤치마크

실제 100KB JSON 응답 기준: 결론:
  • Gzip: 85% 시간 절약
  • Brotli: 87% 시간 절약
  • Pre-compressed: 88% 시간 절약 (최고)

다음 단계

압축 설정

전역 압축 플러그인 설정

압축 프리셋

사전 정의된 압축 설정

API별 제어

@api 데코레이터에 압축 설정