서버 운영
Nginx에서 gzip을 켤 때 꼭 확인해야 할 것들
gzip 압축은 트래픽을 줄이지만, 설정을 잘못하면 성능이 떨어지거나 캐시가 깨질 수 있다.
Nginx에서 gzip 압축을 켜면 네트워크 트래픽을 크게 줄일 수 있다. 하지만 단순히 설정을 켜는 것만으로는 부족하다.
Gzip 압축의 기본
# 기본 설정
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1000; # 1KB 이상만 압축
gzip_level 6; # 압축 레벨 (1-9)
이 정도면 기본은 된다. 하지만 문제는 세부 사항에 숨어 있다.
압축 레벨과 성능의 트레이드오프
압축 레벨을 높일수록 더 작아지지만, CPU 사용량도 늘어난다.
- 레벨 1: 빠르지만 압축률이 낮다
- 레벨 6: 일반적으로 권장되는 수준 (성능과 압축률의 균형)
- 레벨 9: 최대 압축이지만 CPU를 많이 쓴다
# 실제 서버의 CPU 사용률을 확인하면서 튜닝한다
htop # 또는 watch -n 1 'ps aux | head -n 10'
압축할 타입 선택하기
모든 콘텐츠 타입을 압축하면 안 된다.
# ❌ 이미 압축된 파일은 다시 압축하지 않기
gzip_types text/plain text/css application/json application/javascript;
# ❌ 이미지나 비디오 같은 바이너리는 제외
# image/jpeg, image/png, video/mp4 등은 gzip_types에서 빼기
이미 압축된 파일(이미지, 비디오, PDF)을 다시 압축하면 CPU만 낭비하고 크기는 거의 줄어들지 않는다.
캐시 헤더와의 상호작용
Gzip 응답은 브라우저 캐시와 프록시 캐시에서 주의해야 한다.
# 실제 응답 헤더 확인
curl -I -H 'Accept-Encoding: gzip' https://example.com
# Content-Encoding: gzip이 있는가?
# Cache-Control이 적절한가?
모바일 환경에서 확인
데스크톱에서는 빠르지만 모바일에서는 느릴 수 있다. 네트워크 속도가 느린 환경에서 압축/해제 시간이 오버헤드가 될 수 있기 때문이다.
실제 효과 측정
# gzip 없이
curl -s https://example.com/page > page-raw.html
ls -lh page-raw.html
# gzip으로
curl -s -H 'Accept-Encoding: gzip' https://example.com/page | gunzip | wc -c
Gzip을 켜면 보통 70% 정도의 트래픽 절감을 기대할 수 있다. 하지만 무조건 강한 압축보다는 서버 상황에 맞는 적절한 설정이 중요하다.