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을 이용하여 데이터를 압축해서 전송하는 방법을 쓰고 있다.
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이 구동되는 것을 확인했다.
위와 같이 983KB나 되는 Text파일을 무려 171KB까지 압축해서 보냈다. HTTP/1.1 방식을 사용하는 것도 확인할 수 있다.
5. 정리하기
대용량의 XML등의 Text문서를 자주 보내야하는 경우 분명 네트워크 트래픽 문제와 긴 전송시간 문제가 된다. 이 문제는 Apache에서 지원하는 gzip을 이용하면 80~90%이상의 압축파일로 데이타를 전송할 수 있기 때문에 트래픽과 전송시간을 급격히 줄이는 효과를 가질 수 있다. 용량이 작은 Text문서에는 사용하지 않는 편이 오히려 좋으며 이미 압축된 JPG파일과 같은 경우에는 압축할 필요가 없다.
Tracked from 좋은진호의 여유만만 | 2008년 05월 20일 00시 21분 | DEL
.html이나 .js 등의 파일들을 전송할 때 압축해서 보낸다면, 웹페이지 접속시에 약간의 전송속도 향상을 가져올 수 있을 것이다. 요즘 워낙 회선속도가 좋아 그 영향이 미비할 수도 있지만. 주요 포털들과 랭킹 상위 사이트 몇개를 대상으로 gzip 압축 전송을 지원하는지를 체크해봤다. 메인페이지를 기준으로 확인해봤으며, 메인페이지 접속시에 함께 요청되는 페이지도 체크에 포함했다. gzip 압축 전송 지원여부 체크는 초기에는 직접 Request 헤더에..