왜 압축이 필요한가
HTML, CSS, JS 같은 텍스트 응답은 압축 효율이 매우 높습니다. 압축하지 않고 그대로 전송하면 불필요하게 대역폭을 낭비하고 응답 속도가 느려집니다.
gzip 기본 설정
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
gzip_min_length 1024;
기본적으로 Nginx는 text/html만 압축합니다. 다른 MIME 타입도 압축하려면 gzip_types에 명시해야 합니다.
Brotli — gzip보다 나은 대안
Brotli는 구글이 만든 압축 알고리즘으로, 현대적인 LZ77 변형과 허프만 코딩을 결합해 gzip 대비 더 높은 압축률을 냅니다.
# ngx_brotli 모듈 필요
brotli on;
brotli_types text/plain text/css application/json application/javascript;
gzip_static — 사전 압축 활용
gzip_static은 실시간 압축이 아니라, 미리 압축해둔 파일(.gz)을 그대로 서빙하는 지시어입니다. 빌드 시점에 미리 압축해두면 요청마다 CPU를 쓰지 않아도 됩니다.
주의할 점
이미 압축된 형식(JPEG, MP4, WOFF2 등)은 다시 압축해도 효과가 거의 없고 CPU만 낭비하므로 압축 대상에서 제외하는 것이 좋습니다.