Skip to content
TUWLAB.com
Atachment
첨부 '1'

XE 패치가 나와서 버전업을 할 때마다 조마조마 하는 마음이 드는 것은 예나 지금이나 별반 다를 바가 없습니다.

근래에 들어서는 안정화가 상당히 이루어져서 자주 볼 수는 없지만, 1.4버전까지만 해도 버전업을 할 때마다 공포의 백지화면을 심심치 않게 볼 수 있었습니다.

패치를 적용한 뒤, 메인페이지에서 F5키를 눌렀을 때 아무 것도 뜨지 않은 새하얀 화면을 마주하게 되면 그야말로 머리 속도 같이 새하얘지곤 했었습니다..

1.5버전에 진입한 뒤로 백지화면을 본 적이 없기 때문에 이제 관리자 화면에서 [코어 업데이트] 버튼을 누르는 데 부담이 많이 사라졌지만, 그래도 혹여 써드파티 플러그인에서 오류가 나지는 않을까 하는 걱정은 여전히 존재합니다.

이번에 1.7.4.1 버전으로 업데이트 하면서 별다른 문제는 발견하지 못했는데, 그간 조용하던 SocialXE가 다시 한 번 문제를 일으켰습니다.

SocialXE (v1.10.11) 관련 위젯 등이 붙어있는 페이지에 접속하면 다음 스샷에서와 같이 별로 달갑지 않은 환영문구(?)가 저를 맞이했습니다.

SocialXE_invalid_request_error.png

이 문제를 처음 발견하고 원인을 파악하고자 여러 가지 시도를 해 보았습니다. 소셜 로그인/로그아웃, 댓글달고 지우기 등등.. 하지만, 오류 메시지가 항상 나타나는 것이 아니라 미지의 조건(?)에 의해 간헐적으로 나타나곤 했습니다. (생활에서 맞닥들이는 여러 가지 오류중에 가장 해결하기 골치아픈 오류입니다.)

간헐적으로 발생하는 특성 때문에 원인을 파악하는 데 다소 시간이 걸릴 것으로 생각하고, 미뤄미뤄 오다가 마침 한가해진 오늘 원인을 찾아내고 해결할 수 있었습니다.


문제의 원인

저는 XE 패치가 발행될때마다 패치로그를 꼬박꼬박 챙겨 보지는 않습니다.

이번에도 역시 XE를 업데이트 하면서 패치로그는 확인 하지 않았는데, 이번 문제를 해결하고 보니 이번 패치에서 Action Request 관련 Naming Rule Check 부분이 강화됬다는 것을 알 수 있었습니다.

XE 모듈을 작성할 때 가장 주의깊게 작성해야 하는 파일이 하나 있는데, 바로 conf 디렉토리에 있는 module.xml 파일입니다. 여기서는 Request Action들의 이름과 특성을 정의하는데, 여기서 실수로 오타를 내면 조만간 다소 골치아픈 상황과 마주하게 됩니다.

이번 문제는 오타에 의한 것은 아니었지만, Naming Rule Exception으로 인한 Request거부가 원인이었습니다.

