글 수 47
그누보드는 다양한 옵션들로 일반사용자들이 일반적인 사용과 커스트마이징하여 확장하기 좋은
시스템이다.
하지만 일반사용자를 위한 편의 위주의 로직으로 인하여 조금 커뮤니티 사이트가 커지면
현실적으로는 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에 많은 부하를 줄수 밖에 없다
이 문제를 해결하기 위해서 각 문장에 대한 카운터값을 가지는 테이블을 별도로 구성하고
해당하는 검색시 카운터필드와 검색어 필드에 동시 적재를하고 인기검색어 출력시
검색어 카운터필드의 카운터만 정렬해서 출력하는 방식을 취해야한다.
하지만 일반사용자를 위한 편의 위주의 로직으로 인하여 조금 커뮤니티 사이트가 커지면
현실적으로는 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에 많은 부하를 줄수 밖에 없다
이 문제를 해결하기 위해서 각 문장에 대한 카운터값을 가지는 테이블을 별도로 구성하고
해당하는 검색시 카운터필드와 검색어 필드에 동시 적재를하고 인기검색어 출력시
검색어 카운터필드의 카운터만 정렬해서 출력하는 방식을 취해야한다.