[아파치] mod_deflate로 압축 전송하기

  웹호스팅으로 누리집을 꾸릴 때는 전송량(traffic)을 의식하지 않을 수 없다. 웹호스팅 상품들은 일정 기간 동안의 전송량 한계가 클수록 많은 값을 치러야 하기 때문이다. 그래서 gzip를 통한 실시간 압축 전송은 한정된 전송량을 알차게 쓰는 길이 되곤 한다. 압축하는 과정이 서버에겐 짐이지만, 전송할 내용이 줄어든 만큼 전송 시간이 줄어들어 오히려 서버의 짐을 덜 수 있다.

  CSS/JavaScript를 압축하는 Minify, 텍스트큐브의 압축 전송 플러그인, 워드프레스의 WP-Cache 플러그인 따위는 서버 관리 권한이 없는 일반 호스팅 계정에서 쓸 수 있는 gzip 압축 전송 도구들이다. Minify는 HTML/XML 파일까지 압축하지 못하고, 플러그인으로 제공되는 도구들은 웹 풀그림의 관리 화면을 압축하지 못한다. 특정 웹 풀그림의 PHP 핵심 코드를 고쳐서 관리 화면까지 압축하는 방법(텍스트큐브 gzip 전체 적용시키기)이 있긴 하지만, 웹 풀그림이 판올림하면 다시 고쳐 주어야 하는 점이 번거롭다.

  아파치(Apache) 웹 서버를 쓰고 있고 아파치 내장 모듈인 mod_deflate이 켜져 있다면, httpd.conf나 .htaccess에서 mod_deflate를 통하여 gzip 압축 전송을 설정할 수 있다. /etc/httpd/conf/httpd.conf의 전체 설정 또는 개별 가상 호스트(Virtual Host)나  .htaccess 파일의 적당한 곳에 다음과 같은 내용을 끼워 넣는다.

<IfModule mod_deflate>
  AddOutputFilterByType DEFLATE text/plain text/html text/xml
  AddOutputFilterByType DEFLATE application/xhtml+xml application/xml application/rss+xml
  AddOutputFilterByType DEFLATE text/css application/javascript application/x-javascript
  AddOutputFilterByType DEFLATE audio/midi

  DeflateCompressionLevel 9

  BrowserMatch ^Mozilla/4 gzip-only-text/html   # Netscape 4.xx에는 HTML만 압축해서 보냄
  BrowserMatch ^Mozilla/4\.0[678] no-gzip   # Netscape 4.06~4.08에는 압축해서 보내지 않음
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html   # 자신을 Mozilla로 알리는 MSIE에는 그대로 압축해서 보냄
</ifModule>

  위 설정이 적용되면 Text/HTML/CSS/JS/MIDI 파일들은 웹 서버에서 바로 gzip로 압축하여 보낸다.주1 BrowserMatch 구문은 이제는 거의 쓰이지 않는 넷스케이프(Netscape)의 문제를 피하게 하기 위함이다.

  .htaccess 파일은 저장하면 바로 적용되지만, httpd.conf에 넣은 내용은 서버를 다시 시작하거나 명령창에서 다음과 같은 명령으로 웹 서버 설정을 다시 읽어 들여서 설정한 내용을 반영할 수 있다.

[root@??? /]# /etc/init.d/httpd graceful

  이렇게 하면 텍스트큐브 압축 전송 플러그인처럼 단순하게 gzip 압축만을 돕는 도구는 쓸 필요가 없다. 다만 CSS/JS 파일 압축은 mod_deflate로 그때그때 압축하는 것보다 Minify를 쓰는 쪽이 더 좋을 것이다. Minify는 gzip 압축뿐만 아니라  쓸모 없는 내용을 줄이고 압축한 내용을 갈무리하여 꺼내 쓰는 시렁(캐시) 기능까지 갖추었기 때문이다. Minify를 쓰고 있다면, 위에서 끼워 넣은 것 가운데 다음 내용만 '#' 기호를 붙여 주석으로 만들어서 CSS/JS 파일 압축을 Minify에게 고스란히 맡길 수 있다.

# AddOutputFilterByType DEFLATE text/css application/javascript application/x-javascript

  mod_deflate를 통한 압축 전송은 mod_deflate 모듈이 켜져 있는 서버에서 쓸 수 있다. 따라서 서버 관리 권한이 없는 웹호스팅 계정에서는 아파치에서 mod_deflate가 꺼져 있으면 mod_deflate를 통한 압축 기능을 쓸 수 없다. phpinfo() 함수를 통하면 이 모듈이 켜져 있는지를 알 수 있다.

<?php
 phpinfo();
?>

  개별 파일이 잘 압축되어 보내지는지는 HTTP Compression Test에서 확인할 수 있다.

gzip 압축 전송 확인

〈주석〉
  1. AddOutputFilterByType에 설정하는 파일 형식(MIME type: Multipurpose Internet Email Extionsion)은 아파치의 판번호와 웹 탐색기의 종류에 따라 조금씩 다른 결과를 낼 수 있으므로, 압축 전송이 잘 되는지는 손수 점검해 보아야 한다. back
글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요

  1. socurites 2013/11/05 20:43 고유주소 고치기 답하기

    좋은 자료 감사합니다.