전송량 급증

태터툴즈 1.x를 설치하기 위해 호스팅 업체를 변경했다. 호스팅 업체를 변경하고 태터툴즈를 설치한 후 놀란 점은 두 가지이다. 먼저 TraceWatch 통계는 별다른 변화가 없는 데 태터툴즈 카운트는 두 배로 증가했다. 원래 하루 평균 800~900명 정도가 방문하는 것으로 되어 있는데 하루 방문자 수가 1500~1600 정도로 증가했다. 두번째로 전송량이 급증했다. 이야넷에서 웹 호스팅을 받을 때 전송량은 하루 500M였지만 단 한 번도 전송량 초과를 경험한 적이 없다. 그런데 카페24로 이주하고 태터툴즈 1.x로 판올림한 후에는 거의 80% 전송량을 사용했으며 올블로그 추천글에라도 오르면 항상 오후 6시가 조금 지나면 전송량이 초과했다.

목차

전송량 급증

이전 글에서 설명했듯 태터툴즈 1.x를 설치하기 위해 호스팅 업체를 변경했다. 호스팅 업체를 변경하고 태터툴즈를 설치한 후 놀란 점은 두 가지이다.

  • 카운터 급증
    TraceWatch 통계는 별다른 변화가 없는 데 태터툴즈 카운트는 두 배로 증가했다. 원래 하루 평균 800~900명 정도가 방문하는 것으로 되어 있는데 하루 방문자 수가 1500~1600 정도로 증가했다.
  • 전송량 급증
    이야넷에서 웹 호스팅을 받을 때 전송량은 하루 500M였지만 단 한 번도 전송량 초과를 경험한 적이 없다. 그런데 카페24로 이주하고 태터툴즈 1.x로 판올림한 후에는 거의 80% 전송량을 사용했으며 올블로그 추천글에라도 오르면 항상 오후 6시가 조금 지나면 전송량이 초과했다.

카운터가 급증한 문제는 TraceWatch를 설치했기 때문에 크게 신경 쓰지 않았다. 그러나 전송량 문제는 조금 심각했다. 카페24 상품 중 금전적인 부담이 없는 상품은 '하루 전송량 400M(64bit광 절약형, 월 500원)'짜리와 '하루 전송량 500M(64bit광 일반형, 월 1100원)'짜리였는데 500M로 전송량을 늘린다고 해도 전송량 부족이라는 문제는 해결하기에는 전송량이 턱없이 부족했기 때문이다. 그렇다고 '1G(64bit광비지니스, 월 5500원)'짜리를 신청하자니 간단한 블로그 호스팅에 너무 큰 비용이 들이는 것 같았다.

압축 전송 플러그인

결국, 이 문제를 해결하기 위해 페이지를 압축해서 전송하는 이 플러그인을 만들었다. 이 플러그인은 QAOS.com에서 전송량을 줄이기 위해 몇 년 전부터 사용한 방법으로 태터툴즈에서는 플러그인 형태로만 변경한 것이다. 다만, 태터툴즈에서 적당한 이벤트를 제공하지 않기 때문에 이 플러그인을 적용하기 위해서는 상당히 많은 파일을 변경해야 한다. 따라서 이 플러그인을 설치하고 문제가 발생한 경우 스스로 해결할 수 없는 사람은 이 플러그인을 설치하지 말기 바란다.

참고로 이 플러그인을 사용하기 전에는 거의 매일 전송량 초과 메시지(태터툴즈 카운터를 기준으로 하면 1800명 정도 방문하면)가 나타났지만 이 플러그인을 사용한 후부터는 평상시에는 30% 전송량(1800명 기준)을 사용하며, 플러그인 발표나 올블로그 알찬글에 오르는 날도 전송량이 80%를 초과하는 경우는 없었다.

블로그에 따라 다르겠지만 나처럼 글을 주로 쓰며 가끔 그림이 삽입되는 블로그는 약 4분 1 정도로 전송량을 줄일 수 있다. 실제 플러그인 설정을 항상 GZip으로 압축해서 전송하도록 설정한 후 다운로드 가속기로 파일을 내려받아 보면 GZip으로 압축된 파일은 압축되지 않은 파일의 4분의 1정도가 되는 것을 알 수 있다.

그림에서 알 수 있듯이 압축된 파일 크기는 12,596 바이트이며 실제 파일 크기는 52,209 바이트인 것을 알 수 있다.

다운로드

사용법

플러그인 설치
플러그인을 설치하는 방법은 간단하다. 내려받은 파일을 푼 후 태터툴즈 플러그인 폴더에 폴더째 올리고 '관리 도구/환경 설정/플러그인 설정'에서 'TransferGZip'을 '미사용'에서 '사용중'으로 변경하면 된다.
플러그인 사용 가능성 검사

