쓸 만한 플랫 파일 CMS 찾기

2020 년 8 월 7 일 기준

아! 물론 윤익희도 꽤 쓸 만한 CMS이지만 솔직히 말해 생긴 것도 구리고 뭔가 좀 모던한 걸 해 보려면 내가 직접 다 해결해야 되니 이만저만 귀찮은 게 아니다. 그래서 마크다운을 지원하는 플랫 파일 CMS를 찾아 보기로 했다. 데이터베이스를 쓰게 되면 우선 백업하는데 일이 많아지고 Git을 이용해서 버전 컨트롤을 할 수 없게 된다. 아! 물론 윤익희Git 따위도 없이 혼자서 버전 컨트롤을 잘 하지만 말이다.

1   Grav

제일 먼저 발견한 플랫 파일 기반의 CMS가 Grav이다. 아주 활발하게 개발되고 있고 플러그인도 풍부하다. 테마도 다양해서 훌륭한 웹사이트를 꾸밀 수 있다. 처음에 설치해서 이것저것 해 볼 때는 좀 어려운 면이 있었다. 문서화가 잘 되어 있다고는 하지만 뭔가 부족한 느낌이 들었다. 코드를 늘어 놓으면서 이렇게 하면 된다고 하는데 그 코드를 도대체 어디에 넣어야 하는지 설명하지 않는 경우도 있었다. 물론 문서를 처음부터 끝까지 정독을 하면 어딘가에는 그 내용이 있겠지만 우린 귀찮아서 다 안 읽는다.

하여튼 우여곡절 끝에 대충 쓸 수 있게 되었고 플러그인도 하나 개발했다. 위키류의 소프트웨어만 20 년 가까이 쓰다가 위키가 아닌 소프트웨어를 쓰려니까 불편한 점이 있었기 때문이다. 마크다운을 지원하는 소프트웨어라면 모두 같은 문제가 있지 않을까 싶다. 페이지의 링크를 생성할 때 직접 입력을 해야 한다면 페이지의 링크과 제목을 따로 두 번 입력해야 하는 번거로움이 있다. 물론 이걸 플러그인으로 해결하면 호환성이 떨어지는 문제가 있다.

Grav의 기본적인 디렉토리 구조는 페이지 하나마다 하나의 디렉토리를 생성하고 그 안에 마크다운 파일을 생성한다. 부수적인 파일이 필요없는 페이지도 무조건 디렉토리를 하나씩 만들어야 한다. 시스템의 아이노드를 많이 소비하는 디자인이다. 이렇게 생성되는 파일의 이름은 페이지명을 따르는 것이 아니라 페이지의 종류에 의해서 결정된다. 즉, 디렉토리만 페이지명을 따른다.

더 불편한 문제는 Grav의 웹상에서 한글 페이지명을 입력하면 한글을 제거해 버리고 슬러그를 생성한다. 슬러그의 정의 자체가 소문자 알파벳, 숫자, 하이픈만 가지고 URL을 구성하는 것이니 어쩔 수 없지만 한글 사용자에게는 불편하다. 그나마 서버 터미널에서 직접 한글로 디렉토리를 생성하면 제대로 작동한다. 하지만 항상 서버의 터미널에 접근할 수 있는 것은 아니기 때문에 문제가 될 수 있다. 영어만 쓰는 사용자에게는 문제가 없겠다.

2   Pico

그 다음 설치해 본 CMS가 마크다운을 지원하는 Pico이다. Grav에 비해서 많이 가볍고 페이지마다 디렉토리를 생성하지 않는 점이 좋았다.

Pico에는 로그인 자체가 없다. Pico Edit이라는 플러그인을 설치해야 웹상에서 로그인이 가능하다. 이 플러그인도 Grav처럼 슬러그를 만드는데 역시 한글을 삭제해 버린다. 이 문제만 해결하면 괜찮은 프로그램 같았다. Pico Edit의 포크 버전을 만들어서 한글을 지원하게 수정했다.

3   Phile

Phile은 2013 년 Pico가 버전 0.8일 때 포크된 CMS이다. 그 당시 Pico 플러그인의 구조가 속도를 저하하는 문제가 있었고 개발 속도도 빠르게 하기 위해 포크를 했었다고 한다. 설치해 보니까 약간 옛날 PHP 프로그램 느낌이 아직도 남아 있다. 예를 들어 Pico의 설정이 YAML로 이미 넘어 간데 비해 Phile은 아직도 PHP를 그대로 쓰고 있다. 테마라고 나열된 링크들 중 개발자 본인들이 관리 중인 블로그 테마 딱 하나만 살아 있다. 그나마 플러그인들은 괜찮다. Pico를 포크한 벌써 7 년이 지났으니 Pico가 가만히 앉아 있지는 않았을 것 같다. 게다가 테마도 Phile보다 더 많은 걸 보면 개발 속도가 생각보다 빠르지는 않았던 것 같다. 아마도 원하는 목표에 이미 근접했기 때문에 개발 속도가 현저히 느려지지 않았을까 싶다. 마치 우리의 윤익희처럼 말이다!

