나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-11-25 09:24:45

그누보드

<colbgcolor=#7e00ff><colcolor=#fff> Gnuboard
그누보드
종류 CMS
언어 PHP[~v5], Python[v6~]
라이선스 GNU 약소 일반 공중 사용 허가서(LGPL)[~v5], MIT 허가서[v6~]
개발 SIR 소프트
최신 버전 5.5.11 (2024년 1월 2일)
6.0.0 (2024년 1월 16일)
SIR 홈피겸 그누보드 사용자 커뮤니티
그누보드 5 Github 저장소
그누보드 6 Github 저장소

1. 개요2. 특징3. 설치 환경
3.1. 그누보드 53.2. 그누보드 63.3. 장점
3.3.1. 그누보드6
3.4. 단점
3.4.1. 그누보드 53.4.2. 그누보드 6
4. 역사
4.1. 그누보드 14.2. 그누보드 34.3. 그누보드 44.4. 그누보드 54.5. 그누보드 6
4.5.1. 특징
5. 기능6. 파생된 프로그램
6.1. 영카트6.2. 그누커머스6.3. 라온보드
7. 관련 문서

1. 개요

그누보드는 2000년대 초반부터 쓰이고 있는 PHP 기반 오픈소스 설치형 인터넷 게시판 프로그램(CMS)이다. 홍석명이 처음 개발하였으며 "에스아이알소프트"라는 회사를 설립하여 지속해서 업데이트하면서 배포하고 있다. 독자적인 라이선스를 사용하고, 게시판 밑에 저작권 표기하라고 했던 제로보드와는 달리 GNU 개념의 프로그램이고, LGPL 라이센스를 사용한다. 이름부터가 자유 소프트웨어를 뜻하는 '그누(GNU)'일 정도. 라이선스 자체가 오픈소스인데다 유저가 만든 스킨이나 플러그인에는 GPL을 적용 안 해도 된다는 예외 조항이 있기 때문에, 스킨이나 플러그인 개발이 많고 여러 가지 웹빌더도 나와 있다.

권장 설치 PHP 버전은 PHP 7.2 이상이다.

버그가 있거나 고칠 점은 공식 Git 저장소에 이슈로 남기자.

버전 5까지는 PHP였으나, 버전 6부터는 Python으로 넘어갔다.

2. 특징

PHP 처음에 나온 목적대로 PHP 를 통해 HTML을 수정 후 출력하는 구조라 단순한 편이다.[5] 모든 코드가 전역상태에 존재한다. 깃허브에는 오픈소스로 공개되어 있지만 개발, 사용자 문서화가 부족해서 소스코드를 보거나 QnA 를 참고해야 한다. 깃헙에 이슈사항을 올리자.

소셜 로그인과 훅스 기능이 있다. 훅스기능이 들어간 이후로는 개발자는 스킨이나 테마에서 훅스로 기능을 추가하면 되고 코어는 건들지 않고도 개발 가능하다.[6]

업데이트는 꾸준히 한다. 특정일이 정해진 건 아니지만 적어도 한 달에 한 번은 나온다. 게시판과 쇼핑몰에 필요한 기본적인 기능은 다 있어서 기능 추가는 적어도, 보안 패치가 꾸준히 나오는 편이다.

예전에는 기능 추가를 위해서 그누보드 원본의 소스 코드를 직접 수정하는 일이 다반사라서, 너무 많이 고쳤을 경우 업데이트가 어려워지거나 못하게 되는 문제점이 존재한다. 그나마 5.1 버전에서 테마에 커스텀 라이브러리를 추가할 수 있는 기능을, 5.4 버전에서 후크 기능이 들어가서 소스 수정할 일은 전보다 줄어든 편이다.

그누보드는 탈퇴 시 개인정보 중 아이디, 닉네임, 이름만 남기고 나머지 정보만 삭제한다.[7] 그래서 탈퇴 후 재가입할 때, 탈퇴했던 아이디로는 가입할 수 없다.(사이트 운영자가 별도로 삭제하지 않는 한...)

3. 설치 환경

3.1. 그누보드 5

그누보드 5.3 이상을 설치하려면 다음과 같은 조건이 필요하다.

3.2. 그누보드 6

그누보드 6부터는 파이썬으로 제작되어 다르다.

