Gzip 압축 미들웨어로 API 응답 크기 줄이기

API 응답의 크기를 60~80% 줄여 네트워크 전송 시간을 단축하고 트래픽 비용을 절감하는 Gzip 압축 미들웨어 적용 방법

Gzip 압축이 필요한 이유

  • JSON 형식의 API 응답은 텍스트 기반으로 압축 효율이 뛰어남

  • 1MB 응답을 200~400KB로 크기 감소 가능

  • 네트워크 전송 시간 단축으로 사용자 경험 향상

  • 클라우드 서비스의 Egress 트래픽 비용 절감

Django GzipMiddleware 적용

settings.py의 MIDDLEWARE 리스트에 추가:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.gzip.GZipMiddleware',  # 상단에 위치
    'django.contrib.sessions.middleware.SessionMiddleware',
    # ... 다른 미들웨어들
]

압축 적용 확인 방법

브라우저 개발자 도구

  • Network 탭에서 API 요청 선택

  • Response Headers에서 Content-Encoding: gzip 확인

  • Size 컬럼에서 전송 크기와 원본 크기 비교

curl 명령어

curl -H "Accept-Encoding: gzip" -I http://127.0.0.1:8000/api/endpoint/

실무 고려사항

미들웨어 순서

  • GzipMiddleware는 MIDDLEWARE 리스트 상단에 위치

  • 응답 수정 미들웨어보다 먼저 실행되어야 함

운영 환경에서는 Nginx 사용 권장

  • Django 미들웨어보다 성능 우수 (C 모듈로 구현)

  • 정적 파일도 함께 압축 처리

  • 애플리케이션 서버 부하 감소

압축하지 말아야 할 데이터

  • 이미 압축된 파일 (JPEG, PNG, ZIP 등)

  • 수백 바이트 미만의 작은 응답

Last updated