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/059/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수
47 Tip 효율적으로 디비 쿼리수 줄이기 Tip ADMINPLAY 2012-01-16 8013
46 Tip 포인트가 마이너스일때 = 포인트 마이너스 회원들 포인트를 0으로 ... l2zeo 2013-03-15 9505
45 Tip 포인트 반복 차감 기간 제한 ADMINPLAY 2012-01-16 8047
44 Tip 페이스북 담벼락에 자동 게시하는 법 l2zeo 2013-01-23 9614
43 Tip 투표(설문) 새창 띄우기 ADMINPLAY 2012-01-16 8826
42 플러그인 코멘트 Ajax 처리 - 아직도 코멘트(댓글)쓰고 전체 페이지 로딩되나요? ADMINPLAY 2012-01-16 16636
41 Tip 출석시 과거 특정날짜 자동출석 인정하는 방법 - 미션출석부 l2zeo 2012-03-12 9322
» Tip 중규모 커뮤니티 속도저하방지를 위한 튜닝 [그누보드 관련] ADMINPLAY 2012-01-16 8786
39 Tip 일정 포인트 이상은 적립안되게 하기 l2zeo 2013-03-15 5072
38 Tip 웹 서비스 구현시 캐시 구현을 남발해서는 안되는 이유? l2zeo 2013-03-18 6570
37 Tip 오늘의 주인공 onfocus="this.blur();"와 a:visited를 소개합니다. ADMINPLAY 2012-01-16 9991
36 Tip 썸네일 생성이 되지 않을때 확인할것 file l2zeo 2013-01-24 7440
35 Tip 스토리보드 이제 쉬워졌어요~~ PowerMockUp 소개 해 봅니다.^^ file l2zeo 2013-03-18 6774
34 Tip 서버이전후 Warning: Cannot modify header information - headers already sent by... 뜰때 l2zeo 2012-09-30 7876
33 Tip 모바일에서도 이미지 리사이징 기능 적용하기 l2zeo 2013-01-24 51271
32 Tip 모바일에서 동영상 크기 지정해서 보여줄때. l2zeo 2013-01-24 6894
31 Tip 마우스 오버할때 아이디 안보이게 하기 file l2zeo 2013-02-03 5766
30 Tip 마우스 드래그시 영역 색상 변경 [selection pseudo-element(dropped)] file l2zeo 2013-01-23 4234
29 플러그인 네이버 스타일 아웃로그인 스킨(?) file ADMINPLAY 2012-01-16 11837
28 Tip 그누보드의 visit 문제 file ADMINPLAY 2012-01-16 6789

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234