이 플러그인은 Zlib를 사용한다. 따라서 최소한 Zlib를 PHP 설치시 함께 설치했어야 사용 가능하다. 'Zlib'의 사용 가능 여부는 다음과 같은 방법으로 검사할 수 있다. '플러그인을 사용할 수 있다'는 메시지가 나타난다면 태터툴즈를 패치하기 바란다.

http://host.dom/태터 설치 폴더/plugins/TransferGZip/?zlibcheck
예: 
https://offree.net/plugins/TransferGZip/?zlibchkeck
플러그인 설정

플러그인 시작 부분에 설정할 수 있는 변수 두개가 있다. 하나는 압축 정도를 표시하는 $level이며, 또 하나는 압축 전송의 사용 여부를 나타내는 $encoding이다.

// 1~9까지 지정 가능. 9는 최대 압축
$level = 9;

// 0~2까지 지정 가능. 
// 0: 압축하지 않음. 
// 1: 브라우저가 GZip 인코딩을 지원하면 GZip으로 인코딩
//    따라서 1로 설정해서 사용하면 큰 문제를 발생하지 않음
// 2: 무조건 GZip으로 인코딩. GZip 인코딩을 지원하지 못하는 브라우저는
//    파일 저장 창이 나타남. 보다 자세한 내용은 https://qaos.com/article.php?sid=1543
//    를 참고하기 바람.
$encoding = 1;

위 설명에서 알 수 있듯이 보통 $encoding을 1로 설정해서 사용하면 무난하다. 1로 설정하면 GZip 인코딩을 지원하는 브라우저는 자동으로 'GZip'으로 압축해서 전송하며, GZip 인코딩을 지원하지 못하는 브라우저(거의 없으며 대부분 브라우저 설정 문제임)는 'GZip'으로 압축하지 않고 전송하기 때문이다. 만약 $encoding를 2로 설정하고 사용하는 경우에는 반드시 공지를 확인하기 바란다.

태터툴즈 패치 1.x

적당한 이벤트가 없기때문에 사용자 페이지를 만드는 모든 파일을 패치해야 한다. 일반적으로 패치는 각 파일 끝부분의 print $view;라는 행을 다음처럼 변경하면된다.

fireEvent('OBStartSession');
print $view;
fireEvent('OBEndSession');

변경해야 하는 파일은 다음과 같다. blog/item.phpif($view!='[##_article_rep_##]') print $view;를 fireEvent('') 함수로 감싸야 하며, keylog/index.php 파일은 print $viewprint $out을 fireEvent('') 함수로 감싸면 된다.

/blog/index.php
print $view;
/blog/item.php
if(isset($_POST['partial'])){
    if($view!='[##_article_rep_##]')
        print $view;
}else {
    print $view;
}

/archive/index.php
print $view;
/archive/item.php
print $view;

/category/index.php
print $view;

/entry/index.php
print $view;

/guestbook/index.php
print $view;

/keylog/index.php
if(strlen($suri['value'])){
    print $out;
}else{
    print $view;
}

/location/index.php
print $view;

/notice/index.php
print $view;
/notice/item.php
print $view;

/search/index.php
print $view;

/tag/index.php
print $view;
태터툴즈 패치 0.9x

태터툴즈 0.9x는 index.php로 모든 페이지를 처리하기때문에 패치하기 훨씬 쉽다. 일단 index.php 파일을 좋아하는 편집기로 불러온 후 다음처럼 수정하면 된다.

<?
include("inc_global.php");
include("inc_function.php");
include("inc_presswork.php");
include("transfergzip.php");

GZipStart();
.
.
.
GZipEnd();
?>

5행에 include("transfergzip.php");GZipStart();문을 삽입하고, index.php 파일 마지막 행(?>가 나오기 전 행)에 GZipEnd();을 추가하면된다.

남은 이야기

마지막으로 태터&컴패니[1]에 바라는 점이 있다면 이 압축 전송 기능은 태터툴즈 자체내에 내장했으면 한다. 물론 PHP 설치 환경에따라 사용할 수도 있고 그러지 못할 경우도 있지만 기능이 있지만 사용할 수 없는 경우와 기능이 없는 경우는 조금 다르기때문이다.

관련 글타래


  1. 태터&컴패니 회사 홈페이지 주소를 몰라 굵은 글씨로 처리했습니다. 