리눅스 VPS 가상서버 또는 클라우드 서버를 기준으로 그누보드 홈페이지를 운영할 수 있는 최소 사양은, 한적한 블로그나 조용한 사이트는 2GB 메모리와 1 vCPU면 원활하게 돌아간다. 동시 사용자가 50명 정도까지는 사이트의 경우에는 2GB 메모리는 있는 것이 좋고, 활발한 사이트의 경우에는 4GB 메모리와 2+ vCPU가 권장 사양이다.

그누보드5는 DB 쿼리를 많이 호출하므로 DB 에 메모리를 더 할당하는 게 성능에 도움된다.

6 버전은 5 버전보다 기본 쿼리호출이 줄었다.[15]

3.3. 장점

3.3.1. 그누보드6

파이썬(Python)의 FastAPI기반으로 작동하므로 그 속도가 상당히 빠르며 무엇보다 MVC 구조로 되어 있고 확장성이 좋다.

3.4. 단점

3.4.1. 그누보드 5

처음 개발 당시 PHP 프로그램들은 워드프레스를 비롯하여 MVC 아키텍쳐를 (2000년대 후반이후 보편화된 웹 서버 개발 방법론) 쓰지 않았는데 그누보드도 그렇다. 컨트롤러로만 이루어져 있어야 할 /bbs 경로에 있는 코어 파일들 조차 HTML을 출력하는 경우가 있어서 테마/스킨만으론 고치지 못하는 HTML 구조가 있으며, 그리고 그누보드 배포판은 그렇지 않지만 사용자 코드를보면 뷰로만 이루어져 있어야 할 스킨 파일에서 SQL쿼리를 직접 실행하는 경우도 많다.

2016년 이후로 웹개발에 대세가된 SPA, 리엑트나 뷰 같은 프론트 화면을 SPA가 아니더라도 SSR(서버사이드 렌더링)하는 NextJS, nuxtJS 등도 못 쓴다. SSG(정적사이트 생성) 개발도 마찬가지. SPA 의 등장이후 SSR. SSG 등 프론트 프레임워크들과 서버는 JSON 을 주고받는 구조로 가고 있기 때문이다. 즉 리엑트나 Vue.js 를 붙일 수가 없다. REST API를 지원하지 않는 것 때문에 API만 가져다 쓰는 형식의 프론트엔드와의 조합은 소스를 마개조 수준으로 수정하지 않으면 불가능하다.

그누보드로 흥한 사이트들의 앱 서버 개발할 때도 인증 부분을 제외하면 기존 코드를 재활용하기 어려운 경우가 많기 때문에 (위의 이유로) 서버로직을 새로 개발해야되는 상황이 생긴다. CMS 는 컨텐츠(게시판) 관리 프로그램이지 개발을 편하게 해주는 도구가 아니다. REST API를 지원하는 프레임워크를 이용한 개발이 권장된다. [16] 많은 에이전시들이 프레임워크를 안쓰고 단순 CMS 를 가지고 개발을 하려고 하니까 위와 같은 문제가 발생하며 심한 경우에는 단순 CMS를 고집하다가 그대로 리액트나 뷰 빌드 파일을 CMS와 함께 놓는 경우도 있다. 물론 단순 홍보페이지들에서는 상관없는 이야기다.

그누보드의 보안적인 측면을 보면, 기본적으로 제로보드와 비슷한 구조를 가지고 있다 보니 SQL prepared statement 미지원, extract 함수로 구현한 외부 입력값의 변수화 (PHP 언어에서 업데이트하면서 막은걸 다시 구현한 것. )등 제로보드의 보안 취약점을 그누보드도 고스란히 가지고 있다. 이 보안 문제는 업데이트하고 있는데 구조적 문제라 계속 나오고 있다. 그누보드가 업데이트될 때 꾸준히 업데이트하자. 코어를 수정했다면 안타깝지만,업데이트는 어려워진다.

또한 그누보드는 PHP 5.2 를 지원하느라 네임스페이스를 쓰지 않기때문에 함수와 상수들이 전역에 널려있어 충돌할 여지가 있다. 코드를 보면 주로 상수가 있는지 체크하는데 다른이유도 있지만 이런 부분도있다.

PHP 진영에서 세월이 지나면서 하지 말라고 하는 것들이 총제적으로 들어있다.

그나마 Rest API 지원은 2024년 7월 10일 공지를 통해서 업데이트로 지원하겠다고 밝힌 상태라 근시일내에 해결될 가능성이 높아졌다.

3.4.2. 그누보드 6