이번 문제의 핵에는 socialxe의 module.xml파일이 위치하고 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<module>
	<grants />
	<permissions>
		<permission action="dispSocialxeTextyleTool" target="manager" />
	</permissions>
	<actions>
		<action name="dispSocialxeAdminConfig" type="view" standalone="true" menu_name="socialxe" />
		<action name="dispSocialxeAdminBitly" type="view" admin_index="true" standalone="true" menu_name="socialxe" menu_index="true" />

		<action name="procSocialxeAdminInsertConfig" type="controller" standalone="true" />
		<action name="procSocialxeAdminInsertModuleConfig" type="controller" standalone="true" />
		<action name="procSocialxeAdminDeleteChecked" type="controller" standalone="true" />

		<action name="procCompileInput" type="controller" standalone="true" />
		<action name="procCompileList" type="controller" standalone="true" />
		<action name="procCompileSubList" type="controller" standalone="true" />
		<action name="procSocialxeInsertComment" type="controller" standalone="true" />
		<action name="procSocialxeDeleteComment" type="controller" standalone="true" />
		<action name="procSocialxeChangeMaster" type="controller" standalone="true" />
		<action name="procSocialxeSetAutoLoginKey" type="controller" standalone="true" />
		<action name="procSocialxeLoginInsert" type="controller" standalone="true" />
		<action name="procSocialxeUnlinkSocialInfo" type="controller" standalone="true" />
		<action name="procSocialxeSetSend" type="controller" standalone="true" />
		<action name="procSocialxeChangeMasterProvider" type="controller" standalone="true" />
		<action name="procCompileInfo" type="controller" standalone="true" />
		<action name="procResetSocialInfo" type="controller" standalone="true" />

		<action name="dispSocialxeLogin" type="view" standalone="true" />
		<action name="dispSocialxeCallback" type="view" standalone="true" />
		<action name="dispSocialxeLogout" type="view" standalone="true" />
		<action name="dispSocialxeTextyleTool" type="view" />
		<action name="dispSocialxeLoginForm" type="view" standalone="true" />
		<action name="dispSocialxeLoginAdditional" type="view" standalone="true" />
		<action name="dispSocialxeSocialInfo" type="view" standalone="true" />
	</actions>
	<menus>
		<menu name="socialxe" type="all">
			<title xml:lang="ko">SocialXE</title>
		</menu>
	</menus>
</module>

강조 표시된 줄들을 보면 공통점이 있습니다. 다른 Action Name들과 비교해보면, proc 뒤에 모두 Socialxe가 빠져 있음을 알 수 있습니다.

본래 XE에서 모듈 Action이름을 정할 때는 정해진 규칙에 따라야 하며, 그 형식은 다음과 같습니다.

[Type][ModuleName][ActionName]

Type은 Action의 종류를 나타내며, 대표적인 키워드는 다음과 같습니다.

  • proc : Controller와 관련된 Action인 경우
  • disp : View를 표시하는 Actin인 경우
  • trigger : Trigger인 경우

ModuleName은 모듈명을 나타내며, 모듈명 중간에 대문자가 들어가 있어라도 반드시 첫 글자만 대문자로 써야 합니다.

ActionName은 첫 글자만 대문자면 제한없이 쓸 수 있습니다.

예를 들어, 모듈명이 MyModule이고 Type이 Controller이면 Action Name은 다음과 같은 형태가 됩니다.
: procMymoduleSomeActionName

1.7.4 이전 버전에서는 이와 관련된 검사를 정확히 하지 않았는데, 이번 패치에서 엄격한 검사를 적용하면서 문제가 발생한 것으로 보입니다.


해결 방법

문제 해결 방법은 의외로 간단합니다.
- SocialXE 관련 플러그인에서 위에서 언급한 잘못 표기된 5개의 Action Name을 올바르게 수정해주면 됩니다.

즉, 모든 소스코드에서

  • procCompileInput -> procSocialxeCompileInput
  • procCompileList -> procSocialxeCompileList
  • procCompileSubList -> procSocialxeCompileSubList
  • procCompileInfo -> procSocialxeCompileInfo
  • procResetSocialInfo-> procSocialxeResetSocialInfo

이렇게 바꿔 주면 간단히[!] 해결될 문제입니다.

우선 module.xml 파일을 다음과 같이 수정합니다.
(proc 뒤에 Socialxe를 써 넣습니다.)

