예전에 책원고로 만들었던것인데 필요한분 사용하세요 > 그누3 팁자료실

그누3 팁자료실

예전에 책원고로 만들었던것인데 필요한분 사용하세요 정보

예전에 책원고로 만들었던것인데 필요한분 사용하세요

첨부파일

book.zip (1.4M) 1334회 다운로드 2005-10-20 13:30:51

본문

예전에 성** 기획으로 책을 공동집필로 쓸기회가 있었는데 그때 만든 원고 부분입니다.
제가 원고를 처음 써봐서 어색하고 이상할지 모릅니다.
그책은 결국 빛을 보지 못햇지만, 여러분이 유용하다 생각하시면 수정하고 발전시켜 사용하세요.
발전시킨후 피드백은 의무입니다. ㅎ

내용은 여러분이 많이 고민하는 각 커뮤니티 메인페이지의 속도 문제와 관계있으며
서버의 세팅과는 그리 관계없이 웹호스팅 환경에서도 사용할수 있습니다.

예제는 그누보드 3으로 한게 있으니 도움이 되실지도....

졸필입니다. 소스도 포함되어있습니다
추천
3

댓글 전체

음 제가 궁금해서 그러는데
내용이 어렵나요 쉽나요?
유익한 내용인가요?
활용하긴 쉬운가요?
만약 책으로 냈다면 괜찮았을까요?
ㅎㅎㅎ 이런게 궁금해요
보신분들은 코멘트좀 달아주세요.
저도 궁금해서 그러는데요, 책 예정 제목이 뭔가요?
내용은 어렵지 않은거 같습니다.
유익한 내용인거 같습니다.
활용하기도 어렵지는 않겠습니다.
이 부분만 봐서 책으로 내서 괜찬을지 어떨지는 알수 없겠는데요...
빛을 보지 못했다니, 안타깝네요...
참, 다들 기본은 아시겠지만
제 원고를 사용하시거나
소스를 사용, 수정발전시켜 사용하실때
원작자 정도는 명시해 주시기 바랍니다.
제가 팁을 너무 성의 없게 올린거 같아서
팁에 대한 설명을 조금 해야 할듯합니다.

소스에 포함되어있는 Ysummary를 사용할경우 엄청나게 많은양의 쿼리실행을 줄일수 있습니다.

예로서 phpschool.com을 들면 (이하 학교로 표현합니다.)

제가 학교의 모든 부분을 알수는 없기에 몇가지 전제를 하고 설명합니다.
이하 경어체는 생략합니다.

1. 메인페이지의 하루 페이지뷰는 10만이다.
2. 메인페이지는 총 10개의 게시판에서 최신글만 뽑아서 뿌려준다.
3. 각 게시판은 모두 다른 테이블이다.
4. 다른 방법은 사용하지 않고 데이타베이스만 사용한다.
5. 하루에 데이터의 변동수는 1000개 미만이다(새로운글, 수정, 삭제, 코멘트 등)
6. 각 하부페이지도 모두 한번씩 이상의 쿼리 실행이 있다.
7. 하루 최대 동시접속자수는 300 이다.
8. 별도의 캐쉬 프로그램은 사용하지 않는다.

한번의 메인페이지 방문으로 실행되는 쿼리의 수는 총 10개이다.
그럼 메인페이지가 하루 10만페이지뷰일때 총 실행되는 쿼리의 수는
100,000 * 10 = 1,000,000
백만번이다.

만약 Ysummary를 사용할 경우는
전체에서 하루에 총 업데이트되는 데이터양이 1000건이라고 한다면
각 업데이트가 실행될때마다 Ysummary에서 필요한 2번의 쿼리가 실행되므로
1000 * 2 = 2,000
2천건이다.

따라서 Ysummary를 사용함으로서 하루의 줄일수 있는 쿼리실행수는
1,000,000 - 2,000 = 998,000
구십구만팔천건이다.

그럼 방향을 바꿔서 동시접속자로 생각해보면
일단 이해를 돕기 위해 웹서버의 조건은 무시한다.
그냥 수치적인 설명을 위한 것일뿐 동접에 대한 의미와
디비의 maxconnections의 대한 의미는 따지지 말도록 한다.
단지 이해를 돕기 위한 차원의 설명이니 의미만 이해해 주기 바란다.
데이터베이스는 동시접속을 255 만을 허용할수 있다고 가정한다.
하루 최대 동접이 300명(메인페이지에 100명 나머지 하부페이지에 200명이 분산되어있다고 가정)이면 그때는 too many connections 와 같은 에러를 뿌린다.
하지만 Ysummary를 사용했을 경우는
메인에 100명은 쿼리실행이 없으므로 나머지 200명의 쿼리실행만 있다.
즉 too many connections와 같은 에러를 뿌리지 않게 된다.

다른 방법(크론으로 스케줄링)과의 비교
크론을 사용하는 방법은 다음과 같다고 가정한다.
1. 일정시간 (5분이라 가정) 에 한번씩 스크립트를 실행하도록 설정한다.
2. 일단 5분에 한번씩이므로 메인에서 실시간은 포기된다.
3-1. 총 10개의 테이블에서 최신글을 가져오고 배열로 저장하는 스크립트를 작성한다
3-2. 현재의 10번의 쿼리를 실행하는 메인페이지를 그대로 실행 시키고 그 결과를 파일로서 저장하는 스크립트를 작성한다.
3-3. 기타 여러가지 방법이 있을수 있다.
4-1. 메인페이지에서는 저장된 배열을 인클루드하여 사용한다.
4-2. 메인페이지는 저장된 메인페이지를 읽어와서 뿌려준다.

