NGINX gzip 모듈을 이용하여 정적 파일 응답 속도 개선
이 블로그 포스트는 NGINX gzip 모듈을 활용하여 웹 서버의 응답 속도와 전송 데이터의 효율성을 개선하는 방법을 다룹니다. 먼저 NGINX gzip 모듈의 주요 설정 옵션과 기능을 설명하고, 실제 NGINX 서버에 정적 파일을 배포하여 gzip 적용 전후의 성능 차이를 비교합니다. 이를 통해 압축 기술이 웹 성능에 미치는 긍정적인 영향을 실증적으로 확인합니다.
목차
1. NGINX gzip 모듈이란?
2. NGINX 구성
2-1. 정적 파일 구성
2-2. gzip 구성
2-3. 구성 전, 구성 후 비교
3. 결론
1. NGINX gzip 모듈이란?
NGINX에서 gzip 방법을 사용하여 응답을 압축하여 클라이언트에게 전송합니다. 이는 전송되는 데이터의 크기를 절반 이상으로 줄이는데 도움이됩니다.
구문: gzip on | off;
기본 값: gzip off;
사용되는 블록: http, server, location, if in location
NGINX에서의 gzip 압축 응답을 활성화 할 수 있습니다.
구문: gzip_buffers number size;
기본 값: gzip_buffers 32 4k|16 8k;
사용되는 블록: http, server, location
응답을 압축하는데 사용하는 버퍼의 수와 크기를 지정합니다.
기본적으로 버퍼 크기는 메모리 페이지 하나에 해당하며, 플랫폼에 따라 4K 또는 8K입니다.
구문: gzip_comp_level level;
기본 값: gzip_comp_level 1;
사용되는 블록: http, server, location
응답의 gzip 압축 수준을 지정합니다. 값의 범위는 1~9입니다.

구문: gzip_disable regex ...;
기본 값: —
사용되는 블록: http, server, location
gzip 압축을 비활성화 할 클라이언트를 지정합니다. (User_Agent 헤더의 값을 사용하여 정규식으로 구분합니다.)
구문: gzip_http_version 1.0 | 1.1;
기본 값: gzip_http_version 1.1;
사용되는 블록: http, server, location
gzip 압축에 필요한 최소 HTTP 버전을 지정합니다.
구문: gzip_min_length length;
기본 값: gzip_min_length 20;
사용되는 블록: http, server, location
gzip으로 압축될 응답의 최소 길이를 지정합니다.(Content-Lenght 헤더의 값을 사용합니다.)
구문 : gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
기본 값: gzip_proxied off;
사용되는 블록: http, server, location
요청 및 응답에 따라 프록시된 요청의 응답은 gzip을 활성화 하거나 비활성화 할 수 있습니다. (Via 헤더의 존재여부에 따라 결정됩니다.)
구문: gzip_types mime-type ...;
기본 값: gzip_types text/html;
사용되는 블록: http, server, location
지정된 MIME 타입에 대해 응답을 gzip으로 압축할 수 있도록 활성화합니다. 기본적으로 “text/html” 타입은 항상 압축됩니다. 특별한 값 “*”를 사용하면 모든 MIME 타입과 일치합니다.
구문: gzip_vary on | off;
기본 값: gzip_vary off;
사용되는 블록: http, server, location
gzip, gzip_static 또는 gunzip 지시문이 활성화된 경우 “Vary: Accept-Encoding” 응답 헤더에 값을 넣는 것을 활성화하거나 비활성화합니다.
모듈 내장 변수
$gzip_ratio
압축 비율을 변수의 값으로 지정됩니다.
계산 방식 : (원본 크기 / 압축된 응답크기)
2. NGINX 구성
gzip 응답 전과 후를 로그, 응답 속도, 응답 파일 크기를 비교합니다.
2-1. 정적 파일 구성
NGINX GitHub를 방문하여 정적 파일을 다운로드 받을 수 있습니다.
server {
access_log /var/log/nginx/testing/access.8091.log main;
listen 8091;
location / {
root /usr/share/nginx/html/http_test;
index index.html;
}
}
위와 같이 NGINX 구성을 진행합니다.
NGINX 구성을 적용합니다.
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ nginx -s reload
구성을 완료한 후 페이지는 아래와 같습니다.

gzip 구성을 진행하지 않은 상태에서의 응답의 크기와 응답 속도를 확인합니다.

총 42.91MB 의 응답을 받은 것을 확인할 수 있고 응답시간은 3.79초입니다.
gzip 구성완료한 후 이전과 비교하여 차이를 확인합니다.
2-2. gzip 구성
NGINX gzip 구성을 진행합니다.
server {
access_log /var/log/nginx/testing/access.8090.log main;
gzip on; # gzip을 활성화합니다.
gzip_types *; # mime type가 무엇이든 응답을 모두 압축합니다.
gzip_comp_level 9; 압축 수준을 최대치로 지정합니다.
listen 8090;
location / {
root /usr/share/nginx/html/http_test;
index index.html;
}
}
NGINX 구성을 적용합니다.
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ nginx -s reload
구성이 완료된 페이지는 아래와 같습니다.

응답 속도 및 응답 리소스의 크기는 아래와 같습니다.

2-3. 구성 전, 구성 후 비교
리소스의 크기가 약 83% 감소된 것을 볼 수 있습니다. 응답의 속도도 약 63% 정도 감소하여 응답 리소스 개선 및 응답 속도 개선이 된 것을 볼 수 있습니다.
로그를 비교합니다. (NGINX의 응답 전체입니다.)
log_format gzip_log
'http_referer : "$http_referer" - response_body_size : "$body_bytes_sent" - gzip_ratio: "$gzip_ratio"'; # 현재 요청 경로 - 응답의 body 사이즈 - 응답 감소 비율입니다.
server {
access_log /var/log/nginx/access.8090.log gzip_log;
gzip on;
gzip_types *;
gzip_comp_level 9;
listen 8090;
location / {
root /usr/share/nginx/html/http_test;
index index.html;
}
}
server {
access_log /var/log/nginx/access.8091.log gzip_log;
listen 8091;
location / {
root /usr/share/nginx/html/http_test;
index index.html;
}
}
NGINX 구성을 적용합니다.
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ nginx -s reload
각각 포트로 접속하여 로그를 비교합니다
(gzip 압축 구성을 하지 않은 포트)

(gzip 압축 구성한 포트)

이미지의 크기를 비교해 보았을 때 4,273,547Byte(4.08 MB) -> 694,237Byte(0.69 MB) 원본 크기의 값에서 약 6.16배 감소한 것을 볼 수 있습니다.
3. 결론
NGINX gzip 모듈을 활용하면 서버의 응답 데이터 크기를 크게 줄여 네트워크 대역폭 사용량을 절감할 수 있으며, 클라이언트 측의 콘텐츠 로드 시간도 단축됩니다. 실제 테스트 결과, 리소스 크기가 약 83% 감소하고 응답 속도도 63% 향상되었습니다. 이는 gzip 압축이 서버 성능 최적화와 사용자 경험 개선에 얼마나 중요한 역할을 하는지 잘 보여줍니다.
NGINX를 통해 gzip 압축를 통한 응답 속도 개선 및 응답 리소스 개선 이외에도 다른 NGINX 관련 정보에 관심이 있으신가요? NGINX STORE의 NGINX 카테고리를 방문하여 많은 정보들을 확인하실 수 있습니다.
댓글을 달려면 로그인해야 합니다.