그누보드로 여러사이트운영

교회 웹사이트를 제작하면서 많은 도움을 받은 솔루션이 있다. 그누보드다.  초창기 제로보드가 대세일때 어느순간 대항마로 떠오른 PHP계열의 새로운 솔루션이었다. 당시만해도 Zerobard는 모든 솔루션에 반드시 저작권명시를 해야만 한다는 조항이 있었기때문에 저작권명시를 하지 않아도 된다는 약간의 Copyleft 정신같은 조건들때문에 많은 유저들이 이쪽으로 이동을 했었다. 한때 필자도 zeroboard에 심취하면서 ASP공부르 하다가 제로보드 같은 보드를 만들자고 시작한 것이 shinboard였었는데^^;;  이젠 아련한 추억이 되었다.

그누보드는 많은 사람들의 웹사이트제작의 입문장이 되었고, 지금도 여기서 새로운 시작을 하는 사람들도 있다. 요즘은 인디웹의 트렌드로 더욱더 WordPress와 제로보드가 새롭게 CMS쪽으로 방향을 틀어 기획된 XE(Express Engine)가 이목을 받지만 그래도 여전히 깊이 들여다보면 어려운 점들이 많다. 시대의 흐름에도 불구하고 여전히 그누보드는 사랑을 받고 있고, 개인적으로 오랫동안 지속했으면 하는 바램이 많고, Blog형태의 솔루션이 대세라고 하지만 Board형태의 Community를 지향하는 솔루션의 대표로 오랫동안 남았으면 하는 바램이 있다.

ch2ch.us를 그누보드를 배경을 시작하면서 많은 우여곡절이 있었다. 한국과 다르게 미국의 대부분 호스팅회사들은 unlimited traffic, unlimited space등을 내세워 아주 저렴하게 호스팅서비스를 제공한다. 처음에 그누보드는 euckr의 언어세팅만 제공되어서 언어적인 제약을 많이 받았었고, 개인적으로 utf8으로 모두 수정하여 사용했었는데 가장 어려운 점은 database의 구조였다.

처음에 한개의 사이트를 한개의 그누보드로 제작을 시작했었는데 두개이 호스팅회사로부터 지적을 받게 된 것이 Database의 구조적인 문제였다. 처음에는 아무런 문제가 없었지만, 10개의 사이트만해도 Database내에 존재하는 table수가 급격하게 늘어나는 상태가 된 것이다. 그누보드를 이용해서 cafe 솔루션을 개발했었는데… 한개의 cafe가 10개의 메뉴를 가지게 되면 그누보드는 g4_wirte_boardname형식으로 10개의 신규 table이 생성되게 되는데… 이런 사이트가 10개만되어서도 table만 100개가 넘어가는 일이 발생된다.

또 이렇게 사이트가 많아지다보니 database의 효율성의 떨어져 몇번씩 서버회사로부터 performance policy를 위반했다면서 일주일안에 수정하지 않으면 close한다는 경고를 받기도 했다. 그이후에 한개의 그누보드로 여러개의 사이트를 만들면 어떨까 고민하면서 DB의 구조를 모두 바꾸기 시작했다. 가장 큰 것은 게시판당 만들어지는 table을 한개의 g4_data라는 테이블에 모두 저장되게하고, 게시판을 구분하는 field만 두어 구분하는 방식이다. 이렇게 하면 일단 아무리 많은 게시판이 생성되어서도 table은 한개만 있어도 되는 샘이다.

또 많은 사이트를 구분하기위해 config에 cf_id를 두어 사이트마다 구분하는 필드를 두고, 도메인으로 접근하면 해당 도메인으로 cf_id를 찾아서 해당 그누보드의 data가 load되도록 하는 방식이다.

메인 root 에 도메인을 찾아서 해당 도메인으로 home 폴더를 이동하게 하고,

$domain = str_replace("www.","",$_SERVER[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"]["HTTP_HOST"]);
$str = explode(".",$domain);
$homeName = $str[0];
echo "<script>location.href='$homeName/index.php';</script>";

항상 먼저 일게 되는 common.php에 cf_id를 호출하도록 하는 구문을 넣었다.

$config = sql_fetch(" select * from $g4[config_table] where cf_domain = '$client_domain' ");
$cf_id = $config[cf_id];

여기 cf_id를 바탕으로 모든 그누보드의 table작업에 사이트를 구분하여 적용하도록 한다. 글쓰는 현재까지 g4_data 테이블에 등로된 게시물은 420,000개 정도이며 회원은 15,000명 정도인데… 무난하게 잘 돌아가고 있다.

 [/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]