<?xml version="1.0" encoding="utf-8"?>
<module>
	<grants />
	<permissions>
		<permission action="dispSocialxeTextyleTool" target="manager" />
	</permissions>
	<actions>
		<action name="dispSocialxeAdminConfig" type="view" standalone="true" menu_name="socialxe" />
		<action name="dispSocialxeAdminBitly" type="view" admin_index="true" standalone="true" menu_name="socialxe" menu_index="true" />

		<action name="procSocialxeAdminInsertConfig" type="controller" standalone="true" />
		<action name="procSocialxeAdminInsertModuleConfig" type="controller" standalone="true" />
		<action name="procSocialxeAdminDeleteChecked" type="controller" standalone="true" />

		<action name="procSocialxeCompileInput" type="controller" standalone="true" />
		<action name="procSocialxeCompileList" type="controller" standalone="true" />
		<action name="procSocialxeCompileSubList" type="controller" standalone="true" />
		<action name="procSocialxeInsertComment" type="controller" standalone="true" />
		<action name="procSocialxeDeleteComment" type="controller" standalone="true" />
		<action name="procSocialxeChangeMaster" type="controller" standalone="true" />
		<action name="procSocialxeSetAutoLoginKey" type="controller" standalone="true" />
		<action name="procSocialxeLoginInsert" type="controller" standalone="true" />
		<action name="procSocialxeUnlinkSocialInfo" type="controller" standalone="true" />
		<action name="procSocialxeSetSend" type="controller" standalone="true" />
		<action name="procSocialxeChangeMasterProvider" type="controller" standalone="true" />
		<action name="procSocialxeCompileInfo" type="controller" standalone="true" />
		<action name="procSocialxeResetSocialInfo" type="controller" standalone="true" />

		<action name="dispSocialxeLogin" type="view" standalone="true" />
		<action name="dispSocialxeCallback" type="view" standalone="true" />
		<action name="dispSocialxeLogout" type="view" standalone="true" />
		<action name="dispSocialxeTextyleTool" type="view" />
		<action name="dispSocialxeLoginForm" type="view" standalone="true" />
		<action name="dispSocialxeLoginAdditional" type="view" standalone="true" />
		<action name="dispSocialxeSocialInfo" type="view" standalone="true" />
	</actions>
	<menus>
		<menu name="socialxe" type="all">
			<title xml:lang="ko">SocialXE</title>
		</menu>
	</menus>
</module>

그 다음은 나머지 파일에서도 똑같이 수정해 주면 됩니다.

여러 파일에서 텍스트를 검색하는 데는 grep 명령어를 사용하면 편리합니다. XE 루트 디렉토리로 이동해서 다음 명령어를 치면 XE 디렉토리 내 모든 파일에서 'procCompileInput' 이라는 텍스트가 포함된 위치를 알려줍니다.

$ grep -ir 'procCompileInput' .

ack-grep라는 패키지를 사용하면 조금 더 비쥬얼하게(?) 검색 결과를 볼 수 있습니다.
(리눅스 기본 패키지에 포함되어 있지 않으므로 사용하기 전에 설치해야 합니다.)

$ ack-grep -ir 'procCompileInput' .

검색하는 수고를 덜어드리기 위해 각 5개의 키워드가 위치하는 곳을 제가 대신 찾아드렸습니다.

SocialXE 패키지를 중간중간 수정했기 때문에 줄 번호가 완전히 일치하지 않을 수도 있습니다. 표시된 줄에 키워드가 없으면 그 근처를 찾아보세요. ^-^

+. 검색 결과에서 ./files/cache/... 에 존재하는 파일은 자동으로 생성되므로 수정하지 않아도 됩니다.


procCompileInput

  • ./widgets/socialxe_comment/skins/sketchbook5/js/socialxe.js : 24
  • ./widgets/socialxe_comment/skins/default/js/socialxe.js : 24
  • ./modules/socialxe/conf/module.xml : 15
  • ./modules/socialxe/socialxe.controller.php : 235


procCompileList

  • ./widgets/socialxe_comment/skins/sketchbook5/js/socialxe.js : 56, 76, 102, 115
  • ./widgets/socialxe_comment/skins/default/js/socialxe.js : 56, 76, 101, 114
  • ./modules/socialxe/conf/module.xml : 16
  • ./modules/socialxe/socialxe.controller.php : 271


procCompileSubList

  • ./widgets/socialxe_comment/skins/sketchbook5/js/socialxe.js : 150, 190
  • ./widgets/socialxe_comment/skins/default/js/socialxe.js : 147, 187
  • ./modules/socialxe/conf/module.xml : 17
  • ./modules/socialxe/socialxe.controller.php : 291


procCompileInfo

  • ./widgets/socialxe_info/skins/default/js/socialxe.js : 21
  • ./modules/socialxe/conf/module.xml : 26
  • ./modules/socialxe/socialxe.controller.php : 253


procResetSocialInfo

  • ./widgets/socialxe_info/skins/default/js/socialxe.js : 40
  • ./modules/socialxe/conf/module.xml : 27
  • ./modules/socialxe/socialxe.controller.php : 648