버그를 하나 찾았다. 마크다운 파일 안에 메타 데이터를 정의하는 프런트 매터(front matter)만 있고 내용이 없으면 프런트 매터가 페이지 내용으로 그대로 다 보인다. 심각한 보안 문제가 될 수 있다. 재미있는 것은 파일 리스팅을 방지하기 위한 보안책으로 빈 index.html 파일을 만드는 세심함은 잊지 않았는데 이 버그는 발견하지 못 했나 보다.

4   Bludit

Bludit도 플랫 파일에 마크다운을 지원한다. 테스트해 본 CMS 중에서 유일하게 한글 페이지명을 제대로 URL로 변환해 줬다. Grav처럼 페이지마다 디렉토리 하나를 생성하고 그 안에 index.txt라는 마크다운 파일을 생성한다. 확장자가 ‘.md’가 아니다. 다 좋은데 딱 하나 단점이 있다. 모든 페이지의 목록을 pages.php라는 PHP 파일 하나에 따로 관리한다. 즉, 디렉토리의 구조만 바꿔서 웹사이트를 손쉽게 업데이트할 수 없다.

5   Typesetter

Typesetter는 플랫 파일 CMS이지만 기본적으로 WYSIWYG 에디터만 지원한다. EasyMark라는 플러그인을 설치하면 마크다운을 쓸 수 있긴 하다. 페이지마다 디렉토리가 생성되며, 제일 큰 문제는 디렉토리 구조가 페이지명을 알아 볼 수 없게 생성된다는 것이다.

6   October

URL에서 한글을 제거해 버리고 마크다운 대신 HTML로 저장한다. 페이지마다 디렉토리가 생성되지는 않는다. 특이하게 HTML과 PHP 코드를 페이지 안에 같이 삽입할 수 있다.

7   Monstra

슬러그를 입력하게 되어 있는데 역시 한글을 제거한다. 페이지마다 디렉토리가 생성되지는 않지만 페이지명 대신 1.page.txt 같이 파일을 명명하기 때문에 페이지 파일을 찾기가 쉽지 않다.

8   WonderCMS

WonderCMS는 HTML 기반의 WYSIWYG 에디터를 지원한다. 제일 황당했던 CMS인데 모든 페이지의 내용을 database.js라는 하나의 JS 파일에 저장한다.

9   Automad

URL에 한글을 지원하지 않는다. 페이지마다 디렉토리가 생성되고 마크다운 대신 HTML 코드를 JSON 포맷으로 저장한다. 입력 파일을 직접 생성하기가 번거롭다.

10   razorCMS

이건 Softaculous에서 설치하고 로그인 URL로 가니까 로그인을 할 수 없었다. Softaculous에서 2 년 이상 관리되지 않고 있는 CMS라는 경고를 볼 수 있다.

11   Flextype

이건 설치한 다음 REST API 토큰을 생성하라는데 귀찮아서 그만 뒀다. 이 때문인지 아무것도 보이지 않았다.

12   결론

11 개의 플랫 파일 기반 CMS를 테스트해 본 결과 GravPico 딱 두 개만 쓸 만하다는 결론을 내렸다. 그마저도 둘 다 터미널에서 직접 한글 페이지를 생성해야만 한다. 단, Pico는 자체적으로 웹상에서 페이지를 생성할 수 없기 때문에 버그라고 할 수는 없다. Grav 또한 슬러그만 지원하기 때문에 한글 URL은 웹상에서 생성할 수 없다. Admin 플러그인의 한글 문제한글 지원 Pico Edit 플러그인을 참고하면 이 문제들도 해결할 수 있다.

Grav의 사용자가 Pico보다 훨씬 많기 때문에 플러그인이나 테마가 훨씬 풍부하고 지원이 더 잘 될 것 같다. Pico는 그 구조가 훨씬 단순해서 이해하기가 쉽고 기능을 확장하기가 용이할 것 같다. 하지만 플러그인이 풍부하지 않아서 기능을 좀 많이 직접 확장해야 될 수도 있다. 윤익희의 삽질에 버금가는 삽질이 될 수 있으니 조심하자. 단적인 예로 코멘트를 서버에 직접 달 수 있는 플러그인도 없다.

마지막으로 PHP 5.6.40에 멈춰 있는 슬랙웨어 14.2에서도 Pico돌아간다. 단, PHP 7에서 설치한 Pico통째로 PHP 5로 복사하면 돌지 않는다. PHP 5에서 새로 설치한 다음 content 디렉토리만 복사하면 된다.

다음 표에서 GravPico를 간단하게 비교해 봤다.

기능GravPico
버전1.6.262.1
언어PHP 7.1.3+PHP 5.3.6+
플랫 파일YESYES
마크다운YESYES
페이지 디렉토리YESNO
웹상 편집YES플러그인
웹상 한글NONO
터미널 한글YESYES
설치 크기42 MB4.6 MB

참고문헌

이 칸을 비워 두세요.