카테고리가 애매해보여서 이곳에 남깁니다. (난 개발자가 아닌데 자꾸 개발이야기에만 글을... ㅠㅠ)

 

지금은 개발이나 협업에 대한 불(의지)이 꺼져버려서 안하고 있지만 나름 XE를 빠르게 하기 위한 고심을 많이 했었지요. 이걸 계속 밀고 나갔으면 지금 어떤 모습이 되어있었을까요?  @misol  :)

 

XE는 여러 고절적인 문제 중 속도가 다른 CMS, 보드들과 비교되가면서 언제부터인가 기능 확장개선을 줄이고 성능개선을 고심하기 시작했죠. 그런데 제가 안타까웠던 점은 궁극적으로 자기들이 만든 소스를 개선해서 극적인 성능을 꾀하려는 노선이 아닌 외부 요소를 이용해서 (memcache 등) 하드웨어적으로 성능을 극복하려고 했던 점 입니다. 나는 분명히 여러곳에서 XE는 지금의 호환성을 버리지 않고 충분히 빨라질 수 있다고 생각하였고 깃허브에 이슈도 많이 남겼지만 번번히 거절되었지요. 지금에서야 그들이 보류라고 해놓은 것들을 보면 하기싫다는 메시지 였는지도 모릅니다.

 

nuricms의 향수를 느끼면서 예전에 꿈꾸었던 설계방안을 이곳에다가 뿌립니다. 그냥 이런생각을 갖고 있었구나하고 읽어주시면 되겠습니다. ^^

※Google 스프레드시트로 작성되었던거라 보기가 불편할 수 있으나 이해바랍니다.

 

코어 분리 개선안


 

개선안
들어가기전에
코어분리에 대해 제 생각을 정리해보겠습니다. 내용중에 추가할 점이나 다른점은 의견주시기 바랍니다.
             
코어분리
XE에서 코어를 분리한다란?
현재 XE 구조는 개선을 거듭할수록 코어에 종속적인 모듈들로 인해 성능저하 및 호환성 문제 등이 발생되어왔습니다. 이 고질적인 문제점을 극복하고자 코어를 각 기능에서 분리합니다. 이로인해 성능의 향상, 서드파티들의 추가모듈과의 호환오류 최소화, 프레임웍으로써 개발툴로 사용 등 다양한 이점이 생기게 됩니다.
             
아래 그림1과 같이 코어에 종속적이었던 모듈들을 코어안에서의 코드제거와 각 모듈로써 동작하도록 모듈을 개선합니다.
             
그림1)            
image1.png

 

단, 아래 그림2와 같은 유형의 모듈은 여러 모듈과 연결되어있는 복잡한 구조를 띄고있기 때문에 차후 코어를 개선, 보안해 나가면서 최종적으로 분리할 필요성이 있습니다.
             
그림2)            
image2.png

 

대상선정            
             
아래는 의미적+기능적으로 코어에서 분리해야할 대상을 선정하기 위해 나열한 각 모듈과 기능들입니다. 분리가 필요한 대상은 O등 기호로 표기합니다.
대상 분리필요 유지보수 이유
modules
addon      
admin      
adminlogging   admin 모듈에 추가 가능
autoinstall   XE 공식용이라 지원필요없음
comment   document와 함께 분리
communication   member와 함께 분리
counter   구글 통계나 다른 외부 툴로 대체 가능(삭제해도 될듯?)
document   최종적으로 분리해야할 대상 상당히 복잡한 놈
editor   document와 함께 분리
file   다중 자원관리 등 추후 코어 또는 모듈로써 개선이 필요
importer   분리
install      
integration_search   분리
layout      
member   분리
menu   분리
message   분리
module     모듈 모듈을 장기적으론 다른 형식으로 가져가는게 어떤가요?
page   widgetstyles와 함께 분리,개선?
point   분리
poll   에디터 모듈의 종속 모듈, 분리? 개선?
rss   분리
session x 회원 모듈과 함께 분리(맘에 안들면 개선?)
spamfilter   document와 함께 분리
tag   document와 함께 분리
trackback   document와 함께 분리
trash   document와 함께 분리
widget      
classes
cache   개선필요?
context      
db     향후에는 mysql, mariadb 등으로 단일화?
display      
editor   설정 정보를 $this에 올리기 위해 사용한건가요? 되도록 모듈안에 넣고 이곳에서는 삭제하는게 좋을듯
extravar   document와 함께 분리 (모듈로 만듬)
file   다중 자원관리 등 추후 코어 또는 모듈로써 개선이 필요
frontendfile      
handler      
httprequest      
mail   모듈로 만듬, libs에 있는 qmail을 모듈로 이동
mobile      
module     모듈 불러올 때 언어파일 같이 필요 없는 부분을 불러올 때가 있습니다. 필요 없으면 불러오지 않을 수도 있으면 좋겠는데 호환성이 난리 나려나요..
object      
page      
security   보안사항은 다양한 포멧을 서드파티가 추가할 수 있도록 모듈로 내림, 혹은 모듈과 연동시켜 다양하게 보안로직을 만듬
template   다양하게...(smarty, template_ 등)
validator      
widget      
xml      
       