서비스 선택
이용중인 SNS 버튼을 클릭하여 로그인 해주세요.
SNS 계정을 통해 로그인하면 회원가입 없이 댓글을 남길 수 있습니다.
댓글
?
Powered by SocialXE

  • 최현우최현우 2015.11.03 09:02:39
    전 댓글이 안써지네요...
  • Oll_SJOll_SJ 2014.05.31 12:31:27
    밤새 씨름하고 찾아냈습니다 ㅜ ㅜ 조언 감사드립니다 소셜 인포에 젤 아래에 자바부분에 skin 없애니까 안뜨네요 속이 시원하네요 ㅎㅎㅎ
  • Oll_SJOll_SJ 2014.05.30 22:48:31
    잘못된 요청입니다 ㅜ ㅜ 이걸 아예 안뜨게 하는 방법은 혹시 없을까요? myspli 환경에서 해서 그런지 다른곳에서는 안뜨는데 소셜 인포를 사용해서 로그인 정보를 불러오면 잘못된 요청이라고 뜹니다 그렇다고 작동을 안하는것도 아니구 작동은 잘하는딩 ㅜ ㅜ
  • iapayaiapaya 2014.05.08 11:05:22
    안녕하세요, 해당 파일들 모두 수정을 했어요..
    그런데.. 오류가 발생하는데 어디가 문제인건지를 모르겠네요..
    주소: http://www.successwith.com/onestop_consulting
    에러메시지: 요청한 기능을 수행할 권한이 없습니다.

    이렇게 나오는데요.. 어디가 문제일까요?
    혹 추측되는 문제있으면 좀 짚어주셨으면 감사하겠습니다.
  • ShinyPainShinyPain 2014.05.07 11:05:41
    여쭤볼것이 있어서 왔습니다. TUW님은 소셜xe댓글위젯을 통해 리스트를 문제없이 뿌려주고 계신데
    제가 봤을때 최신코어로 넘어오면서 댓글목록을 못받아오는 것 같은데 어떻게 수정하셨는지요?
  • Jooran HwangJooran Hwang 2014.04.02 22:42:25
    흘러흘러 여기까지 왔습니다. tuwlab님의 설명대로 수정을 완료했는데 조금 이상해요~ 물론 수정하기 전보단 좋아졌지만,,,,,
    설명하자면 댓글을 달면 댓글이 바로 달리는 것이 아니라 F5번을 눌러야 새 댓글이 보이며, 페이스북으로 로그인 했는데 페이스북 프로필 이미지가 나타나는게 아니라 걍 XE 아이콘만 뜹니다. 그리고 댓글의 댓글을 달면 새 댓글을 작성 할때처럼 아무런 증상이 없다가 댓글 버튼을 클릭해야 "댓글1"이라고 표시되며 댓글의 내용이 보여요

    http://ecoin2006.cafe24.com/xe/environment/190 확인 가능한 페이집니다. 도움을 받을 수 있을까요? ㅠㅠ
  • Tae Wan KimTae Wan Kim 2014.03.31 21:06:18
    운영자님 안녕하세요. 제가 소셜 댓글을 구축하려고 며칠째 수정중인데요.
    최신버젼으로 코어업데이트 이후에 페이스북과 트위터 연동이 전혀 안되고 있습니다.
    외람되지만 소셜XE모듈부분을 통채로 업로드 해주시면 안되나요?
    물론 위 부분을 수정하고도 트위터 api를 받아와 이메일 추가입력후 진행이 안되고
    페이스북은 아예 에러코드 Curl 7 이후로 진행이 안됩니다.. 부탁드립니다..
  • ?
    홈페이지 jinkpark 2014.03.27 13:01:50
    감사합니다 덕분에 해결했네요
    그런데 이상한점이 하나 또 발견된에ㅛ
    예를들어 트위터에서 글전송하기를 해제 했는데도
    계속 전송이 되는 이상한 현상이 발생하고 있네요..
  • ?
    홈페이지 jinkpark 2014.03.26 20:00:36
    좋은 정보입니다. 감사합니다. 수정해야할곳이 좀 있네요
    혹시 혹시.. 수정파일 없을까요...^^
    감사합니다..

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5