웹서버/nginx
gzip 압축으로 정적 리소스(CSS, JS 등)의 전송 효율을 높이는 방법
janggos
2025. 3. 16. 15:35
gzip 압축은 파일 크기를 줄여 네트워크 대역폭을 절약하고 로딩 속도를 개선합니다.
1. GZip 압축 설정 단계
1-1. GZip 활성화
http {
gzip on; # GZip 압축 활성화
}
1-2. 압축 레벨 설정
http {
gzip_comp_level 3; # 압축 레벨 (1-9, 3-4 권장)
}
- 1: 빠른 압축 (낮은 압축률)
- 9: 높은 압축률 (CPU 부하 증가)
- 3-4: 효율적인 균형
1-3. 압축 대상 MIME 타입 지정
http {
gzip_types text/css text/javascript application/javascript;
}
- 주요 MIME 타입:
- text/css (CSS 파일)
- text/javascript, application/javascript (JS 파일)
- text/html, application/json 등 추가 가능
1-4. Vary 헤더 설정 (캐싱 호환성)
location ~* \.(css|js)$ {
add_header Vary "Accept-Encoding"; # 압축 방식 변동성 표시
}
2. 최종 Nginx 설정 예시
http {
gzip on;
gzip_comp_level 3;
gzip_types text/css text/javascript application/javascript;
server {
location ~* \.(css|js)$ {
add_header Vary "Accept-Encoding";
}
}
}
3. GZip 압축 테스트
3-1. curl로 압축 응답 확인
- 응답 헤더:
Content-Encoding: gzip # 압축 적용 확인
3-2. 파일 크기 비교
- 압축 전: 980 bytes
- 압축 후: 487 bytes (약 50% 감소)
4. 주의사항
- 클라이언트 지원 필수: 클라이언트가 Accept-Encoding: gzip 헤더를 보내야 함 (모던 브라우저 기본 지원).
- 이미지 압축 주의: 이미지(JPEG, PNG)는 이미 압축되어 있어 GZip 적용 시 오히려 크기가 증가할 수 있음.
- CPU 부하 모니터링: 높은 압축 레벨은 서버 CPU 사용량 증가시킬 수 있음.
5. 추가 최적화 옵션
http {
gzip_min_length 256; # 256바이트 미만 파일은 압축하지 않음
gzip_proxied any; # 프록시된 요청도 압축
gzip_vary on; # Vary 헤더 자동 추가 (별도 설정 불필요)
}
이 설정을 통해 정적 리소스의 전송 효율을 극대화할 수 있습니다!