충분한 수요조사 없이 갑작스레 공개되어 유저들의 반응은 미지근한 상태이다. 특히 기존 DB는 그대로 사용할 수 있으나 스킨이나 자료는 언어의 차이로 사용할 수 없는 것이 제일 큰 단점이다.

특히나 기존 그누보드 5와 달리 서버까지 함께 구동하는 방식으로 필히 가상서버 등 서버 관리 권한이 있어야 사용할 수 있다.

비동기 프레임워크인 FastAPI를 사용하지만 DB 연결을 동기식 함수를 사용하여 병목현상이 있다. 기존 그누보드 코드를 그냥 FastAPI 기반으로 옮기기만 하다 보니 생긴 문제점이지만 개선은 요원하다.

결국 2024년 7월 10일 지원 축소가 발표되었다. # 그누보드 6 메뉴도 숨겨졌으며 개발 역시 충분한 수요가 생기면 확대할 예정이라고 한다.

4. 역사

제로보드가 웹 게시판을 꽉 잡고 있을 때 나온 프로그램이라 초창기에는 그다지 인기가 없었다. 하지만 제로보드의 개발자 고영수가 네이버로 가면서 제로보드 4의 개발 및 사후지원을 중단하고 MVC 아키텍쳐로 개편한 XpressEngine(일명 XE)이라는 CMS를 공개함에 따라 상황이 바뀌었다. 기존 제로보드 4는 가뜩이나 해킹 공격에 취약한데 사후 지원마저 중단되어서 더 이상 사이트 플랫폼으로 쓰기 힘들어졌다. 한편 XpressEngine은 단순한 게시판 프로그램이었던 제로보드와는 달리 사이트를 통째로 구축하는 웹 빌더 프로그램이어서 패러다임 자체가 달랐다. 당연히 기존 제로보드의 각종 스킨과 플러그인과는 호환이 되지 않은 데다 기본 구조 MVC 패턴이라 기존과 달랐기 때문에 이미 제로보드로 사이트를 구축해둔 많은 홈페이지들은 옮겨갈 엄두를 낼 수가 없었다. 그래서 제로보드와 구조가 아주 유사한 그누보드가 대안으로서 각광을 받은 것이다. 스킨이나 플러그인 호환은 되지 않았지만 DB 구조도 엇비슷하고 변환 프로그램도 많이 나와있어서 이전도 쉬웠던 것도 인기의 한 원인이다.

4.1. 그누보드 1

4.2. 그누보드 3

4.3. 그누보드 4

4.4. 그누보드 5

2013년 3월부터는 웹 접근성 향상 버전을 새로 만들고 있다. 여담이지만 개발자의 작명 센스가 독특하다. 해당 프로그램의 애칭은 지포스(Gnuboard4s). 데모 사이트의 이름은 "써라! 글을"이라는 의미의 썩을써글. 그러다가 2013년 9월을 기점으로 '그누보드 5'로 이름이 바뀌었다. 그리고 2014년 6월 10일, 1년 넘게 달고 있던 베타 딱지를 떼고 그누보드 5의 정식 버전이 공개되었다. 그누보드 5는 구조를 새로 만들었기 때문에 4의 스킨이나 플러그인과는 호환이 되지 않는다. DB도 일부 달라졌고, 이 때문에 변환 프로그램을 거쳐야 그누보드 4의 DB를 5로 옮겨올 수 있다.[17] 그러나 XE처럼 개념이 완전히 달라진 것은 아니고, 1년 넘게 베타 테스팅을 해서 제작에 참고할 만한 스킨도 있어서 큰 혼란은 적었다.

그누보드 4는 웹 표준을 제대로 지원하지 않았다. SIR 측에서도 문제를 인지했는지 DTD 버전이라고 해서 웹표준 지원 버전을 따로 만들다가, 그누보드 4s로 이름을 전환했고 다시 그누보드 5로 전환해서 완성했다. 그누보드 5는 웹표준을 잘 지원한다. 그누보드 4의 스킨이나 플러그인과는 호환이 되지 않게 되었다. 시간이 지나면서 그누보드 5가 완전히 자리를 잡은 2018년 현재는 전혀 신경쓸 일은 아니게 되었다.

5.1로 버전이 올라가면서 테마 기능이 들어갔다. 기존의 스킨 디렉토리에서 각각으로 관리되던 스킨과 헤더, 푸터 등 사이트 디자인을 이루던 거의 모든 것을 테마로 통합해서 뺀 것이다. 추가적으로 lib 파일도 연결시킬 수 있기 때문에 이전보다 그누보드 소스를 직접 수정해야 되는 일이 많이 줄어들었다. 큰 변경사항 같지만 스킨 함수 등 API나 변수들은 동일하기 때문에 큰 변경 없이 마이그레이션이 가능하다. 또한 중간에 PHP 7 대응패치가 되었다.

