← 전체 글로 돌아가기

서버 운영

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% 정도의 트래픽 절감을 기대할 수 있다. 하지만 무조건 강한 압축보다는 서버 상황에 맞는 적절한 설정이 중요하다.