XML, JSON 방식으로 데이터를 전송할 때 그 크기가 1MB이상 되면 전송시간이 상당히 많이 걸리는 것을 볼 수 있다. 데이타 량이 많으면 트래픽이 늘어나고 특별히 웹호스팅을 받는 사람들에게는 트래픽량이 바로 금전적인 문제와 연관이 된다.
이 문제를 해결하기 위해 나는 Apache에서 지원하는 gzip을 이용했다.
문서파일은 Text형태이기 압축할 경우 80%~90%이상의 압축률을 보인다.
압축해서 데이타를 보내게 되면 데이터 전송시간도 줄겠지만 네트워크 트래픽도 줄어들어 일석이조의 효과를 본다.
참고로 gzip은 HTTP/1.1에서만 동작이 가능하다. 왜냐하면 HTTP/1.0에서는 gzip encoding이 지원되지 않기 때문이다.
여기서 나오는 예시는 웹호스팅을 받는 사람들에게 해당되지 않는다. 웹호스팅받은 사람은 왜냐하면 서버자체의 설정을 바꿀 수 있는 권한이 없기 때문이다. 하지만 PHP를 사용하는 사람중 트래픽문제로 고민하는 사람은
호스팅 사이트에서 gzip 압축 사용하기(http://qaos.com/article.php?sid=1684) 문서를 참고하기 바란다. 이 문서에서는 PHP에서 지원하는 gzip을 이용하여 데이터를 압축해서 전송하는 방법을 쓰고 있다.
1. gzip 설치
나는 안녕리눅스를 쓰기 때문에 패키지추가 기능을 이용하여 쉽게 Apache에서 구동되는 mod_gzip을 설치할 수 있었다. 만약 다른 리눅스를 쓴다면 자체 패키지추가 기능을 사용하거나 http://sourceforge.net/projects/mod-gzip/에서 다운받아 설치하기 바란다.
안녕리눅스에서는 다음과 같은 명령을 통해 gzip을 설치할 수 있다.
#pkgadd apache-gzip
2. gzip 설정변경
gzip을 사용하기 위해 안녕리눅스에서는 apache gzip 설정파일을 vi 에디터로 연다.
vi /etc/httpd/conf/module.d/gzip.conf
안녕리눅스에서는 gzip.conf 에 한글주석이 잘 되어 있어서 특별히 용어 해석의 어려움 없이 설정이 가능하다.
특별히 mod_gzip_minimum_file_size는 압축할 파일의 최소크기를 설정하는 건데 작은 용량의 파일은 압축하는 것자체가 무의미하고 또한 압축자체도 시간이 걸리는 문제이기 때문에 네트워크 트래픽과 압축하는 시간도 생각해서 적절한 값을 정하도록 하는게 중요하다.
그리고 압축설정에서 mod_gzip_item_include mime ^application/x-httpd-php를 추가해서 php로 만들어진 Text문서가 압축되도록 했다.
mod_gzip_keep_workfiles Yes를 NO로 바꾸자… /dev/shm은 용량이 제한되어 있기때문에 나중에 너무 로그가 쌓이면 문제가 생긴다.
3. apache 재구동
설정된 변경 사항을 적용하기 위해서 apache를 재구동한다.
# service httpd reload
4. gzip 구동확인
이제 제대로 동작하는지 확인하는 절차가 남았다.
나는 XML 데이타를 만드는 PHP코드를 만들어서 웹브라우져에서 읽어올 수 있도록 했다.
그리고 /var/log/httpd/access_gzip_log 를 tail명령을 통해 실시간으로 보면서 gzip이 구동되는 것을 확인했다.
# tail -f /var/log/httpd/access_gzip_log
…(생략)
192.168.0.17 – – [04/Jul/2007:10:44:21 +0900] “GET 요청URL HTTP/1.1” 200 171765 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)” mod_gzip: OK In:983469 Out:171765:83pct.
위와 같이 983KB나 되는 Text파일을 무려 171KB까지 압축해서 보냈다.
HTTP/1.1 방식을 사용하는 것도 확인할 수 있다.
5. 정리하기
대용량의 XML등의 Text문서를 자주 보내야하는 경우 분명 네트워크 트래픽 문제와 긴 전송시간 문제가 된다. 이 문제는 Apache에서 지원하는 gzip을 이용하면 80~90%이상의 압축파일로 데이타를 전송할 수 있기 때문에 트래픽과 전송시간을 급격히 줄이는 효과를 가질 수 있다. 용량이 작은 Text문서에는 사용하지 않는 편이 오히려 좋으며 이미 압축된 JPG파일과 같은 경우에는 압축할 필요가 없다.
6. 참고사이트
호스팅 사이트에서 gzip 압축 사용하기 : http://qaos.com/article.php?sid=1684
mod-gzip 다운로드 : http://sourceforge.net/projects/mod-gzip/
HTTP/1.1에 대한 문서 : ftp://ftp.nordu.net/rfc/rfc2616.txt
Description of all mod_gzip status codes : http://www.schroepl.net/projekte/mod_gzip/status.htm
mod_gzip 모듈 설치 방법 http://tong.nate.com/my_ju117/25190834
글쓴이 : 지돌스타 (http://blog.jidolstar.com/147)