CMS 컨셉 잡기

배경

나는야 아는 사람만 아는 KUUG 운영자. 그동안 엄브라코 Umbraco 라는 CMS를 한 3년 써오다가 슬슬 직접 CMS를 만들어보자! 하고 호기롭게 작업을 시작했다. 아무래도 엄브라코는 2005년에 처음 만들어진 CMS이다보니 현재 버전 7임에도 불구하고 코어 모듈에 아직도 레거시 코드가 많이 남아있다. 게다가 그 시작은 웹폼인데, 양덕들의 특성상 기존의 레거시를 계속 안고 가는 형국이다보니 웹폼인데 변태적으로 MVC를 직접 구현하고 Web API도 직접 만들어서 구현하고 그렇다. 아무래도 기존 버전과 하위 호환성을 유지하려는 정책 때문인 듯. 참고로 4.7.2에서 버전 5로 업그레이드하면서 하위 호환성을 포기했다가 여러가지 이유로 시망하고 다시 4.8로 복귀. 이후 마이너 업그레이드를 계속하다가 버전 6으로 점프한 후 현재 7이 됐다. 코드네임 Belle 라는 프로젝트를 통해 버전 7에서는 화면 레이아웃을 획기적으로 바꿨다지만 여전히 코어모듈은 크게 변한 것이 없는 상황.

개인적으로 엄브라코 공인 개발자이기도 해서 엄브라코에 여전히 애정이 있기는 하다만 그래도 저런 변태같은 코드베이스를 견딜 수가 없어서, 아예 순수 MVC로 만들어보자! 하고 패기있게 작업을 시작했다. 관련 소스코드 리포지토리는 깃헙에 있다.

뭐든 일단 저지르고 수습하는 법. 일단 만들어 두고 작업을 시작했다. @haruair님 한테도 살짝 부탁을 해서 프론트엔드 쪽을 도와달라고 하긴 했는데…

컨셉

다른 CMS와 비교해서 엄브라코가 갖는 가장 큰 장점이라 하면 자유도가 엄청나게 높은 CMS라는 것이다. 화면에 뿌려줄 데이터 형식들을 사이트 개발시 직접 결정할 수 있다. 예를 들어 PHP 진영의 워드프레스라든가 드루팔, 줌라 같은 CMS는 기본적으로 페이지에 표시되는 데이터의 종류가 이미 결정되어 있어서 딱히 개발자가 할 일이라 하면 플러그인이나 테마등을 활용해서 기능을 확장하는 정도가 될 것이다. 반면에 엄브라코는 페이지의 형식마저도 개발자가 지정해야 하는지라 처음 설치를 하게 되면 일단 설치는 했어. 그래서 어쩌라고? 수준의 멘붕이 온다. 이것이 엄브라코가 갖는 가장 큰 장점이자 단점이 될 수가 있는데, 지금 개발하고자 하는 Aliencube라고 부를 CMS는 이 엄브라코의 장점에 주목해서 개발자에게 최대한의 자유도를 부여하려는 컨셉으로 시작한다.

Page Schema

위 스샷을 보면 하나의 페이지에는 페이지를 구성하는 여러개의 구성요소들이 각각 저마다의 데이터를 갖고 나열되어 있다. 저 화면의 레이아웃은 페이지별 템플릿이 담당할 것이고, 일단은 데이터 구성요소에 집중을 하기로 한다. 따라서, 아래와 같은 룰을 기본으로 하기로 했다.

  • 페이지는 적어도 하나 이상의 엘리먼트를 갖는다.
  • 각각의 페이지는 어떤 엘리먼트를 가질 수 있는지에 대한 정의를 메타데이타로서 가져야 한다.
  • 이 메타데이타는 여러 페이지에서 재사용할 수 있어야 한다.
  • 페이지의 실제 데이터와 메타데이타 정의사항은 서로 분리되어야 한다.

쟈~ 시작해 볼까?