<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
    <channel>
        <title>프로그래밍이야기</title>
        <link>http://seungyeop.kr/prog</link>
        <description>주로 제로보드 XE 개발강좌를 올릴예정-</description>
        <language>ko</language>
        <pubDate>Sun, 05 Feb 2012 20:22:06 +0900</pubDate>
        <lastBuildDate>Sun, 05 Feb 2012 20:22:06 +0900</lastBuildDate>
        <generator>XpressEngine 1.5.1</generator>
                                <item>
            <title>모듈만들기 .. 2</title>
            <dc:creator>haneul</dc:creator>
            <link>http://seungyeop.kr/27580</link>
            <guid isPermaLink="true">http://seungyeop.kr/27580</guid>
                        <comments>http://seungyeop.kr/27580#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&amp;nbsp;오늘은 모듈 안의 각파일들의 역할에 대해서 이야기를 좀 해보겠습니다 &lt;br&gt;&amp;nbsp;modules/모듈명/ 디렉토리에 들어가보면 우선 php파일들을 발견하실 수 있습니다.&lt;br&gt;&lt;br&gt;&amp;nbsp;우선 기본 class파일이 있습니다.&lt;br&gt;&amp;nbsp;모듈명.class.php : 해당 모듈의 기본이 되는 클래스. ModuleObject를 상속하고 있다. 모듈의 다른 클래스들은 이 기본 클래스를 상속 받아서 구현한다. 모듈이 인스톨될 때, 업데이트 될 때, 캐시 재생성할 때의 해야할 동작들을 정의하는 함수들을 포함한다.&lt;br&gt;&lt;br&gt;&amp;nbsp;그 외는 이제 MVC모델에서와 같이 Model, View, Controller에 해당하는 클래스들이 있는데요. &lt;br&gt;&amp;nbsp;zeroboardXE 에서는 전통적인 MVC를 그대로 따르고 있다고는 이야기하기 힘들지만, 대략적으로 model이 데이터를 다루는 작업(주로 디비에서 데이터를 가져오는 함수들), controller에서는 데이터를 집어넣는 부분(디비에 insert나 update를 하는 작업), view에서는 사용자에게 보여지는 화면을 구성하기 위해 model에서 data를 가져와서 template을 compile하는 작업을 맡고 있습니다.&lt;br&gt;&lt;br&gt;&amp;nbsp; 모듈명.admin.view.php 등, 중간에 admin이 들어간 녀석들은 관리자 화면과 주로 관련이 되어있는 클래스들입니다. 관리자 화면 뷰를 만들어주거나, 관리자가 할 수 있는 control에 대한 정의를 하고 있습니다.&lt;br&gt;&lt;br&gt;&amp;nbsp;우선 모듈이 만들어지기 위해 필요한 파일들은&lt;br&gt;&amp;nbsp;모듈명.class.php : moduleInstall, checkUpdate함수를 구현해주어야 합니다.&lt;br&gt;&amp;nbsp;기본적인 데이터를 포함하고 있는 conf/info.xml 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;그럼 test라는 간단한 모듈을 통해 모듈이 생성되는 것 까지를 일단 보여드리겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;modules/test디렉토리 아래 test.class.php와 conf/info.xml을 다음과 같이 만들어보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;test.class.php&lt;/strong&gt;&lt;/p&gt;
