2009년 7월 29일 수요일

게시판 리스트 부분 프로그램

예전에 10만건인가 백만건 게시물부분에 대한 프로그램을 해본적이 있다.
뭐 여러 방법들이 많이 있고 어떤 부분에서는 상당히 알고리즘을 가진 것도 본적이 있다.
하지만 게시판이 무엇인가? 이 고민을 하게되니 10만건 혹인 백만건의 의미가 사라졌다.
자유게시판에 10만건 이상이 등록될 일도 없을 뿐더러 몇천건이라도 쌓이면 다행일 게시판을 위해
복잡한 프로그램을 할 필요는 없겠다. 싶어 간단하고 수정이 편한 게시판을 만들어 보았다.
아래는 그 일부분을 올려둔다.

 <table width=100% align=center border=0 cellpadding=4 cellspacing=1>
  <tr height=25>
   <td width=40 align=center class=board_title_bg>번호</td>
   <td align=center class=board_title_bg>제목</td>
   <td width=120 align=center class=board_title_bg>작성자</td>
   <td width=120 align=center class=board_title_bg>작성일시</td>
   <td width=100 align=center class=board_title_bg>조회수</td>
  </tr>
  <?
   if($qa_text) {
    $whereis = "where ".$state_str_sql." title like '%".$qa_text."%'";
   } else {
    $whereis = "where ".$state_str_sql;
   }
   $nTotalCount = selectCount("_webhard_bbs","idx",$whereis);

   $num_tt = $nTotalCount;
   $nPage = ceil($nTotalCount / $g_list_rows);
   if ($pg == "") $pg = 1;
   $nFrom = ($pg - 1) * $g_list_rows;
   $num_tt = $num_tt - (($pg - 1) * $g_list_rows);

   $contents = selectQuery("select * from $table ".$whereis." ".$order_txt." limit ".$nFrom.", ".$g_list_rows);

   if($nTotalCount < 1) {
    echo "<tr>
      <td colspan=7 height=40 align=center>자료가 없습니다.</td>
     </tr>";
   } else {
    for($i=0;$i<$g_list_rows;$i++) {
  ?>
  <tr>
   <td height="30" align="center" class=line_board_bottom><? echo $num_tt?></td>
   <td style="padding:0 0 0 10 " class=line_board_bottom><?=$contents[title][$i]?></td>
   <td align="center" class=line_board_bottom><?=$contents[writer][$i]?></td>
   <td align="center" class=line_board_bottom><?=date("Y-m-d H:i:s", $contents[regdate][$i])?></td>
   <td align="center" class=line_board_bottom><?=number_format($contents[hit][$i])?></td>
  </tr>
  <?
    $num_tt--;
    }
   }
  ?>
  <tr>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <form name=frm_qa_search method=get action=file_list.php>
   <input type=hidden name="code" value="<?=$code?>">
   <input type=hidden name="qa_text" value="<?=$qa_text?>">
   <input type=hidden name="pg" value="<?=$pg?>">
   <td align=center colspan=7><input type=text name=qa_text value='<?=$qa_text?>' size=30> <input type=image src='./img/button/bt_seach.gif' align=absmiddle></td>
   </form>
  </tr>
  <tr>
   <td align=center colspan=6><?echo pageListing($pg, $nPage, $g_list_rows, "./file_list.php?code=$code&qa_text=$qa_text&pg=")?></td>
  </tr>
 </table>

게시판의 속도는 보통인 편이다. 그러나 적은 게시물을 가지고 있는 게시판에 응용해서 사용한다면
얼마든지 백만건게시판도 가능할 것이다. 어차피 디비는 가져오는 방식의 문제가 아닌가!
있는 디비를 손대기 어렵다면 어떻게 잘 가져올지 생각해보면 될 것 이다.

넉두리라면... 프로그램초기에는 디비를 어떻게 튜닝하는지 프로그램을 어떻게 짜는지도 몰랐지만
이제 몇년 하다보니 약간씩 눈에 들어오는 것은 대규모가 아니라면 역시 유지보수가 편한 심플형이
좋다라는 거다 사이트를 하루에 몇개씩 찍어내는 공장이나 혹은 중소형 홈페이지라도
결국은 가장 기본적인 부분에 출발하니 말이다.

게시물이 백만건이 쌓이기 전에 테이블을 분리하던지 게시판을 몇개를 더 만들어서 카테고리를 만드는것이
더 현명할 것이다. 디비튜닝보다는 회사에 하드웨어를 추가해달라고 하는게 더 정신건강에 좋을듯
그렇게 투자하기 싫다면 어쩔 수 없겠지만 말이다.

좋은 알고리즘을 가지고 프로그램 천라인을 써서 만들건지 기본적인 알고리즘으로 백라인안에
프로그램을 할지는 선택하는 사람의 몫이다.

댓글 없음:

댓글 쓰기