2016년 7월 25일 5.2로 중간 버전이 올라갔는데, 변경점은 그냥 보안 패치다. 그누보드와 연동되는 영카트 쪽에서 네이버페이를 지원하는 메이저 업데이트가 있었기 때문에 버전 정보를 서로 맞추느라 이렇게 된 것이다.

2017년 11월 21일 5.3 베타 버전이 나왔고, 2018년 4월 1일 거짓말같이 5.3 정식 버전이 나왔다. 소셜로그인을 기본으로 지원하고 관리자 페이지와 기본 스킨의 디자인이 개편되었다.

2019년 12월 2일 5.4 정식 버전이 나왔다. 이전에 나왔다가 개발이 중지된 그누보드M에서 먼저 선보인 후크(Hook) 기능이 들어갔다. 이 기능으로 워드프레스와 비슷한 방식으로 플러그인을 제작할 수 있게 되어 기능 추가시 그누보드의 코어부분 수정을 최소화할 수 있게 되었다.

2022년 2월 15일 5.5 정식 버전이 나왔다. 본인인증 방식에 KG이니시스 통합인증을 추가하여 네이버나 카카오 등지에서 발행하는 여러 인증서를 지원하게 되었다.

2022년 6월 5.5 마이너 버전에서 PHP 8.1 지원 업데이트.
2022년 6월 5.5.7.5 마이너 버전에서 세션노출 취약점이 해결되었다. 10년 전부터 있던 문제인데 이제서야 해결된 것. 세션폴더가 PHP 기본설정폴더로 옮겨졌고 호스팅인 경우 호스팅사에서 관리해서 더욱 안전해졌다. 라이믹스, XE의 경우 처음부터 세션은 PHP 기본 설정폴더에 있었기 때문에 아무 문제가 없다.

4.5. 그누보드 6

4.5.1. 특징


처음부터 Python으로 새로 짰기에 기존 그누보드와 구조가 달라졌다. ORM 을 사용해서 그동안 지적받던 DB의 보안문제가 근본적으로 해결되었다.[21] Mysql, Maria 외에 Postgresql, sqlite DB를 사용할 수 있게 되었다. 기존의 theme/skin 으로 나뉘어 있던 구조는 테마 템플릿 하나로 바뀌었고, 쌩으로 PHP 구문을 끌어 쓰던 기존의 테마/스킨 구조와 달리 파이썬의 jinja2 템플릿 엔진을 사용한다.[22] 즉, 기존의 그누보드5 이하 와는 스킨이 호환이 되지 않는다. 반면, 같은 것도 있다. DB 구조는 그누보드 5와 동일하여 5버전의 스키마에 맞게 동작을 하게 되어있다. 사용자는 문서에 따라 몇몇 테이블에 기본키 등을 추가하면 DB 데이터는 호환된다. 그러나 Mysql, Maria 에서 DB 엔진이 MyISAM인 경우에는 InnoDB로 바꿔야 한다.

그밖에 그누보드 5에서 지적 받던 api 붙일때 불가능했던 문제들이 API 우선 프레임워크를 사용함에 따라 더 이상 마개조가 필요 없어졌다. 템플릿이냐 api 제작을 할 것이냐 선택권이 생긴 것이다.

5. 기능

WYSIWYG도 기본으로 지원하는데, 상용 에디터인 cheditor를 무료로 배포하고 있다. 라이센스는 에디터에 한하여 재배포하지 않는다는 조건. 개인적으로 구입하면 33만 원인데, 제작자와 따로 재배포 라이선스 계약(220만 원)을 맺어서 그누보드에 한해서만 배포를 하는 듯하다. 그누보드 5는 처음에는 cheditor가 빠지고 ckeditor라는 오픈소스 에디터가 기본으로 들어갔으나, 5.0.6에서 네이버에서 개발한 스마트에디터 2도 포함됐고, 이것이 5.0.8에서 기본으로 바뀐다. 그러다 5.0.24에서 ckeditor가 제외되고 별도 배포로 바뀌었으나 5.2.6에서는 cheditor가 다시 포함되었다.

나린위키라는 그누보드의 플러그인도 있는데, 이름에서 알 수 있듯이 위키위키 플러그인이다.

