본문 바로가기

smells digital

XE - JSON 모듈 만들기

간단하게 XE를 이용하여 JSON호출에 반응을 하는 hello world를 만들어보자.


1. module 디렉토리와 config파일들.

모듈명을 say_hello라고 하자.

그리고 모듈 디렉토리(xe/module/)에 say_hello라는 폴더를 만들지.

그리고 conf폴더에 info.xml과 module.xml파일을 만들어야 한다.

info.xml은 다른 모듈을 참고하고(어차피 작성자의 정보가 들어가므로 여기서 크게 중요치 않다.)

module.xml은 한마디로 모듈이 동작하는 인터페이스를 정의해놓은 것이다.

아래와 같이 action을 hello라고 하고 view타입(MVC모델 중 V에 해당)으로 하였다.
<?xml version="1.0" encoding="utf-8"?>
<module>
    <grants />
    <permissions />
    <actions>
        <action name="hello" type="view" />
    </actions>
</module>

2. 모듈 클래스 만들기

XE에서는 모듈 동작을 위해서 몇 가지 클래스를 만들어야 한다.

모듈 클래스, 모듈 뷰 클래스와 모듈 컨트롤러 클래스, 모듈 모델 클래스 등등이며 각각 다른 역할을 부여한다.

데이터베이스나 데이터를 다루는 규모의 예제가 아니므로 필요한 것은 모듈 클래스, 뷰 클래스와 JSON호출을 담당하는 API클래스이다.

아래는 모듈 클래스이며 뷰와 모델의 상위 클래스가 된다. 이는 모듈을 설치, 업데이트 관련 부분을 담당한다.
class say_hello extends ModuleObject {
    function moduleInstall() {
    }
    function checkUpdate() {
        return false;
    }
    function recompileCache() {
    }   
}

뷰 클래스. html형식으로 출력을 담당하는 클래스이다.
이 예제에서는 html로 출력을 할 게 아니므로 필요가 없을듯한 데 없으면 동작을 안한다.
즉 API 클래스로 흐름이 가지도 않으면서 에러도 안나고OK가 떨어진다. 뭥미!!

class say_helloView extends say_hello {
    function hello() {       
    }
}

API클래스. JSON호출을 담당하는 클래스이다.

그냥 간단히 hello와 world를 반환한다.
class say_helloAPI extends say_hello {
    function hello(&$oModule) {
        $oModule->add('hello','world!');   
    }
}

3. 클라이언트 코드

JSON 결과값을 받아서 간단히 파이어폭스 콘솔로 출력을 해보자.

jQuery를 이용하였다.
$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "http://localhost/xe/",
    data: {module:"say_hello", act:"hello"},
    dataType: "json",
    success:function(msg) {
        console.log(msg);
    }
});

jQuery에 getJSON이라는 유레카! 했던 함수가 있다. 하지만 XE에서는 view클래스로 동작을 넘겨버린다. 며칠간 고생하다 원인을 찾았다. 결국 찾은게 위의 방법.


4. 결과 확인


파이어폭스와 파이어버그를 이용해서 확인해 본 결과.


5. 마치면서

1. jQuery의 JSON호출(getJSON)에 반응하지 않는 점.(GET방식은 무조건 View가 처리하는 방식이라서 API로 흐름이 가지 않는다.)
2. Module객체에 그냥 key-value 쌍으로 add만 하면 JSON response를 만들어 반환하는, 리팩토링을 하고픈 냄새가 풍기는 구조.

등등이 막상 개발 작업을 하면서 "머리를 갸우뚱"하게 만드는 구조이다.


아직 XE가 개발단계인지라 개발자들을 위한 자료가 거의 없으며, 기 작성된 모듈과 애드온 소스를 파는 고난에서 지치고 디버깅도 어려울 뿐더러 테스트 코드도 전무.
처음 접하게 된 PHP언어의 애매함(변수명을 오타로 잘못쳤는데도 동작하여 에러도 안남!!!)
DB작업을 하는데 에러가 났는데도 기본적으로 오류처리도 안되고 로그도 제대로 남지도 않는다(config.inc.php가 있으나 큰 도움이 안된다). 하나하나 디버깅을 하다보면 XE를 떠나서 다른 CMS로 바꾸고 싶은 유혹이 든게 수백번이다.

아직 1.x대인.. 크게 기대를 하지 말아야지..
이렇게 하나하나 여럿이서 쌓아가다보면 세계가 부러워할 툴이 나오겠지~ 하면서 다른 개발자가 삽질을 덜 하도록 남겨본다.

반응형