addons
adminlogging   admin 모듈에 추가 가능
autolink   document와 함께 분리
blogapi   분리
captcha   document와 함께 분리
counter   제거?
member_communication   member와 함께 분리
member_extra_info   member와 함께 분리
mobile x 분리?(WAP쓰나요?)
openid_delegation_id x 제거
point_level_icon   분리
resize_image   document와 함께 분리
       
widgets
content      
counter_status x 제거
language_select      
login_info   member와 함께 분리
mcontent      
       
widgetstyles
simple   widgetstyles가 페이지 모듈안에서만 활용되는듯? page모듈의 향후에 따라 분리
관리자페이지 설정(#1참조)
thumbnail   모듈로 만듬, 기능 확장&개선
하단(footer) 스크립트 x 레이아웃, 스킨 들에게 양도하고 해당 기능은 제거
기본 URL     멀티 도메인이 수행할 수 있도록 다중 등록형태로 개선필요
SSL 사용   잘 모르겠음(그대로 둘지 모듈로 뺄지..)
서버 포트 지정   잘 모르겠음(그대로 둘지 모듈로 뺄지..)
짧은 주소 사용   잘 모르겠음(그대로 둘지 모듈로 뺄지..)
SSO 사용   모듈로 빼고 index에 올려둔 사항을 트리거 등 다른 내용으로 대체..
인증 세션 DB 사용   member 모듈안에서 호출
Qmail 호환   mail 모듈안에서 호출
       
FTP 설정   쉬운설치가 없어지면 이 내용이 필요없어짐, 제거?
파일 업로드   frontendfile? 모듈이었나요? 모듈로 이동...
파일박스   frontendfile? 모듈이었나요? 모듈로 이동...
       
그외
사이트 제작/편집   제거
cafeXE(homepage)   site,vid의 가상도메인 개념이 카페XE 떄문인지라... 요것도 코어에서 분리할 대상으로 다루는게 좋을 것 같습니다.
             
             
#1 관리자페이지 기본 설정
관리자페이지 상에서도 기본적으로 들어가있는 항목을 따로 모듈화시키는 작업이 필요할 것 같아서 제안합니다. 아래 그림3에 각 설정이 나타나있는데요. 저는 이 기능들을 따로 모듈화시키고 이곳 설정 항목에는 트리거를 달아놔서 호출하는 방식으로 분리를 했으면 합니다. 예를 들면 게시판의 추가설정과 같은 형태인거죠.
             
그림3)            
image3.png

 

 

 


 

