질문/조언팁/리소스 공유

XE 구형이 얼마까지 구형인가가 문제인데, XE 1.4 기준으로 (XE 1.4 -> Rhymix 2.0) 설명드려보겠습니다. (이하, XE는 XE구형을 뜻합니다). 

 

업그레이드에는 크게 두가지 방법이 있습니다. 사이트를 새로 만들고, XE에서 3개의 데이터(회원, 게시판, 문서)를 XML로 export하고 라이믹스에서 import 하는 방법이 있고, 다른 하나는 XE에 라이믹스를 덮어쓰기 한 뒤, 관리화면에서 모듈 업그레이드 버튼을 누르고... 하는 방법이 있겠습니다.  이 글은 "덮어쓰기" 기준으로 합니다. XML로 이전하는 것과 비교해 뭐가 좋은지는 모르겠지만, 이런 것도 가능하다는 차원에서 설명드립니다. 

 

Step 1. XE와 DB를 안전한 곳에 2개 이상 백업해 놓습니다. 

 

Step 2. PHP 7.x를 설치해줍니다. XE는 5.x에서 동작하고 라이믹스는 7.x에서 동작합니다. (라이믹스 설치방법 참조)

 

Step 3. phpMyAdmin도 설치해줍니다. (설치 방법은 구글링). phpMyAdmin이 정상 동작하는지도 미리 확인합니다.

 

Step 4. 라이믹스 소스를 웹 서버에 복사합니다. (라이믹스 일반적 설치법 참조)

 

Step 5. XE에서 사용하던 layout, modules, widget, addon, skins를 옮겨옵니다. /files/attach와 /files/member_extra_info도 옮겨옵니다. /files/config 폴더는 옮겨오지 말고 삭제합니다.

 

Step 6. 디렉토리 퍼미션을 적절히 바꿔줍니다. (라이믹스 일반적 설치법 참조)

 

Step 7. 홈페이지에 접속하면 라이믹스 설정 창이 뜹니다. /files/config/ 가 없기 때문입니다. DB name과 DB password는 XE 것을 넣어주고, prefix에는 xe_ 를 입력해줍니다. '_' 까지 입력해줘야 합니다.  DB 타입은 "innoDB"를 선택합니다. 혹시 DB 이름이 이미 있다고 투덜대면, 기존 DB를 삭제하고 재시도 합니다(백업필수).

 

Step 8. Step 1에서 백업받은 DB를 통채로 다시 import 합니다. (방법은 각자 알아서). DB를 import한 후, 기존 DB가 MariaDB로 되어 있다면 이 기회에 innoDB로 변경해줍니다(변경 방법은 구글링. 힘들지 않습니다)

 

Step 9. 관리자 페이지로 가서 "모듈 업그레이드" 버튼을 가능한한 모두 눌러줍니다. 눌어도 다시 뜨는 놈이 있고, 안눌러 지는 놈도 있습니다. 당황하지 말고 다시 눌러봅니다.

 

Step 10. 만약 관리자 페이지가 안뜨거나 "모듈 업그레이드" 화면이 안나오거나 하면, phpMyAdmin 같은 것을 사용하여 DB 테이블에서 "xe_domains"에 있는 항목을 비워줍니다 (xe_domains 테이블을 삭제하란 뜻이 아니고, 그 안의 내용을 empty 하라는 뜻임). 다시 "모듈 업그레이드"를 눌러줍니다.

 

Step 11. 아래 내용을 수작업으로 DB와 비교해보고, 누락된 것이 있다면 수동으로 입력해줍니다 (몇번째에 추가하냐는 안지켜도 상관 없고 미관상 목적입니다)(스크립트를 쓰거나 phyMyAdmin 같은 것으로 할수 있습니다) (XE 버전에 따라 아래 내용이 이미 반영된 부분이 많을 것입니다)  (DB를 어떻게 수작업으로 수정하는지는 XE 1.5 업그레이드 매뉴얼에 아주 잘 설명되어 있습니다. https://xe1.xpressengine.com/user_guide)

 

module의 10번째에 is_skin_fix 추가 (mid 다음). (페이지 모듈 업그레이드 관련)

Name:is_skin_fix Type:char Size:1 Null:no Default:Y

 

module의 12번째에 is_mskin_fix 추가 (skin_fix 다음). (페이지 모듈 업그레이드 관련)

Name:is_mskin_fix Type:char Size:1 Null:no Default:Y

 

module_config의 2번째에 site_srl 추가. (알림센터 모듈 업그레이드 관련)

Name:site_srl Type:bigint Size:11 Null:no Default:None

 

module_fileboxcomment 를 varchar(250)에서 bigtext (또는 longtext) 로 변경

 

documents 의 마지막에 status 와 comment_status 추가.

Name:status Type:varchar(20) Default:”PUBLIC”

Name:comment_status Type:varchar(20) Default:”ALLOW”

 

documents 에 lock_comment 와 allow_comment 가 있다면 삭제 (삭제 안해도 괜찮음)

 

documentsis_secret 가 있다면 그대로 남겨둠 (하위 호환을 위해)

 

document_categoriesdescription 추가

Name:description Type:varchar(200)

 

commentsstatus 추가하고 index idx_status 에 링크

Name:status Type:bigint(1) Index name:idx_status Choice:index Column:status

 

menu_itemis_shortcut 추가

Name:is_shortcut Type:char(1) Default:’N’ Null:No

 

menu_itemlistorder 를 index idx_listorder 에 링크

Index name:idx_shortcut Choice:index Column:listorder

 

Step 12. 관리화면에서 "모듈 업그레이드" 버튼을 다시 모두 눌러줍니다. 이 단계에서는 모두 다 눌러져서 없어져야 정상입니다. 만약 그래도 남는 것이 있다면 schemas와 비교하면서 더 세부 노가다가 필요합니다. (참고: 이 단계가 끝나면 DB를 새로 백업받아두는 것이 좋습니다)

 

Step 13. 스킨은 대부분 호환이 되어야 정상이지만, 일부 바꿔줘야 할 경우가 있습니다. 예를들면, 스킨에서 getExtraValue를 getExtraValueHTML 로 바꿔줘야 한다든지, 게시판 리스트에 요약문이 출력이 안되는 것은 관리자/게시판설정/"요약"을 추가를 해준다든지... 로그인 스킨의 확장변수가 안보일수도 있습니다. 등등...  안되는 것 빼고 다 됩니다.

 

Step 14. 메뉴에 링크되지 않은 게시판/페이지 들이 있을수 있습니다. 이것들만 따로 긁어모아 링크해주는 기능이 없습니다. 이 것들을 메뉴에 참조하려면 바로가기 링크를 사용하면 됩니다.   

 

잘 알다시피, XE 1.6이하에서는 "메뉴삭제 != 모듈삭제" 이지만, XE 1.7이후~ 라이믹스에서는 "메뉴삭제 == 모듈삭제" 입니다. 이것 때문에 구형 XE에서 업그레이드 하면 문제가 생길수 있는데, 만약 XE 1.6 이하에서 하나의 모듈ID(게시판/페이지등)를 2개 이상의 메뉴에서 참조했다면(예를들면, 상단메뉴와 하단메뉴에서 동일한 게시판이나 페이지를 참조한 경우), 그 메뉴를 관리화면에서 삭제하면 안됩니다. 중복된 메뉴를 삭제한다고 하나를 삭제하면 거기에 링크된 모듈(예를들면 게시판까지)까지 통채로 삭제 됩니다. 

 

이 문제를 해결하려면, DB를 phpMyAdmin 등으로 열고, xe_menu를 선택하고, 그 안의 하단메뉴에 해당되는 항목을 삭제하고, 다시 관리화면으로 가서 하단메뉴를 (바로가기 링크만을 이용하여) 새로 만들면 됩니다.

 

상단메뉴 안에도 서로 중복된 것이 있으면(대부분 과거 편집 실수였을 가능성이 있음), 이때도 중복된 것을 관리화면에서 삭제하면 안되고, DB를 열고 xe_menu_item 테이블에서 중복된 것 중 하나만 남겨놓고 삭제하면 됩니다. 

 

Step 15. xe_documents 테이블에 is_secret이 있는데, 과거에 비밀글을 사용하고 있었던 경우(아니라면 해당사항 없음), is_secret를 status로 통합해 줄 필요가 있습니다. 아래 스크립트를 phyMyAdmin의 SQL창이나 terminal의 mysql 커맨드로 실행하면 됩니다. status를 'SECRET'로 해야 비밀글이 됩니다.

 

UPDATE xe_documents

SET status = 'SECRET'

WHERE is_secret = 'Y'

AND status = 'PUBLIC';

 

나머지: 과거에 코어를 수정한 경우, (웹사이트 기능을 위해) 꼭 필요한 패치는 이 작업 시작전에 미리 해놓고, 나머지는 작업 후에 하는 것이 좋을수도 있습니다. 라이믹스의 (디버그 기능을 이용하여) 패치 도중 에러나는 부분을 더 쉽게 잡아낼 수 있고, 트리거 펑션을 이용해 addon으로 모으면 코어 수정 부분을 줄일 수도 있습니다.

  • profile

    복잡하게 하실 필요 없이 XE 최신버전으로 덮어씌우시고(최신버전은 7.x 지원합니다) 관리자 화면에 뜨는 업데이트 완료하신뒤 라이믹스 덮어씌우셔도 됩니다. 명시하신 DB 변경 과정이 XE 최신버전 설치후 업데이트후 자동으로 이루어집니다.

     

    구버전 XE에서 업그레이드시 대부분의 문제점은 오래된 서드파티 자료에서 발생합니다. 또한 과거에 코어에 있다가 라이믹스에서 없어진 부분도 꽤 되는데요, 캡차 애드온의 경우 라이믹스에서는 스팸필터 모듈에 리캡차 기능이 내장되어 있으므로 불필요하거나, 커뮤니케이션 애드온이 커뮤니케이션 모듈로 합쳐져서 불필요하는 등 여러 자료가 통/폐합되었습니다. 업그레이드시 이부분만 신경쓰시면 사실상 대부분의 문제점은 해결한거라 볼 수 있습니다.

     

    그래도 장문으로 팁글 작성해주셔셔 감사드립니다 ^^

  • profile
    XE 구버전 → XE 최신버전 → 라이믹스 2.0 또는
    XE 구버전 → 라이믹스 1.9 → 라이믹스 2.0 순서로 덮어씌우는 것을 권해드립니다.
    일반인이 하기에 제일 어려운 것이 11단계인데, 그 문제가 해결되니까요.
  • profile

    네, 그렇죠. 1.8로 바꾼후 다시 바꾸는 것이 된다면요... 제가 위 글을 쓴 이유중 하나는 그냥 라이믹스에서 위 오류를 해결하게 하는 것이 더 쉬운 방법이 않을까 하는 뜻도 있습니다. 11항 보면 어디가 빠졌는지 알수있으니 간단한 일이죠. 긴 설명보다는 간단한 코드 한줄이 더 더움일 될수도요. 

  • profile profile
    원래 잘 되었는데 일부러 뺀 겁니다. 구 버전 스키마를 업그레이드해주는 코드가 너무 많아서 성능에 악영향을 주어서요. 지금 되는 것도 앞으로 지원 범위를 더 축소하면서 점점 더 없앨 것입니다.