콘텐츠 관리 시스템(CMS)을 개발할 때, 제가 가장 먼저 생각했던 것은 얼마나 많은 기능을 구현할 수 있느냐가 아니었습니다.
오히려 CMS는 본래 어떤 모습이어야 하는가? 라는 질문이었습니다.
기존의 CMS에는 뛰어난 기능과 검증된 메커니즘이 많이 있습니다. 한편으로는 복잡한 의존성, 외부 서비스에 대한 의존, 비대해진 코어(core), 그리고 나중에 덧붙인 AI 연동 등 재검토할 여지가 있다고 느꼈습니다.
그래서 개발을 시작하게 된 것이 오픈 소스 CMS Birkly입니다.
Birkly는 단순히 가벼운 CMS를 목표로 하는 것은 아닙니다.
제가 실현하고 싶었던 것은 개발자와 사용자 양쪽 모두에게 공정하고, 유연하며, 자율적인 시스템이었습니다.
본문에서는 Birkly를 개발할 때 중요하게 생각했던 설계 사상과 그 아키텍처에 대해 소개하겠습니다.
소프트웨어를 개발하다 보면 어느새 많은 외부 의존성을 안게 되는 경우가 있습니다.
라이브러리, 프레임워크, 패키지, 외부 서비스 등 각각이 편리한 반면, 유지보수, 호환성, 보안, 업데이트 등의 문제도 발생합니다.
자신의 소프트웨어를 유지하기 위해, 자신이 통제할 수 없는 의존성까지 계속 유지해야 하는 상황 말입니다.
저는 이러한 상황을 가능한 한 피하고 싶다고 생각했습니다.
그래서 Birkly에서는 견고하고 검증된 기술을 기반으로 하면서도, 외부 의존성을 최소화하는 것을 중요하게 여깁니다.
이것은 최신 기술만을 지향하겠다는 의미가 아닙니다.
오히려 검증된 기술과 현대적인 아키텍처 및 설계 사상을 결합하고 싶다는 생각입니다.
기술 자체의 신규성보다는, 장기적으로 유지할 수 있고, 스스로 이해하며 통제할 수 있는 것을 중요하게 여깁니다.
현재 많은 CMS나 웹 애플리케이션에 AI 연동이 추가되고 있습니다.
하지만 AI를 단순히 외부 도구나 특별한 API 키로만 다루는 것으로 정말 충분할까요?
저는 AI를 인간 사용자와 동일하게, 시스템의 일원으로 다루고 싶다고 생각했습니다.
그래서 Birkly에서는 AI와의 연결도 사용자로 취급합니다.
각 AI 연결에는 고유한 사용자 권한과 역할을 설정할 수 있습니다.
즉, AI에게 특별한 백도어를 마련하는 것이 아니라, 일반 사용자와 동일한 권한 관리 메커니즘에 통합한다는 의미입니다.
이 설계에는 중요한 의미가 담겨 있습니다.
- AI별로 접근 권한을 관리할 수 있다.
- 필요한 작업만 허용할 수 있다.
- 인간과 AI 모두에게 일관된 권한 관리가 가능하다.
- AI 연동을 시스템 전체 아키텍처에 통합할 수 있다.
AI는 앞으로 웹사이트나 콘텐츠 관리의 중요한 이용자가 되어갈 것이라고 생각합니다.
그렇기 때문에 AI를 나중에 추가하는 것이 아니라, 처음부터 설계의 중심에 포함시켰습니다.
Birkly에서 AI는 특별한 존재가 아니라, 고유한 권한을 가진 한 명의 사용자입니다.
또 다른 중요한 설계 원칙은 최소한의 코어와 확장성의 양립입니다.
CMS는 시간이 지나면서 기능이 늘어납니다.
사용자 관리, EC(전자상거래), 이벤트 관리, 자동화, 검색, 외부 서비스 연동 등 다양한 기능이 필요합니다.
하지만 모든 기능을 처음부터 코어에 포함할 필요는 없습니다.
Birkly에서는 기본 부분을 최대한 단순하게 유지하고, 필요한 기능은 플러그인으로 추가할 수 있도록 했습니다.
이러한 생각을 실제 형태로 구현한 것이 관련 프로젝트 Birkly and Other Things Studio입니다.
Website: https://birklyandotherthings.com/
현재 다음과 같은 플러그인을 제공하고 있습니다.
Commerce: 커머스 기능 -
User: 사용자 관리 기능 -
Automation: 자동화 기능 -
Events: 이벤트 관리 기능
이를 통해 CMS의 기본 부분을 불필요하게 크게 만들지 않으면서, 프로젝트별로 필요한 기능을 조합할 수 있습니다.
단순함과 풍부한 기능성은 반드시 모순되지 않습니다.
중요한 것은 어떤 기능을 코어에 배치하고, 어떤 기능을 독립시킬 것인가입니다.
Birkly의 또 다른 특징은 데이터베이스를 필수로 하지 않는다는 것입니다.
기본적으로 파일 기반 구성을 채택하여, 데이터베이스 서버를 준비하지 않아도 이용할 수 있습니다.
한편으로는 필요에 따라 데이터베이스를 이용할 수도 있습니다.
이는 어느 한쪽 방식만을 모든 프로젝트에 강제하고 싶지 않았기 때문입니다.
프로젝트의 규모나 용도에 따라 최적의 구성은 다릅니다.
소규모 웹사이트에서는 단순한 파일 기반 구성이 적합할 수 있습니다.
반면, 더 복잡한 요구사항을 가진 프로젝트에서는 데이터베이스가 필요할 수도 있습니다.
중요한 것은 처음부터 특정 구성을 강제하지 않는 것입니다.
선택지를 남겨두고 프로젝트에 맞는 구성을 선택할 수 있다는 것.
이것 역시 Birkly가 중요하게 생각하는 자유 중 하나입니다.
Birkly는 CMS와 실제 웹사이트의 관계에서도 유연성을 중시합니다.
프로젝트를 CMS 내부에 호스팅할 수도 있고, CMS와 완전히 분리하여 운영할 수도 있습니다.
즉, CMS와 웹사이트를 반드시 하나의 통합된 시스템으로 다룰 필요가 없습니다.
프로젝트의 요구사항에 따라 CMS와 웹사이트의 배치나 운영 방식을 선택할 수 있습니다.
이러한 자유도는 서로 다른 환경이나 아키텍처에서 웹사이트를 구축하고 싶을 때도 도움이 됩니다.
CMS의 존재가 웹사이트의 구조나 호스팅 방법을 제한해서는 안 된다고 생각합니다.
이러한 설계 사상을 종합하면, Birkly가 지향하는 CMS는 다음과 같습니다.
- Independent: 스스로 이해하고 통제할 수 있는 기술 기반 -
- Modern: 검증된 기술과 현대적인 아키텍처의 조합 -
- AI-native: AI를 처음부터 시스템의 사용자로서 설계 -
- Minimal: 필요 최소한의 코어 -
- Extensible: 플러그인을 통한 유연한 확장 -
- Flexible: 데이터베이스나 호스팅 구성을 선택할 수 있는 자유
저에게 좋은 CMS란 단순히 기능이 많은 CMS가 아닙니다.
개발자가 이해하고, 운영자가 통제하며, 사용자가 필요한 기능을 자유롭게 선택할 수 있는 시스템입니다.
그리고 AI 역시 그 시스템의 일부로서 자연스럽게 참여할 수 있어야 한다고 생각합니다.
Birkly는 이러한 설계 사상을 바탕으로 개발되고 있는 오픈소스 CMS입니다.
주요 특징:
- PHP 기반
- 데이터베이스가 필요 없는 파일 기반 구성 (표준)
- 옵션으로 데이터베이스 이용 가능
- 모듈형 아키텍처
- 플러그인 시스템
- API First 설계
- AI / MCP 연동
- AI 연결별 사용자, 역할, 권한 관리
- 빌드 단계 불필요
- AGPL-3.0 라이선스
GitHub: https://github.com/Raaakete/Birkly
저는 Birkly의 플러그인이나 관련 프로젝트를 개발하고 있습니다.
아직 발전 중인 프로젝트이지만, 이러한 설계 사상이나 아키텍처에 흥미를 느끼신 분들이 있다면 좋겠습니다.
소프트웨어를 개발할 때, 우리는 얼마나 많은 의존성을 받아들여야 할까요?
AI는 단순히 외부 서비스여야만 하는 걸까요?
모든 기능을 코어에 포함해야 할까요?
저는 더 단순하고, 더 유연하며, 더 자립적인 소프트웨어를 만들 수 있다고 생각합니다.
Birkly는 그 생각을 구체화하기 위한 하나의 시도입니다.
같은 문제의식을 가진 개발자분들과 설계 사상이나 아키텍처에 대해 논의할 수 있다면 좋겠습니다.
의견이나 피드백을 꼭 들려주시면 감사하겠습니다.
마지막으로 개인적인 이야기를 조금만 하겠습니다.
저는 현재 일본인 아내와 함께 덴마크에서 살고 있습니다.
일본 문화나 일본 기술 커뮤니티에도 이전부터 흥미가 있었고, 더 많은 일본 개발자분들과 교류하고 싶습니다.
다만, 제 일본어는 아직 충분하지 않아 지금도 공부 중입니다.
이 글 역시 번역 도구의 도움을 받아 작성했습니다. 일본어로 소통할 때도 아직 번역 도구에 의존하는 경우가 있습니다.
혹시 부자연스러운 표현이나 오류가 있다면 너그러이 양해 부탁드립니다. 조금씩 일본어를 향상시키고 싶습니다.
일본 개발자 여러분과 기술이나 설계 사상에 대해 교류할 수 있기를 기대합니다!