&lt;ol language=&quot;Php&quot; class=&quot;code&quot;&gt;&lt;li&gt;&amp;lt;?php&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class test extends ModuleObject&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function moduleInstall()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new Object();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function checkUpdate()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;?&amp;gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;conf/info.xml&lt;/strong&gt;&lt;/p&gt;
&lt;ol language=&quot;Xml&quot; class=&quot;code&quot;&gt;&lt;li&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;br&gt;&amp;lt;module version=&quot;0.2&quot;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title xml:lang=&quot;ko&quot;&amp;gt;test 모듈&amp;lt;/title&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;description xml:lang=&quot;ko&quot;&amp;gt;test 모듈입니다.&amp;lt;/description&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;0.1&amp;lt;/version&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;date&amp;gt;2008-09-25&amp;lt;/date&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;category&amp;gt;base&amp;lt;/category&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;link&amp;gt;http://www.zeroboard.com&amp;lt;/link&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;author email_address=&quot;haneul@zeroboard.com&quot; link=&quot;http://www.seungyeop.kr&quot;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name xml:lang=&quot;ko&quot;&amp;gt;haneul&amp;lt;/name&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/author&amp;gt;&lt;br&gt;&amp;lt;/module&amp;gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;이렇게 하고 나면, admin 페이지의 모듈란에서 test 모듈을 찾을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.seungyeop.kr/files/attach/images/20875/580/027/module_res.JPG&quot; alt=&quot;module_res.JPG&quot; title=&quot;module_res.JPG&quot; style=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;이제 다음강좌에서는 실제 디비를 만들고 연동하는 부분을 이야기해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Fri, 26 Sep 2008 15:12:28 +0900</pubDate>
                        <category>zbXE</category>
                        <category>제로보드</category>
                        <category>모듈</category>
                                    <slash:comments>9</slash:comments>
                    </item>
                <item>
            <title>모듈 만들기 .. 1</title>
            <dc:creator>haneul</dc:creator>
            <link>http://seungyeop.kr/24110</link>
            <guid isPermaLink="true">http://seungyeop.kr/24110</guid>
                        <comments>http://seungyeop.kr/24110#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;br&gt;&amp;nbsp;간만의 글 하나입니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;모듈은 zbXE의 기본이 되는 프로그램입니다.&lt;br&gt;&amp;nbsp;지금 보고 있는 게시판(블로그)이나, BNU님이 만드신 &lt;a href=&quot;http://www.zeroboard.com/17237307&quot;&gt;Planner&lt;/a&gt;, 혹은 &lt;a href=&quot;http://www.zeroboard.com/xe_issuetracker&quot;&gt;이슈트래커&lt;/a&gt; 등이 하나의 모듈로 되어있습니다. &lt;br&gt;&amp;nbsp;또한, RSS나, 댓글, 문서등의 관리도 모듈이라는 단위로 동작하고 있습니다.&lt;br&gt;&lt;br&gt;&amp;nbsp;기본 모듈들에서 스킨 변경 이상의 기능들 (추가 Database가 많이 필요하다던가)을 지원하고 싶으시면 결국 모듈을 만들어야 합니다.&lt;br&gt;&lt;br&gt;&amp;nbsp;모듈들은 ./modules directory아래에 모여있습니다.&lt;br&gt;&lt;img src=&quot;http://www.seungyeop.kr/files/attach/images/20875/110/024/modules.JPG&quot; alt=&quot;modules.JPG&quot; title=&quot;modules.JPG&quot; style=&quot;&quot; /&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;board, file, point등이 보이는군요 +_+&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;예제로 쓸 bookmark 모듈 안을 들여다 보면 아래와 같이 구조가 있습니다.&lt;br&gt;&amp;nbsp;&lt;img src=&quot;http://www.seungyeop.kr/files/attach/images/20875/110/024/bookmark.JPG&quot; alt=&quot;bookmark.JPG&quot; title=&quot;bookmark.JPG&quot; style=&quot;&quot; /&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;조금더 복잡한 document를 봅시다-&lt;br&gt;&lt;img src=&quot;http://www.seungyeop.kr/files/attach/images/20875/110/024/document.JPG&quot; alt=&quot;document.JPG&quot; title=&quot;document.JPG&quot; style=&quot;&quot; /&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;각 파일들은 어떤 역할들을 하고 있는지를 우선 살펴보면,&lt;br&gt;&amp;nbsp;우선 디렉토리들은&lt;br&gt;&lt;br&gt;&amp;nbsp;conf : 설정 파일들을 포함하고 있습니다. (info.xml, module.xml)&lt;br&gt;&amp;nbsp;lang : 언어 파일들을 포함하고 있습니다. (ko.lang.php, jp.lang.php ... )&lt;br&gt;&amp;nbsp;queries : 쿼리 파일들을 포함하고 있습니다. (insertDocument.xml ... )&lt;br&gt;&amp;nbsp;schemas : 데이터베이스 스키마 파일들을 포함하고 있습니다. ( documents.xml ... )&lt;br&gt;&amp;nbsp;tpl : 스킨으로 설정하지 않는 template파일들을 포함하고 있습니다.&lt;br&gt;&amp;nbsp;skins : 스킨 디렉토리들을 포함하고 있습니다. &lt;br&gt;&lt;br&gt;&amp;nbsp;파일들에는, &lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;.class.php를 기본으로 해서, &lt;br&gt;&amp;nbsp;.controller.php, .view.php, .model.php 가 기본 동작들을&lt;br&gt;&amp;nbsp;.admin. 파일들이 admin모드에서의 동작들을 정의하고 있습니다.&lt;br&gt;&amp;nbsp;controller, view, model이 각각 무슨 역할을 하는 지는 다음편에 --a&lt;br&gt;&amp;nbsp;하겠습니다 @_@&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;</description>
                        <pubDate>Tue, 16 Sep 2008 17:20:46 +0900</pubDate>
                        <category>제로보드XE</category>
                        <category>모듈개발</category>
                                </item>
                <item>
            <title>1. debugPrint?</title>
            <dc:creator>haneul</dc:creator>
            <link>http://seungyeop.kr/20882</link>
            <guid isPermaLink="true">http://seungyeop.kr/20882</guid>
                        <comments>http://seungyeop.kr/20882#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;br&gt;&amp;nbsp;전부터 시도만 해보려던 강좌를 좀 써보려고 합니다. -_ -a&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;오픈소스프로젝트 모임 1회때 발표했던 내용부터 시작해서, 실제 zbXE로 여러 프로그램을 개발하는데 필요한 정보들을 전달 드리는데 목적이 있습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;질문은,... 음 댓글이나 제로보드 공식 홈페이지에 쓰시는 것이 좋겠지요? :)&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&amp;nbsp;첫글은 debugPrint로 시작합니다.&lt;br&gt;&amp;nbsp;C++ 개발을 해보신 분이라면 정상 동작을 확인하기 위해서, 혹은 안되는 부분을 고치기 위해서 printf로 여기저기 코드를 끼워놓으신 경험이 있을 거에요.&lt;br&gt;&amp;nbsp;특히나 PHP는 한줄씩 실행을 하기 때문에 특정 위치까지만 실행이 되는 경우가 있습니다. 그럼 도대체 어디까지 실행이 되었는지를 체크해볼 필요도 있습니다.&lt;br&gt;&lt;br&gt;&amp;nbsp;zbXE에서는 이러한 동작들을 쉽게 처리하기 위해서 debugPrint라는 함수를 제공하고 있습니다.&lt;br&gt;&amp;nbsp;config/func.inc.php에 정의되어있는 debugPrint함수는 argument로 넘겨준 값과 함께 어느 파일 몇번째 줄에서 불렸는지, 언제 불렸는지(r4483에서 추가)를 보여주게 됩니다.&lt;br&gt;&lt;br&gt;&amp;nbsp;예를 들어, board.view.php의 154번째 줄에&lt;br&gt;&amp;nbsp;&lt;b&gt;debugPrint($document_srl);&lt;/b&gt;&lt;br&gt;&amp;nbsp;라는 명령을 추가하고,&lt;br&gt;&lt;br&gt;&amp;nbsp;http://seungyeop.kr/20790 에 접근해보았습니다.&lt;br&gt;&amp;nbsp;그러면 이제 ./files/_debug_messages.php라는 파일에 다음과 같이 기록이 됩니다.&lt;br&gt;&lt;img src=&quot;http://www.seungyeop.kr/files/attach/images/20875/882/020/test.JPG&quot; alt=&quot;test.JPG&quot; title=&quot;test.JPG&quot; style=&quot;&quot; /&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;Query의 output등을 확인할 때 유용하게 쓸 수 있습니다. :)&lt;br&gt;&lt;br&gt;&amp;nbsp;다음 강좌에서는; 실제 모듈을 만들어 보겠습니다-&lt;br&gt;&lt;/div&gt;</description>
                        <pubDate>Mon, 08 Sep 2008 12:33:27 +0900</pubDate>
                        <category>강좌</category>
                        <category>debugPrint</category>
                                    <slash:comments>2</slash:comments>
                    </item>
            </channel>
</rss>