일단 실시간이 포기된다는게 가장 큰 차이다.
하지만 Ysummary를 사용할때보다 페이지를 통째로 저장하는 방식이 메인페이지 실행은 더 빠를수 있다.

쿼리 실행수를 비교해보자.
아무런 초치를 하지 않았을때 메인에서 실행되는 총 쿼리수는 위에서 계산했듯이 1,000,000건이다
5분에 한번씩 스크립트를 실행한다면 하루가 24시간이고 1시간은 60분, 5분의 12배이다.
스크립트 한번 실행될때 실행되는 쿼리수는 10(테이블의 수와 동일하다)번이다
따라서 메인페이지를 보여주기 위해 실행되는 총 쿼리수는
10 * 12 * 24 = 2,880
이천팔백팔십건이다.
크론을 사용하는 방법이 Ysummary를 사용시보다 메인페이지를 보여주는 시간은 단축할수 있으나
실시간을 포기해야 하며, 실행쿼리수는 더 많다.
만약 스크립트 실행 시간을 매 1분으로 한다면 * 5가된다.


일단 다른 부분에 대한 것은 배제하고
쿼리실행의 개수만으로 비교한것입니다.
감사합니다.
저같은 초보에게도 개념은 바로 들어오는데 공부는 한참해야 할 것 같습니다.
내려받고 스크랩해 둡니다.
좋은 자료를 접할 수 있는 기회를 주신점 감사합니다.
코멘트 고맙습니다.
도움이 되시면 좋겠습니다.
아직은 확실히 않지만, http://kldp.net 에서 공개프로젝트로
한번 진행해 볼까 합니다.
적용시켜 보았습니다.
첨부되어 있는 설명서가 세심해서 찬찬히 읽어보면서 따라 해보니
저같은 초보도 실수없이 설명하신 부분까지 무리없이 진행되었습니다.
단지 설명해주신 부분까지만 적용시켜놓아서 별 다른것은 없으나,
미리보기를 원하시면 아래 링크를 참조하세요.
http://gnusr.com/g3/?gur=test
Ysummary하위 파일들을 루트에 풀고 기존 g3폴더에 설치된 gnu.3.43 최신버전으로 테스트했습니다.
하위 파일들을 루트에 풀다보니 구분을 위해 Ysunnary.php에서 아래 경로만 조금 수정했습니다.

//디렉토리 경로 설정 구분을 위해 수정
$this->dir = str_replace("/Ysummary.php", "", __FILE__);
$this->conf_dir = $this->dir . "/Yconfig";
$this->data_dir = $this->dir . "/Ydata";
$this->log_dir = $this->dir . "/Ylog";


좀더 익힌후 방문자나 데이타가 많은 곳, 그리고 G4버전에 적용해볼 예정입니다.
제가 할 수 있는 것 이래야 그누보드에 좀더 손쉽게 적용하는데 그칠 것이나
자그마한 것이라도 저같은 초보를 위해 도움이 될 수 있다면 나름대로 정리해서 올리도록 하겠습니다.

유창화님께 거듭 감사의 말씀을 드립니다.
몇분들이 선택삭제 선택복사 선택이동시에도 gnu3에서 Ysummary가 적용되도록 하는 방법을 알려달라고 해서
여기에 몇글자 적습니다.

수정할 파일 세개
bbs/gbdeleteall.php
bbs/gbmoveupdate.php
bbs/gbmoveallupdate.php

1. bbs/gbdeleteall.php 은 맨마지막 gotourl("./?doc=bbs/gnuboard.php&$qstr&page=$page"); 바로 위에줄에
아래의 코드를 삽입합니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
//Ysummary 클래스 인클루드
include_once "../Ysummary.php";
$Ys_key = "gnu3_" . $bo_table;
$Ysummary = new Ysummary_save($Ys_key);
$Ysummary->Ysummary_save_Ys_data();
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

2. bbs/gbmoveupdate.php 은 130라인쯤에
// 파일 삭제
@unlink("$srcdir/$row[wr_file1]");
@unlink("$srcdir/$row[wr_file2]");
이부분 다음에 아래의 코드를 삽입합니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
//Ysummary 클래스 인클루드
include_once "../Ysummary.php";
$Ys_key = "gnu3_" . $bo_table;
$Ysummary = new Ysummary_save($Ys_key);
$Ysummary->Ysummary_save_Ys_data();
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

3. bbs/gbmoveallupdate.php 은 두군데를 수정해야 하는데 먼저, 143라인쯤에
// 파일 복사
@copy("$srcdir/$row[wr_file1]", "$dstdir/$row[wr_file1]");
@copy("$srcdir/$row[wr_file2]", "$dstdir/$row[wr_file2]");
이부분 다음에 아래의 코드를 삽입합니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
//Ysummary 클래스 인클루드
include_once "../Ysummary.php";
$Ys_key = "gnu3_" . $copy_bo_table;
$Ysummary = new Ysummary_save($Ys_key);
$Ysummary->Ysummary_save_Ys_data();
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
두번째는, 176라인쯤에
foreach ($tmp_query as $key => $value) {
    sql_query($value);
}
이부분 다음에 아래의 코드를 삽입합니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
//Ysummary 클래스 인클루드
include_once "../Ysummary.php";
$Ys_key = "gnu3_" . $bo_table;
$Ysummary = new Ysummary_save($Ys_key);
$Ysummary->Ysummary_save_Ys_data();
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


이상입니다
전체 12
그누3 팁자료실 내용 검색
  • 개별 목록 구성 번호 제목 작성자 작성일 추천 조회
  • 게시물이 없습니다.

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT