아주아주 예전.. 웹사이트에 대해서 엄청 무지했을때 그누보드를 사용해 사이트를 만들어보았습니다
아마 초등학교 때 였을텐데, 처음 설치했을때 메인화면의 휑함은.. 아직까지도 기억에 남습니다..
그리고 중학교때 어떤 프로젝트를 진행하다 XE를 알고 사용하게 되서 지금 라이믹스까지 오게 되었는데요, 어느정도 XE에 적응한 상태에서 그누보드를 사용해보면 어떤 느낌일까 궁금해서 sir을 탐방하고, 직접 그누보드와 기타 빌더도 사용해보게 되었습니다
대략 3일정도 매우 간단하게 보아서 놓친 부분이 많을테지만 그냥 저 사람은 저렇게 생각하는구나~ 하고 가볍게 봐주시면 감사하겠습니다 ㅎㅎ
1. 먼저 그누보드는 양질의 스킨과 작고 간단한 서드파티들이 많다
일단 sir 커뮤니티를 보면서 느낀 점입니다.
먼저 레이아웃을 보면 커뮤니티용 레이아웃은 찾아보기 힘들었지만, 쇼핑몰이나 회사 소개 사이트와 같은 실용적인 레이아웃들이 많았습니다
대부분이 유료로 판매되고 있기는 했지만 일단은 양이 많다는 점이 인상 깊었습니다
또 서드파티 기능들이 상당히 많이 올라오는 것 같았습니다.
무료로 받을 수 있는 부분만 살펴보아도 상당히 자잘한 기능들이 많아보이더군요
대부분의 기능이 XE에도 있지만, sir 쪽이 찾기 쉽고 활발히 기능들이 올라와서 그 점은 좀 부러웠습니다
그누 특성상 많은 사람들이 기본적으로 PHP를 다룰줄 알아서 그런걸까요 ㅎㅎ
2. 각 기능의 분리가 완벽하지 않아 보인다
XE는 크게보면 기능 확장은 모듈, 애드온으로 나뉘고, 화면 표시는 레이아웃과 위젯으로 구성되어있습니다
그런데 그누보드는 기능 확장이 XE 모듈격인 플러그인에서 그치는게 아니라 스킨단에서 주로 만들어지는것 같았습니다
예를 들어 별점을 주는 게시판을 만든다고 가정합니다
XE는 애드온을 사용하여 별점 등록 부분을 따로 만든다던가, 아예 게시판 기능을 카피한 별점 모듈을 만들어 해당 기능을 구현합니다
하지만 그누보드는 해당 기능을 플러그인에서 구현하기보단, 게시판 스킨(?)에 그냥 별점 부분을 하드코딩하여 그 스킨을 배포하는 그런 느낌이였습니다
확실히 눈에 보이는 것만 코딩하면 되니 상당히 개발이 편해보이기는 했습니다만, 큰 프로젝트를 해보니 MVC구조가 얼마나 효율적인지 알게되서..
그누의 특성으로 보지만 그렇게 부러운 코딩 방식은 아니네요.. ㅜ
또 사이트 관리자 기준으로 보면 단일 동작에는 문제가 없지만 여러 기능을 복합적으로 적용하려면 좀 머리가 아플지도 모르겠습니다
3. 정말 raw한 PHP의 정수를 보여준다
이게 제가 글을 쓰게 된 이유랄까 본론인 것 같습니다
XE는 action="/"으로 index.php로 form data를 보내고, 그 데이터 속에 act나 기타 값들을 보내면서 목적지를 알려줍니다
그누보드는 form 데이터를 write_submit.php와 같이 일반 php로 보내버립니다
이건 뭐 딱히 문제가 되지는 않습니다.
그런데 그 값을 받는 php가 참 놀랍더라고요..
일단 include ('./common.php'); 로 시작해서 그누보드 기능들을 불러오는데, 솔직히 그누보드의 기능이 강력하지는 않은거 같습니다
$act, $is_admin과 같이 그누보드 변수, 그리고 g5_로 시작하는 그누보드 상수 말고는 큰 역할을 하는거 같지는 않고요
데이터를 받아오는것도 $_POST['~~'];로 깡으로 받아오니 무슨 값이 들어오던 개발자 자신이 직접 보안 처리를 해야하네요..
여기까지는 그냥 조금 주의를 기울이면 큰 문제는 안되니 넘어간다만
DB 쿼리등을 PHP에서 직접 짜는데, 참 이 상태가 놀랍습니다..
직접 짜는건 그렇다 치는데, 개발자마다 다를테지만 변수를 그냥 query에 넣는것은 물론 post로 받아온 값을 그냥 아무 처리없이 query string에 박아 넣으시는 분도 계시고, 그렇다고 안전하게 그누보드 측에서 무언가를 처리해주는것도 아니고..
다 좋습니다만 PHP 표준에 명백하게 반하는 소스도 있고, 참 중구난방입니다..
PDO는 몰라도 stmt 정도는 사용할 수 있을텐데, 그누보드에서 지원을 하지 않는건지 stmt를 사용한 자료도 찾기 어려웠습니다
아무튼 간단하게만 보아서 놓친 부분이 많을테지만 그누보드를 보고 참 여러가지를 생각하게 만들어주네요..
한번 그누보드쪽도 개발해볼까 생각하고 있긴 하지만, 저에게는 아직 XE 구조가 더 안정적으로 보여서 여기에 남아있고 싶네요
정말 라이믹스의 존재에 감사하고 있습니다 ㅜㅜ
서드파티는 정말 많은데, 2번 문제 때문에 조합하기가 힘들지요.
별점 기능도 있고 추천 관련 확장기능도 있고 신고 관련 확장기능도 있지만
소스를 직접 파악해서 직접 조합하지 않으면 그 기능들을 한꺼번에 적용하기가 어렵다는... ㅠㅠ
SQL 보안은 순전히 이 부분 덕분에 유지되는 겁니다. magic_quotes_gpc와 거의 똑같은 방식이지만,
그누보드5는 UTF-8 전용이므로 이 방법으로도 큰 문제가 생기지는 않습니다.
https://github.com/gnuboard/gnuboard5/blob/master/common.php#L108
심지어 모든 GET, POST 파라미터를 전역으로 풀어서 register_globals 시절의 영광을 되찾아 주는데요.. ㅋㅋ
이것도 충돌 가능성이 있는 변수들을 미리 제거해 주는 방식으로 땜빵합니다.
https://github.com/gnuboard/gnuboard5/blob/master/common.php#L17
common.php에서 해주는 게 별로 없어 보일 수도 있지만, 이런 것들이 굉장히 중요해요.
덕분에 쉽게 뚫리지는 않습니다.
따지고 보면 XE의 Context 변수들도 비슷한 방식으로 처리되지요.
비번 암호화 방식도 제가 예전에 PHP스쿨에서 배포했던 pbkdf2.compat.php가
얼마 전부터 기본 적용되었더군요. 그누보드 코어 개발팀은 나름 보안에 꽤 신경쓰는 듯 합니다.
다만 서드파티들이 어디로 튈지 모른다는 것이 함정...