6. 파생된 프로그램

6.1. 영카트

그누보드 기반의 온라인 쇼핑몰 플러그인으로 다른 플러그인이나 빌더와는 다르게 그누보드 제작사 SIR이 직접 제작한다. 또한 다른 플러그인들과는 다르게 영카트 4까지는 유료로 판매했다. 유료로 판매되던 그누보드 4 기반의 영카트 4와 달리, 그누보드 5 기반의 영카트 5부터는 무료 배포가 결정되었다. XpressEngine의 쇼핑몰 플러그인들이나 카페24 쇼핑몰 창업 서비스처럼 판매 수익을 포기하는 대신 결제 수수료로 수익 구조를 전환했다. 그누보드를 자유 소프트웨어로 풀면서도 SIR이 영리사업체로 버티는 이유는 바로 이 영카트의 판매 수익과 결제 수수료가 수입원이기 때문이다.

2021년 6월 17일에 나온 5.4.6 버전부터 그누보드 5에 영카트가 항상 통합되어 배포된다. 세팅에서 영카트 관련 옵션을 끄면 그누보드 5 단독으로만 작동하는 구조다.

6.2. 그누커머스

워드프레스 용 그누보드 게시판+쇼핑몰 플러그인이다. 원래 그누프레스라는 이름으로 게시판 플러그인만 개발하고 있었지만, 쇼핑몰도 얹은 형태로 변경되었다. 영카트의 워드프레스 버전이라 할 수 있다.

그누커머스와 영카트 5는 호환이 안 된다. 워드프레스는 그누보드와 구조가 다르기 때문이다.

2020년 12월 31일자에 그누커머스를 포함한 그누프레스, 그누페이의 공식 지원을 중단한다고 공지했다.[23]

6.3. 라온보드

7. 관련 문서


[~v5] 5.x 버전 이하[v6~] 6.x 버전 이상[~v5] [v6~] [5] 거기에 PHP 5.2 버전 등 5 버전을 지원한다. 다양한 PHP 버전을 지원하다 보니 버전 별로 다른 코드들이 많다.[6] 훅스가 지원하지 않으면 코어를 수정하는 수밖에...[7] 자세히 설명하자면 회원아이디가 DB에서 키 값으로 잡혀있어서 삭제시 탈퇴한 회원이 탈퇴 전 썼던 게시글, 댓글이 연관되어 있어서 삭제하면 안 된다고 한다[8] MariaDB 10.1 이하 및 MySQL 5.1 ~ 5.6 버전도 사용은 가능하지만 End of Life가 지난 버전을 사용하는 것은 바람직하지 않다. 특히 MySQL 5.5.2 이하는 3바이트 문자(utf8mb3) 까지만 지원하기 때문에 4바이트(utf8mb4) 이모지는 사용할 수 없다.[9] '"를 이스케이프하는 게 대부분 아스키 문자열을 벗어나게 해서 공격하는 것들이라 문자열 범위를 늘리면 우회가 더 어려워지기 때문[10] common이나 mysql을 설치하면 pdo 모듈이 함께 설치되는데, 만약 설치되지 않으면 pdo 모듈을 추가로 설치해줘야 한다.[11] 과거에는 mcrypt를 사용하기도 했으나 PHP 7.2부터는 openssl을 사용한다. PHP 7.2에서 mcrypt 모듈이 제외되었기 때문이다. openssl은 PHP 자체에 내장되어 있기 때문에 별도의 extension은 설치할 필요가 없다.[12] exif 모듈은 이미지 자동회전 기능에 필요하다.[13] fileinfo 모듈은 첨부파일 보안검사를 할 경우에 필요하다.[14] 그누보드6 의 orm 에서 트렌젝션이 기본동작이다.[15] 파이썬은 DB 커넥션 풀이 되기 때문이다.[16] 보통은 웹뷰를 통해 웹사이트의 모바일 페이지를 보여주는 것으로 해결한다.[17] g4_import.php라는 이름으로 DB 변환 프로그램이 내장되어 있다.[18] sql 알케미[19] 그누보드 6의 특징이라기보다 fastapi의 기능이다.[20] 몇몇 테이블에 기본 키만 추가하면 된다.[21] ORM 에서 prepared statement 를 사용하므로[22] 파이썬 jinja 템플릿은 보안을 위해 함수를 사용하기 전 등록을 해야 사용할 수 있다.[23] 지원중단 공지