Minify로 CSS/자바스크립트 전송량 줄이기
HTML에 들어가는 외부 CSS(Cascading Style Sheet) 및 자바스크립트(JAVAScript, 약칭 JS)는 수가 많고 용량이 클수록 문서가 늦게 뜨는 원인이 된다. 그러므로 누리집(사이트)이 조금이라도 빠르게 뜨게 하려면 이들을 통합하고 압축하여 전송량(트래픽)을 줄여야 한다.
JSMin, YUI Compressor, Creativyst® CSS & JavaScript Compressor 등은 문법이 어긋나지 않는 범위에서 아래와 같이 CSS와 JS의 쓸모 없는 문자를 없앤다.
@charset "utf-8";
* {
margin: 0;
padding: 0;
}
html {
background-color: #a8a8a8;
}
body {
background: url('./images/bg_bodyTop.gif') 50% top repeat-x;
color: #666;
font: 1.2em/1.7 Helvetica, AppleGothic, Gulim, '굴림', sans-serif;
font-size: 75%;
padding-top: 30px;
}
@charset "utf-8";*{margin:0;padding:0}html{background-color:#a8a8a8}body{background:url('/images/bg_bodyTop.gif') 50% top repeat-x;color:#666;font:1.2em/1.7 Helvetica,AppleGothic,Gulim,'굴림',sans-serif;font-size:75%;padding-top:30px}또다른 방법으로 GZip 압축이 있다. CSS와 JS는 글(텍스트) 위주여서 GZip 압축만으로도 70~80%에 이르는 전송량을 줄일 수 있다. 두 방식을 함께 쓰면 차이는 크지 않더라도 전송량이 좀 더 줄일 수 있다.
두 압축 방식 모두 원본을 가공하는 과정을 거치므로, 자주 갱신되는 파일은 수동으로 관리하기가 보통 일이 아니다. 누리집의 규모가 크고 작음을 떠나 자동 도구의 도움을 받는 편이 여러 모로 편리하다.
워드프레스에서는 JS/CSS를 GZip로 압축전송하는 도구로 WP Super Cache를 꼽을 수 있다. XpressEngine(제로보드 XE)은 내부에서 쓰는 CSS, JS를 자체에서 ?.css.php와 ?.js.php로 묶어 GZip로 전송하는데, 다른 외부 파일은 그대로 전송한다.
반면에 텍스트큐브는 이런 기능이 아예 없다. 도아님의 압축전송 플러그인으로 HTML은 압축할 수 있지만, CSS와 JS는 압축하지 못한다. 텍스트큐브는 다른 블로그 틀보다 기본 전송량이 많아서 압축전송 기능이 없는 게 매우 아쉬웠다.
다행히 누리집 또는 블로그 틀에 얽매이지 않고 계정에 설치해 쓰는 압축전송 도구들이 몇 있다. 여기에서 소개할 Minify는 JSMin 등 여러 압축기를 내장하고, GZip 압축전송도 지원한다. Minify는 압축전송에 관한 종합판이라 해야 할 만큼 부가 기능을 많이 담고 있다.
Minify 설치
Minify는 mod_rewrite와 PHP 5.2.1 이상을 지원하는 계정에서 쓸 수 있다.(PHP 4를 지원하는 판은 따로 있다.) .htaccess 파일과 Minify 안에 포함된 config.php 파일을 조금 손보아야 한다.
먼저 http://code.google.com/p/minify에서 ZIP 형식으로 묶인 Minify를 받는다. 파일 안에는 /min 과 /min_test_units가 들어 있는데, 압축 전송에 필요한 파일은 /min에 있고 /min_test_units은 작동 상황을 시험하기 위한 것이다. 압축을 풀어서 /min을 되도록 누리집의 뿌리 경로(public_html) CSS와 JS의 경로를 좌우하는 .htaccess의 경로 안에 올린다. (.htaccess가 없었다면 뒤 과정에서 만듦)
그리고 /min/config.php의 매개변수를 손수 고쳐서 올린다.
Minify는 압축했던 파일을 저장했다가 다시 쓰는 시렁(캐시) 기능이 있다. $min_cachePath에 시렁 경로를 넣으면 기능이 작동한다. 가령 /min/cache를 시렁 경로로 쓰려면, /min/cache를 방을 만들고 다음처럼 값을 넣는다.
$min_cachePath = './cache';$min_documentRoot에는 계정 기본 주소의 절대경로를 넣는 곳이다. /min이 public_html의 바로 밑에 올 때는 값을 지정하지 않아도 알아서 처리한다. 서브도메인 정책 등으로 /min이 public_html 바로 밑에 올 수 없을 때는 주석문으로 되어 있는 다음 값으로 바꿔 준다.
$min_documentRoot = substr(__FILE__, 0, strlen(__FILE__) - 15); 그리고 계정 뿌리 경로 CSS와 JS 경로를 좌우하는 .htaccess에 다음 내용을 끼워 넣는다. 첫 문장은 .htaccess에 이미 들어 있으면 무시해도 된다.
RewriteEngine On
RewriteRule ^(.*\.(css|js))$ /min/index.php?f=$1 [L]
압축전송 확인
웹에서는 HTTP Compression Test에서 압축 상황을 확인할 수 있다. 아래에 시험한 test.css는 실제 용량이 26.2KB인데, JSMin으로 먼저 처리되어 18.9KB로 줄었다. 오른쪽에서 test2.css는 test.css와 같은 파일이다. Minify는 ~.net/aaa.css,bbb.css처럼 쉼표로 파일들을 열거하면 파일들을 병합하여 전송한다. 내용이 같은 파일을 합쳤으므로 GZip로 압축된 전송량(오른쪽)은 단일 파일을 압축한 전송한 것(왼쪽)과 비슷하다..
![]() 단일 CSS 전송 | ![]() 통합 CSS 전송 |
파이어폭스(FireFox)에서는 부가 기능으로 설치하는 YSlow로 전송 상황을 확인할 수 있다. (YSlow는 Firebug 안에서 돌아가므로 Firebug를 먼저 설치해야 쓸 수 있다.) 아래는 이 블로그의 전송량을 YSlow로 본 화면이다. SIZE(KB)에 나온 수치는 JSMin으로 먼저 처리된 용량이다. Minify를 막 설치하고 나서는 파이어폭스의 시렁(캐시)에 옛 파일들이 남아서 압축되지 않는 것으로 나올 수 있으므로, 도구→설정→고급→네트워크에서 '오프라인 보관소'를 비우고 확인해야 정확하다.

YSlow에서 전송량 확인하기



Comment on this post!
유용하네요. ㅎㅎ
전 minify를 최상위 루트에 설치했는데..
텍스트큐브는 tc폴더에 설치되어 있습니다.
tc폴더에 .htaccess
RewriteRule ^(.*\.(css|js))$ ./min/index.php?f=$1 [L]
를 넣어도 작동이 안되더군요;
이곳을 보면 css나 javascript 다 gzip가 적용되어 있던데 어떻게 해야 할까요?
잘못 이야기한 부분이 있습니다.
위 글에 /min을 '되도록 누리집의 뿌리 경로(public_html)'에 올린다고 했는데, 'CSS와 JS의 경로를 좌우하는 .htaccess의 경로 안'으로 고칩니다.
/min도 /tc 안으로 들어와야 /tc/.htaccess의 영향권 안에서 작동할 수 있을 겁니다.
참고로 말씀 드리면 이 블로그는 서브도메인의 뿌리에 블로그(텍스트큐브)와 /min이 설치되어 있습니다.
놀구들 있네..
누리집(사이트) --> 제발...상황파악들 좀..해라...아직도...애국심에 이런 독해하기도 어려운..용어쓰고싶냐?
그래서, 10년이 지난 지금도...누리집이란 용어가 표준어가 됬냐? 정신차려라..이것들아...
정말...가관이다......인터넷을 한국에서 만들었냐? 똥고집부리게? 미국에서 만들었으면...외래어를 그대로 써라..
이것들아...읽느라 정말 짜증났다...알았냐?
그리고...속도는 무슨 얼어죽을....? 요즘 트래픽이 얼마나 좋은데..그러냐? 전혀 차이 없더라...압축해봐야..
그게 중요한게 아니고..프로그램 자체가 느려터졌는데..전송량만...줄인다고 그게 빨라지냐?
근본이 느린데?
짜증나는 글인데도 읽어 주시니 송구하면서 고맙습니다.
'누리집'이란 말은 나라를 의식하지 않고 썼습니다. '사이트(site)'는 본래 장소, 위치, 터 따위의 뜻을 담고 있습니다. 본디뜻이 많거나 넓은 외래어가 전문용어로 들어 왔다면 새 말을 만들어 쓰는 게 나쁘지 않다고 봅니다. 외래어를 그대로 쓰기만 한다면 '사다리꼴', '짤순이'처럼 알기 쉬운 말이 나오기도 어렵습니다.
속도에 대해 지적하신 말씀은 맞습니다. 프로그램이 굼뜨면 전송량을 아무리 줄여도 느립니다. 여기 쓰이는 텍스트큐브도 느린 편입니다. 그렇다고 쉽사리 프로그램을 바꿀 수 없기도 하니, 전송량을 줄여서 조금이나마 효과를 보려는 것입니다. 물론 빨라지더라도 속도 측정을 해야 알 수 있고 사람이 느끼기는 어렵습니다. 한편으로 호스팅 비용도 전송량을 신경 쓰게 하는 요인입니다.
아주 유용한 글이었습니다.
당장에 적용하고 사용하고 있습니다
좋은 정보 감사드립니다
부족한 글인데, 바로 이용하셨다니 기쁘네요.