TAG •
  • profile
    동감합니다.
    더불어서 코어에 CSS 랑 Jquery 를 싹 제거하고 어드민 화면 페이지에 별도로 css 를 로드하도록 한다면 프론트엔드 개발이 더 잘 되었을 것 같기도 합니다.
  • profile profile
    각 모듈이나 레이아웃에서 CSS를 100% 조절할 수 있다면 이상적이겠지요. 지금은 코어에서 지정한 스타일을 덮어쓰려면 !important로 도배해야 하니까요... 코어에서 제공하더라도 대다수의 개발자들이 편리하게 참조할 수 있는 기본적인 클래스만 제공하면 됩니다. 예를 들어 .clearfix 같은 거요.

    jQuery는 그래도 한 가지 버전을 기본 제공하는 게 낫다고 생각합니다. 서드파티 자료를 조합해서 사용하는 XE의 특성상, 각 모듈과 레이아웃에서 자기가 쓰고 싶은 버전을 맘대로 끌어다 쓰면 충돌이 발생할 가능성이 높거든요. 한 모듈에서 로딩한 플러그인을 다른 애드온이 지워버린다든지... jQuery가 아닌 다른 프레임워크로 프론트엔드 개발을 하고 싶다면 자기가 원하는 것을 추가로 끌어다 쓰면 그만이고요. 다른 자료와의 충돌을 방지하기 위해 어느 정도의 비효율성은 감수해야 할 수도 있습니다.
  • profile
    와... 원대한 꿈!!

    저도 같은 생각이에요.. 코어란 최소한의 것만 남기고, 가벼워야하는 데.. 지금 코어는 풀패키지에요.. 너무 뚱뚱해요..
  • profile profile
    예전에 board 모듈을 별도 패키지로 분리하는 등의 시도를 하기도 했죠. 그런데 사용자들이 오히려 더 불편해했던 것 같습니다. 프레임워크로서의 코어와 그 밖의 모듈들을 논리적으로 분리하는 것은 필요하지만, 결국 대부분의 사이트들은 회원, 문서, 댓글, 게시판 모듈 등을 다 얹어서 쓸 테니까요.
  • profile profile
    그럼 버전 두개 배포하는 건 어떤가요? 하나는 풀패키지, 또 하나는 minimal로...
  • profile profile
    그게 바로 제가 밑에 별도의 댓글로 쓴, 프레임워크와 CMS를 구분하자는 제안입니다.
  • profile

    단지 코어와 함께 배포되는 것과, 실제로 코어와 연동되어 성능에 영향을 주는 것은 별개의 문제입니다.

    목록에 나열된 대부분의 애드온과 위젯들은 사용하도록 설정하지 않으면 성능에 전혀 영향을 미치지 않습니다. 당장이라도 코어에서 떼어내서 자료실에서 각각 배포하더라도 아무 문제가 없겠죠. 이건 그냥 편의상 코어와 함께 배포될 뿐, 사실상 코어가 아니라도 봐도 됩니다.

    문제는 module과 classes인데요... 코어와 모듈의 경계선이 너무 흐리다는 말씀에 동의합니다. 당장 extravar만 해도 코어와 모듈이 마구 섞여서 작동하고 있고, 제일 황당한 건 모듈 핸들러와 별도로 module이라는 모듈이 또 존재한다는 거죠 ㅡ.ㅡ;;

    코어에서 처리하고 있는 작업을 모듈로 분리해야 하는 경우가 있는가 하면, 모듈끼리 통폐합하거나, 모듈을 애드온으로 강등시키거나, 반대로 모듈의 기능을 코어로 흡수해야 하는 경우도 있을 수 있습니다. 중요한 건 각 구성요소의 역할분담이 분명해야 한다는 점입니다.

    사실 "코어"라는 명칭 자체가 혼동의 여지를 안고 있는 건 아닌가 하는 생각이 듭니다. "프레임워크"에 "모듈"을 얹어서 "CMS"를 만들어야 하는데, 다 뭉뚱그려서 코어라고 부르고 있으니까요. 많은 PHP 개발자들이 잘 알고 있는 코드이그나이터(CodeIgniter)라는 프레임워크는 같은 회사에서 만드는 익스프레션엔진(ExpressionEngine: 헐! XE랑 이름이 너무 비슷하다!)이라는 CMS의 핵심 부분만을 분리한 것입니다. 프레임워크와 모듈의 구분이 명확하니까 프레임워크 부분만 떼어내도 세계적인 명성을 누릴 수 있는 거겠죠.

  • profile profile
    진짜 공감합니다. 명확히 구분히 안갈때가 너무 많습니다.
  • profile
    우아 이 정도로 분석하려면 얼마나 공부해야되는건가요 ㅠ