Skip to content

그누보드는 다양한 옵션들로 일반사용자들이 일반적인 사용과 커스트마이징하여 확장하기 좋은 시스템이다.
하지만 일반사용자를 위한 편의 위주의 로직으로 인하여 조금 커뮤니티 사이트가 커지면

현실적으로는 DB퍼포먼스가 zb4보다 떨어진다.

해당 문제점을 짚어보면 이렇다

1. get_list 함수의 문제점

   이 함수는 최신글의 latest함수와 게시판 글보기, 게시판 리스트에서 사용되어진다.

   문제점은 현실적으로 최신글과, 게시판 리스트에서 파일이미지 정보를 필요로 하지 않거나

   혹 필요하더라도 썸네일 형태로 필요하다는 점이다.

   하지만 get_list에는 기본적으로 적용되어져 잇다.

   최신글상에 실제 적용가능한 필드는, wr_id, wr_subject, ca_name, wr_content, wr_datetime, mb_id, wr_hit

   wr_comment 정도가 사용하는 정도라면 latest함수에서는 별도의

   get_list2함수를 사용하고 select * from이 아닌 SELECT wr_id, wr_subject, ca_name, wr_content, 

   wr_datetime, mb_id, wr_hit, wr_comment FROM 형태로 사용되어져야 할것이다.


2. 확장을 염두해둔 wr_1 ~ wr_10 VARCHAR(255) 보드의 확장을 위해서는 참 편리한 필드이겠지만

   get_list 상에서 SELECT * FROM 형태로 읽어들이는 상태에서는 문제가 될수 밖에 없다고 여겨진다.

   어차피 기본 구조에서 저장을 하지 않고 혹 확장이 필요한 경우만 확장을 위해서

   write_update.skin.php를 include처리함으로 정말 확장 필드가 필요한 스킨에 대해서는

   기본 로직에서 wr_1 ~ wr_10까지 사용하게 하는걸 해제하고 write_update.skin.php 상에서 필드를 

   DB에 적재하게 하는이 나을듯 싶다.

3. 확장을 염두해둔 $g4[board_table] bo_1 ~ bo_10, bo_1_subj - bo_10_subj 
   현재 이 필드는 주로 겔러리 스킨에 썸네일 생성을 위한 이미지크기와 퀄리티 등에 주로 사용한다.

   post,get상에 bo_table값이 존재하게 되면 common.php상에서 
   무조건적으로     $board = sql_fetch(" select * from {$g4['board_table']} where bo_table = '$bo_table' ");를
   실행하게 된다 

   하지만 쿼리상 SELECT * FROM를 사용함으로써 DB포퍼먼스를 떨어트리게 된다.
   기능성 스킨에 대해서는 보드 설정보다는 스킨자체에 설정해주는편이 사이트 속도를 위해서 낫다.
  

4. 최신글과 게시판 막 접속시 속도해결방법

    최신글과 특별한 경우가 아닌(정렬방식을 다르게 햇을경우를 제외) 게시판을 검색없이 접속시 결국 

    가장 나중에 저장된 최신 게시물을 가져오게 된다.

   그렇타면 게시판 글수가 많타면 전체 게시물에 대하여 정렬을 한후에 그 안에서 limit가 이루어지게 된다.

   하지만 새글을 작성할시 $g4[board_table] 안에 bo_last_wr_id 필드값을 만들어서 저장하고

   최신글상태에서 쿼리상 and wr_id > (bo_last_wr_id - 100)를 추가해주게 되면

   가장 나중에 작성한 wr_id 에서 코멘트를 감안하여 100개가 적은수치보다 큰값에 대하여 WHERE 하고

   그 해당 자료에서 정렬하고 다시 그안에서 rows를 가져오면 속도 향상을 볼수 있다.

   게시판 리스트상에서는 page<2적고 검색과 카테고리값이 존재하지 않을시 동일한 방식으로

   쿼리를 생성하여 출력하면 속도 향상을 볼수 있다.
   
5. 검색어에 대한 문제

   보통 커뮤니티사이트에서 인기검색어를 많이 출력해주고 있다

   그누보드의 검색어 등록방식은 g4_popular에 검색시 검색 단어와 시간 그리고 아이피를 순차적으로 등록

   방식을 취하고 있다

   하지만 검색이 많이 이루어지는 사이트에서 상당기간 사이트를 운영하다보면 g4_popular전체 필드에 
  
   대하여 인기 검색어를 뽑아내게 된다면 DB에 많은 부하를 줄수 밖에 없다

   이 문제를 해결하기 위해서 각 문장에 대한 카운터값을 가지는 테이블을 별도로 구성하고

   해당하는 검색시 카운터필드와 검색어 필드에 동시 적재를하고 인기검색어 출력시

   검색어 카운터필드의 카운터만 정렬해서 출력하는 방식을 취해야한다.
profile

일요일은 짜빠게뤼~ 먹는날~^^

엮인글 :
http://adminplay.com/74378/897/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
7 [긴급]그누보드 4.34.05 패치 ADMINPLAY 2012-01-16 5358
6 Tip [caching tip] js, css 캐싱 팁 l2zeo 2013-01-23 5335
5 Tip css 폰트 설정시 브라우저 제약없이 비슷하게 보이게 하는방법은?? file l2zeo 2013-01-23 5274
4 Tip DTD(Document Type Definition) 란? l2zeo 2012-10-02 5258
3 Tip 그누보드내에서 링크를 이용할때 \ 값이 자동 생성될때는? l2zeo 2012-09-30 5229
2 Tip 일정 포인트 이상은 적립안되게 하기 l2zeo 2013-03-15 5074
1 Tip 마우스 드래그시 영역 색상 변경 [selection pseudo-element(dropped)] file l2zeo 2013-01-23 4234

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234