GZIP 압축은 대역폭을 절약하고 PHP 애플리케이션의 실행 속도를 높이는 간단하면서도 매우 효과적인 기술입니다. 이 글에서는 GZIP 압축의 작동 원리를 이해하고, Apache 서버와 PHP 코드에서 이를 활성화하는 구체적인 방법을 단계별로 살펴봅니다.
GZIP 압축의 작동 원리
GZIP 압축은 서버와 브라우저 사이에서 데이터를 압축된 형태로 주고받는 메커니즘입니다. 전체 과정은 다음 세 단계로 진행됩니다.
1단계: 파일 요청
브라우저(클라이언트)가 서버에 특정 파일을 요청합니다.
2단계: 압축된 파일 전송
서버는 일반적인 index.html 대신 압축된 index.html.zip 형태로 응답합니다. 파일 용량이 크게 줄어들기 때문에 다운로드 시간과 대역폭 사용량이 함께 감소합니다.
3단계: 압축 해제 및 화면 출력
브라우저는 다운로드한 압축 파일의 압축을 해제한 뒤 사용자에게 화면을 보여줍니다. 이 과정을 거치면 웹페이지가 훨씬 빠르게 로딩됩니다.
Apache 서버에서 GZIP 압축 활성화하기
Apache 서버를 사용한다면 .htaccess 파일에 아래 코드를 추가하는 것만으로 GZIP 압축을 손쉽게 활성화할 수 있습니다.
# compress text, html, javascript, css, xml: AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript # Or, compress certain file types by extension: <files *.html> SetOutputFilter DEFLATE </files>
위 설정은 일반 텍스트, HTML, CSS, XML, 자바스크립트 등 주요 텍스트 기반 리소스를 모두 DEFLATE 필터로 압축하도록 지시합니다. 또한 확장자를 기준으로 특정 파일 유형만 선택적으로 압축하는 방법도 병행할 수 있습니다.
PHP 코드에서 GZIP 압축 활성화하기
.htaccess 수정이 어려운 환경이라면 PHP 파일 내부에서 직접 GZIP 압축을 활성화할 수 있습니다. 아래 코드는 클라이언트가 gzip 인코딩을 지원하는지 확인한 후, 지원하는 경우에만 압축 핸들러를 적용하는 방식입니다.
<?php
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'))
ob_start('ob_gzhandler');
else ob_start();
?>ob_gzhandler는 출력 버퍼에 gzip 압축을 자동으로 적용해주는 PHP 내장 콜백 함수입니다. 브라우저가 gzip을 지원하지 않으면 일반 출력 버퍼링으로 대체되므로 안전하게 사용할 수 있습니다.
마무리
GZIP 압축은 서버 환경에 따라 .htaccess 설정 또는 PHP 코드 한 줄만으로 적용할 수 있는 강력한 성능 최적화 기법입니다. 페이지 로딩 속도 개선과 트래픽 비용 절감 효과가 크므로, 아직 적용하지 않았다면 위 방법을 참고해 바로 도입해 보시기 바랍니다.