2006/05/04 17:45 2006/05/04 17:45
글쓴이
author image
운영체제의 모든 것을 운영하고 있는 IT 블로거. IT 블로거라는 이름은 현재 시국때문에 시사 블로거로 바뀐 상태다. 그러나 나는 아직도 시사와 사회에 관심이 많은 IT 블로거일 뿐이다. 컴퓨터, 운영체제, 시사, 가족, 여행, 맛집, 리뷰등과 살면서 느끼는 소소한 일상이 블로그의 주제이다. 왼쪽의 아이콘은 둘째 딸 다예가 그린 내 모습이다.
오늘의 글
인기있는 글
조회수 많은 글 | 베오베
댓글 많은 글 | 베오베

Trackback

Trackback Address :: https://offree.net/trackback/476

Facebook

Comments

  1. 소금이 2006/05/04 18:09

    안녕하세요, 질문 좀드릴꼐요. zlib를 확인하라고 하셨는데, 예제페이지의 주소나 제 주소 모두 사용가능합니다라는 메세지가 안뜨네요'' check부분에 무언가 오류가 있는 것같은데, 다시 한번만 확인해주실수 없나요;; 불여우와 ie모두 완료됨만 뜨고 메세지가 안나와서요... (__)~

    perm. |  mod/del. reply.
    • 도아 2006/05/05 10:45

      오류라기 보다는 두 가지중 하나일 가능성이 많습니다.

      1. zlib를 사용할 수 없는 경우
      2. URL을 잘못 입력한 경우

      URL의 경우 / 다음에 반드시 ?가 와야 합니다.

  2. 김형균 2006/05/04 20:04

    원리에 대해 잘 모르지만...궁금한 점이 있습니다.
    GZip 을 이용해 압축하여 전송한다면 비록 압축률을 최저로 해놓더라도...
    만약 일반적인 압축이라는 의미처럼 파일 하나로 모든걸 압축하여 전송한 다음 클라이언트 쪽에서 해제하여 보여주는 방식인가요?

    그렇게 되면 용량적인 측면도 좋겠지만. 페이지 로딩 속도에도 좋은 영향을 줄것 같은데요. 즉, 예를 들어 500 K 짜리 파일 하나를 받는것과 5K 짜리 파일 100 개를 받는 것은 용량은 같지만 파일 갯수가 많은쪽이 더 오래걸리잖아요. 요청->수락, 요청->수락,.....이 반복되기 때문에 파일을 요청하고 수락되어지는 과정의 시간이(물론 짧은 순간이지만) 합해진다면 꽤 많은 시간이 되지요..그럼 페이지에 삽입된 이미지들의 갯수가 많을 경우 GZip 을 이용한다면 그런 효과를 거둘수 있는건가요?

    물론..GZip 이란것의 형태가 파일 하나로 압축하여 보내고 받아서 풀어서 나타낸다는거면 말이죠....

    perm. |  mod/del. reply.
  3. 김형균 2006/05/04 20:20

    만약.. 파일 각각을 압축해서 보내게 되는거면 용량적인(트래픽) 측면에서는 도움이 되겠지만. 페이지 로딩 면에서는 별다른 효과가 없을듯하네요..

    어떤 원리인가요 정확히?

    perm. |  mod/del. reply.
    • 도아 2006/05/05 10:52

      몇 가지 오해를 하고 있는 것 같습니다.

      1. 제 플러그인은 전송량을 줄이는 플러그인입니다. 따라서 페이지의 로딩 속도는 고려 사항이 아닙니다.
      2. GZip은 여러개의 파일을 압축할 수 없습니다. 즉, 하나의 파일만 압축합니다.
      3. 페이지 로딩 속도는 차이가 없습니다. 그 이유는 CPU의 성능이 워낙 좋기 때문입니다. 결론적으로 웹 페이지는 전송+로딩으로 구성됩니다. 전송 속도는 CPU의 성능에 비해 현저히 떨어지기 때문에 페이지를 화면에 뿌리는 시간을 전송+로딩으로 보면 페이지를 화면에 뿌리는 시간 역시 현저히 단축됩니다.
      4. 이미지는 압축하지 않습니다. 제 글에서도 알 수 있듯이 글로 구성된 페이지만 압축하며 이미지는 원래 그대로 전송합니다. 이미지는 이미 압축된 상태이기때문에 압축이 의미가 없습니다.

      마지막으로 정확히 알기를 원하신다면 HTTP/1.1 명세를 참조하시기 바랍니다.

  4. eternalbleu 2006/05/04 20:57

    HTTP1.1 버전을 지원하는 프라우저는 기본적으로 glib 형태의 포맷으로 웹서버와 메시지를 주고 받는 것이 가능합니다.

    일반 plain/text 형태로 주고받았던 기존의 메시지부분을 웹서버에서 압축 -> 전송, 브라우저에서 수신 -> 해독 이런 과정을 통해서 보여주는 것입니다.

    당연히 트래픽 양도 적어지고, 문서의 내용이 굉장히 많은 경우 전송하는 속도도 빨라지죠. (텍스트의 압축률이 상당히 높다는 사실을 상기하시면 500k 문서를 압축해서 100k 만 전송한다면 data length 가 적기 때문에 더욱 빨리 전송이 안료되겠죠?)

    단지 웹 서버에서 압축을 하는 부분에서 로드가 걸릴 가능성이 존재하고, 이에대한 해결책이 필요할 것 같은데... 호스팅 서비스를 제공받는 입장에서 신경쓸 문제는 아니라고 보이지만, 호스팅 서비스를 제공하는 입장에서는 서버, 네트웍 링크 둘중에 하나를 선택할 것 같네요.

    perm. |  mod/del. reply.
  5. eternalbleu 2006/05/04 20:59

    아마도 이 기능은 플러그인으로 지원되게 될 것 같습니다. 블로그 툴 자체에 이기능을 넣을 것으로 보이지는 않네요. 앞으로 이벤트가 추가되고, 플러그인 관련 개발이 안정화 단계에 들어서면 도아님께서 만드신 플러그인이 디폴트 탑재 될지도 모르겠네요. ㅎㅎ

    perm. |  mod/del. reply.
    • 도아 2006/05/05 10:49

      공식적으로 포함은 되지 않아도 이벤트는 포함될 가능성이 많습니다. 그 경우 일일이 파일을 패치하지 않아도 되므로 이벤트만 포함되도 괜찮을 것 같습니다.

  6. 디노 2006/05/06 10:17

    위 확인 예제에 오타가 포함되어 있네요. check인데 chkeck으로.. =)

    방금 설치하고 패치를 모두 했는데, 효과는 언제쯤 나타날까요.. -_-;;; 급해서 번거롭거나 말거나 해야할 일을 해치워버렸거든요.

    perm. |  mod/del. reply.
    • 도아 2006/05/06 10:55

      패치한 후 바로 나타납니다. 전송량 미터가 있으면 효과가 나타나는 것을 바로 알 수 있습니다. 없는 경우라면 호스팅 업체에서 제공하는 전송량 확인 URL(일반적으로 throttle-me로 끝나는)에서 확인할 수 있습니다.

  7. 디노 2006/05/06 11:21

    감사합니다. 정말 큰 도움이 되었습니다. =)

    perm. |  mod/del. reply.
    • 도아 2006/05/10 10:45

      디노님 블로그는 전에는 히드당 KB가 28KB 정도였는데 지금은 6KB로 줄었더군요. 이미지는 포함되지 않기때문에 정확하지는 않지만 약 4분의 1로 줄은 것 같습니다.

  8. kamu 2006/05/09 23:10

    0.9X 패치에서...
    transfergzip.php화일에서 GZipStart($target) 에서
    $target을 지워줘야 작동하는군요..
    1.0.x에서 플러그인 양식으로 되어있어서 그런듯합니다.
    수정해주세요..^^

    perm. |  mod/del. reply.
    • 도아 2006/05/10 09:46

      0.9x나 1.0.x 모두 필요없는 부분입니다. 다만 1.0.x에서는 오류가 발생하지 않아 수정하지 못한 부분입니다.

      수정해서 다시 올려 두었습니다.

      아울러 버그 보고 감사합니다.

  9. 풍림화산 2006/05/13 09:03

    저도 카펭24에서 500MB 상품을 사용하다가 전송량이 초과되길래 별 생각없이 스트리밍만 900MB로 업그레이드하였습니다.
    55000원 정도를 추가 결제했죠. 그후에도 여전히 초과 문제가 발생해서 트레이스와치에서 체크해보니 야후 봇이 주원인이어서 야후봇을 차단했는데도, 야후봇은 여전히 가장 높은 방문율을 보이고 있습니다.
    여하간 robot.txt 때문인지 야후봇의 방문이 약간은 감소해서, 지금은 초과되는 일이 흔치 않아 보입니다.
    이 플러그인으로 트래픽을 감소시킬 수 있다면 어떻게든 설치해봐야겠습니다.

    perm. |  mod/del. reply.
    • 도아 2006/05/14 08:10

      스트리밍의 전송량과는 상관이 없습니다. 오로지 문자만 압축하므로 일반 전송량이 초과하는 경우에 유용한 플러그인입니다.

  10. 작은세상 2006/06/05 03:54

    태터툴즈 버전 1.0.5사용중입니다.

    blog/item.php, keylog/index.php파일은 2군데를 수정하는것으로 나와있는데요. 정확히 이해하지 못하겠습니다. 어림짐작 가는곳에는 패치를 해놨습니다. 그리고, 나머지 파일들은 패치완료 하였습니다.

    우선 감사드립니다. ^^ 제가 잘못수정한 부분이 있긴한것 같은데... 작동은 잘 됩니다. 1/4가량 압축.. +.+

    제블로그 접속할땐 2개글이 출력되는데요. 첫화면은 압축이 되는데, 특정 글만(1개 포스트) 선택할경우 압축이 않됩니다. ㅜㅜ

    perm. |  mod/del. reply.
    • 도아 2006/06/09 14:01

      특정 글이 압축되지 않는다면 /blog/item.php 파일이 패치되지 않아서 발생한 현상입니다. /blog/item.php 파일을 패치해보시기 바랍니다.

  11. KAIC 2006/08/17 04:02

    안녕하세요 태터툴트 1.0.6.1 사용중 입니다.
    차근차근 따라 하던중에 몇부분이 막혔는데요.
    blog/item.php는 if($view!=’’) print $view;를 fireEvent(’’) 함수로 감싸야 하며,
    keylog/index.php 파일은 print $view와 print $out을 fireEvent(’’) 함수로 감싸면 된다.
    라고 하셨는데... 그러면 keylog/index.php의 경우
    기존 print $out; 에서
    if(strlen($suri['value'])){
    print $out;
    }else{
    print $view;
    }
    로 바꾸고,
    blog/item.php 파일은 기존에
    if($view!='[##_article_rep_##]')
    print $view;
    에서
    if($view!='[##_article_rep_##]')
    fireEvent('OBStartSession');
    print $view;
    fireEvent(’OBEndSession’);
    로 바꿔주는것이 맞는지요?
    잘 이해가 가지 않아서 이렇게 하기는 했는데...
    제대로 작동하고 있는것인지 잘 모르겠습니다.

    perm. |  mod/del. reply.
    • 도아 2006/08/17 17:40

      소스와 비교를 해 보시면 알 수 있지만 if문은 print $out과 print $view의 위를 알려주기 위해 사용한 것입니다.

      따라서 핸들러는 print $out과 print $view만 감싸면 됩니다.

  12. charmzine 2006/08/21 18:32

    프리로딩과 같이 쓰니깐 팍하고 뜨네요 ^^; 아주 좋습니다.
    근데 저는 [##_OBStartSession_##][##_OBEndSession_##] 이렇게 스킨수정에서 프리로딩 스타트와 엔드 사이에 넣어 줬는데 되는건지 안되는건지... 확인 방법이...냠냠... 그래도 왠지 되는 것 같아요. 이미지는 안되는 것 같고요 +_+;

    perm. |  mod/del. reply.
    • 도아 2006/08/24 13:05

      $encoding = 2;로 설정하고 내려받기 가속기로 아무 페이지나 내려받은 뒤 WinRAR로 열어보면 확인할 수 있습니다. 내려받은 파일이 그림처럼 압축 파일로 열리면 정상적으로 동작하는 것이고 압축 형식이 아니라는 메시지가 나오면 정상적으로 설치되지 않은 것입니다.

  13. badung 2006/08/22 12:50

    패치 파일의 모든 print $view를 다 감싸야 하나요?

    perm. |  mod/del. reply.
    • 도아 2006/08/24 13:06

      무슨 얘기인지 모르겠군요. 패치 파일이 뭘 의미하는 것인지요? 아울러 위의 설명에 나오는 파일들은 대부분 $view는 하나밖에 없습니다. 두개가 있는 경우는 if문을 통해 설명을 했고요.

  14. 전중 2007/02/13 14:18

    Tattertools 1.1.1 인데 blog/item.php 하고 keylog/index.php 파일이 좀 다른듯 싶네요.
    다른건 다 고쳤는데 이것만 어딜 고쳐야 할지 헤깔리는군요..좀 가르쳐 주세요^^:

    perm. |  mod/del. reply.
  15. suspec 2007/09/18 16:23

    이플러그인은 apache 에서 mod_gzip 이 설치 되어 있어야 하는건가요?

    perm. |  mod/del. reply.
    • 도아 2007/09/19 04:13

      모듈이 있어야 된다면 발표하지 않았을 플러그인입니다. 애시당초 모듈을 사용할 수 없는 곳에서 쓰도록 만든 플러그인입니다.

댓글로 기쁨을 나눠요!

(옵션: 없으면 생략)

글을 올릴 때 [b], [i], [url], [img]와 같은 BBCode를 사용할 수 있습니다.