|
|
|
복원
<div class="eArea xe_content xe_dr_hx"><h3 id="h1249440248686">XpressEngine의 동작 순서</h3></div><div class="eArea xe_content xe_dr_txt"><p>XE는 요청을 받고 이에 대한 결과를 만들어 출력을 하고 종료됩니다. 전체적인 동작순서는 아래와 같습니다.</p></div><div class="eArea xe_content xe_dr_txt"><p><img class="attachment" title="xe_flowchart.jpg" src="./files/attach/images/18093223/626/180/018/993032_xe_flowchart.jpg" alt="xe_flowchart.jpg"></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1249440233500">XpressEngine의 순서별 안내</h3></div><div class="eArea xe_content xe_dr_txt"><p>XE의 각 순서별 자세한 내용은 아래와 같습니다.</p></div><div class="eArea xe_content xe_dr_txt"><ol>
<li>
<p><strong>요청 (Request)</strong></p>
<ul>
<li>XE는 웹프로그램이며 XE가 동작하기 위해서는 브라우저, 어플리케이션, XE 혹은 다른 프로그램들을 통해서 요청을 받게 되고 웹서버는 이 요청을 XE로 전달하게 됩니다.</li>
<li>
<p>XE를 요청할때는 Content-type에 따라서 최종 결과물 출력시 다른 형태로 출력을 하게 됩니다.</p>
<ul>
<li>GET/ POST : 브라우저등에서 호출되는 HTML 결과물을 얻기 위한 요청 방식입니다.</li>
<li>JSON : Javascript로 만들어진 어플리케이션이나 AJAX 기법으로 데이터를 요청하거나 조작할때 사용되는 방식입니다.</li>
<li>XMLRPC : Javascript 또는 플래시등의 연동 어플리케이션 혹은 다른 XE 등의 프로그램에서 요청할때 사용됩니다.</li>
</ul>
</li>
<li>XE의 모든 요청은 index.php 파일을 거치게 되어 있습니다.</li>
</ul>
</li>
<li>
<p><strong>정보 초기화 (Context Init)</strong></p>
<ul>
<li>요청받을때 함께 입력받은 변수, 사용자의 언어, 설정된 DB 정보등 XE가 구동되기 위한 모든 정보를 초기화합니다.</li>
<li>Context class는 요청받은 도메인 정보에 따라 virtual Site에 대한 정보도 초기화를 하게 됩니다.</li>
<li>Context class는 XE의 모든 정보를 관리하는 상위 class이며 각 모듈들이 실행되고 결과물을 출력할때는 사용됩니다.</li>
</ul>
</li>
<li>
<p><strong>요청 받은 모듈 탐색 (ModuleHandler)</strong></p>
<ul>
<li>정보 초기화가 끝나면 ModuleHandler 라는 XE의 모듈을 관리하는 ModuleHandler가 동작하게 됩니다.</li>
<li>
<p>ModuleHandler는 아래와 같은 변수를 이용해서 모듈을 찾고 동작 시킵니다.</p>
<ul>
<li>document_srl : 문서 중심인 XE에서 최우선 접속 대상 파악은 문서 번호인 document_srl 변수로 찾게 됩니다.</li>
<li>mid : document_srl이 없거나 잘못된 값일 경우 mid 변수를 이용하여 대상 모듈을 찾게 됩니다.</li>
<li>module_srl : document_srl, mid가 없을 경우 module_srl 변수로 대상 모듈을 찾게 됩니다.</li>
<li>위 3가지 변수로도 대상 모듈을 찾지 못했다면 기본 설정으로 되어 있는 모듈을 검색합니다.<br>
(virtualSite 사용 도메인으로 접속시 virtualSite의 기본 설정 모듈을 검색)</li>
</ul>
</li>
</ul>
</li>
<li>
<p><strong>검색된 대상 모듈의 실행</strong></p>
<ul>
<li>검색된 대상 모듈이 없다면 에러를 출력하게 되고 바로 결과물 출력을 위한 준비 단계로 넘어갑니다.</li>
<li>
<p>대상 모듈이 있을 경우 대상 모듈의 동작을 위해 act 변수값을 검수합니다.</p>
<ul>
<li>act 변수는 모든 모듈에서 정의한 action 이름을 담고 있는 변수입니다.</li>
<li>이 act 변수에 담겨진 값이 모듈에서 정의한 action 중에 존재하지 않는다면 다른 모듈에서 정의되었는지를 찾게 됩니다.</li>
<li>다른 모듈의 모든 action을 찾는 것이 아니라 action forward라는 DB에 입력된 것을 대상으로 찾게 됩니다.</li>
<li>action forward DB에서 찾게 되면 그 대상 모듈을 찾아서 현재 모듈과 교체하게 됩니다.</li>
</ul>
</li>
<li>모듈의 action에 해당하는 method를 찾아서 실행합니다.</li>
</ul>
</li>
<li>
<p><strong>모듈 실행</strong></p>
<ul>
<li>4번을 통해 module, action을 찾게 되고 해당하는 method를 실행함으로서 모듈의 실행이 이루어집니다.</li>
</ul>
</li>
<li>
<p><strong>요청된 Content Type의 조사</strong></p>
<ul>
<li>GET/POST, JSON, XMLRPC의 요청 형식에 따라서 5번에서 실행된 결과를 출력할 방법을 찾게 됩니다.</li>
<li>GET/POST일 경우 HTML 로 출력하기에 Template Handler를 통해서 결과물을 생성하게 됩니다.</li>
<li>물론 HTML 출력이기 때문에 editor component, widget등을 컴파일해서 결과를 대체시키게 됩니다.</li>
<li>JSON/ XMLRPC의 경우 해당 모듈의 module.api.php 파일을 통해서 결과를 한번 더 검수하게 합니다.</li>
<li>이렇게 정리된 결과는 결과물 출력 단계로 넘어갑니다.</li>
</ul>
</li>
<li>
<p><strong>결과물 출력</strong></p>
<ul>
<li>Request Content Type에 따라서 적절한 결과물을 만들어서 출력합니다.</li>
<li>이로서 XE의 동작은 끝이 납니다.</li>
</ul>
</li>
</ol></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249439964580-2">애드온(addon) 의 동작</h3></div><div class="eArea xe_content xe_dr_txt"><p>XE의 애드온은 위의 flow chart를 보면 hooking 개념으로 총 4번의 애드온 호출이 이루어집니다. XE의 동작중 입력이나 출력을 조작할 수 있는 position을 정의하고 이 position에서 애드온을 호출함으로서 애드온은 XE의 모듈이 하는 정상적인 동작을 변형하거나 중단 또는 무언가를 추가할 수 있습니다.<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Gulim; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Arial; font-size: 11px; white-space: pre;"></span></span></p></div>
|
sol |
2009.08.05 11:44:56 |
|
|
|
복원
<h3>XpressEngine의 실행 순서</h3>
<p>XE는 웹프로그램이며 요청을 받고 이에 대한 결과를 만들어 출력을 하고 종료됩니다.</p>
<p>전체적인 동작순서는 아래와 같습니다.</p>
<p><img class="attachment" title="xe_flowchart.jpg" src="./files/attach/images/18093223/626/180/018/993032_xe_flowchart.jpg" alt="xe_flowchart.jpg" /></p>
<p> </p>
<h3>XpressEngine의 순서별 안내</h3>
<p>XE의 각 순서별 자세한 내용은 아래와 같습니다.</p>
<ol>
<li>
<p><strong>요청 (Request)</strong></p>
<ul>
<li>XE는 웹프로그램이며 XE가 동작하기 위해서는 브라우저, 어플리케이션, XE 혹은 다른 프로그램들을 통해서 요청을 받게 되고 웹서버는 이 요청을 XE로 전달하게 됩니다.</li>
<li>
<p>XE를 요청할때는 Content-type에 따라서 최종 결과물 출력시 다른 형태로 출력을 하게 됩니다.</p>
<ul>
<li>GET/ POST : 브라우저등에서 호출되는 HTML 결과물을 얻기 위한 요청 방식입니다.</li>
<li>JSON : Javascript로 만들어진 어플리케이션이나 AJAX 기법으로 데이터를 요청하거나 조작할때 사용되는 방식입니다.</li>
<li>XMLRPC : Javascript 또는 플래시등의 연동 어플리케이션 혹은 다른 XE 등의 프로그램에서 요청할때 사용됩니다.</li>
</ul>
</li>
<li>XE의 모든 요청은 index.php 파일을 거치게 되어 있습니다.</li>
</ul>
</li>
<li>
<p><strong>정보 초기화 (Context Init)</strong></p>
<ul>
<li>요청받을때 함께 입력받은 변수, 사용자의 언어, 설정된 DB 정보등 XE가 구동되기 위한 모든 정보를 초기화합니다.</li>
<li>Context class는 요청받은 도메인 정보에 따라 virtual Site에 대한 정보도 초기화를 하게 됩니다.</li>
<li>Context class는 XE의 모든 정보를 관리하는 상위 class이며 각 모듈들이 실행되고 결과물을 출력할때는 사용됩니다.</li>
</ul>
</li>
<li>
<p><strong>요청 받은 모듈 탐색 (ModuleHandler)</strong></p>
<ul>
<li>정보 초기화가 끝나면 ModuleHandler 라는 XE의 모듈을 관리하는 ModuleHandler가 동작하게 됩니다.</li>
<li>
<p>ModuleHandler는 아래와 같은 변수를 이용해서 모듈을 찾고 동작 시킵니다.</p>
<ul>
<li>document_srl : 문서 중심인 XE에서 최우선 접속 대상 파악은 문서 번호인 document_srl 변수로 찾게 됩니다.</li>
<li>mid : document_srl이 없거나 잘못된 값일 경우 mid 변수를 이용하여 대상 모듈을 찾게 됩니다.</li>
<li>module_srl : document_srl, mid가 없을 경우 module_srl 변수로 대상 모듈을 찾게 됩니다.</li>
<li>위 3가지 변수로도 대상 모듈을 찾지 못했다면 기본 설정으로 되어 있는 모듈을 검색합니다.<br />
(virtualSite 사용 도메인으로 접속시 virtualSite의 기본 설정 모듈을 검색)</li>
</ul>
</li>
</ul>
</li>
<li>
<p><strong>검색된 대상 모듈의 실행</strong></p>
<ul>
<li>검색된 대상 모듈이 없다면 에러를 출력하게 되고 바로 결과물 출력을 위한 준비 단계로 넘어갑니다.</li>
<li>
<p>대상 모듈이 있을 경우 대상 모듈의 동작을 위해 act 변수값을 검수합니다.</p>
<ul>
<li>act 변수는 모든 모듈에서 정의한 action 이름을 담고 있는 변수입니다.</li>
<li>이 act 변수에 담겨진 값이 모듈에서 정의한 action 중에 존재하지 않는다면 다른 모듈에서 정의되었는지를 찾게 됩니다.</li>
<li>다른 모듈의 모든 action을 찾는 것이 아니라 action forward라는 DB에 입력된 것을 대상으로 찾게 됩니다.</li>
<li>action forward DB에서 찾게 되면 그 대상 모듈을 찾아서 현재 모듈과 교체하게 됩니다.</li>
</ul>
</li>
<li>모듈의 action에 해당하는 method를 찾아서 실행합니다.</li>
</ul>
</li>
<li>
<p><strong>모듈 실행</strong></p>
<ul>
<li>4번을 통해 module, action을 찾게 되고 해당하는 method를 실행함으로서 모듈의 실행이 이루어집니다.</li>
</ul>
</li>
<li>
<p><strong>요청된 Content Type의 조사</strong></p>
<ul>
<li>GET/POST, JSON, XMLRPC의 요청 형식에 따라서 5번에서 실행된 결과를 출력할 방법을 찾게 됩니다.</li>
<li>GET/POST일 경우 HTML 로 출력하기에 Template Handler를 통해서 결과물을 생성하게 됩니다.</li>
<li>물론 HTML 출력이기 때문에 editor component, widget등을 컴파일해서 결과를 대체시키게 됩니다.</li>
<li>JSON/ XMLRPC의 경우 해당 모듈의 module.api.php 파일을 통해서 결과를 한번 더 검수하게 합니다.</li>
<li>이렇게 정리된 결과는 결과물 출력 단계로 넘어갑니다.</li>
</ul>
</li>
<li>
<p><strong>결과물 출력</strong></p>
<ul>
<li>Request Content Type에 따라서 적절한 결과물을 만들어서 출력합니다.</li>
<li>이로서 XE의 동작은 끝이 납니다.</li>
</ul>
</li>
</ol>
<p> </p>
<h3>애드온(addon) 의 동작</h3>
<p>위의 flow chart를 보면 총 4번의 애드온 호출이 이루어집니다.</p>
<p>XE의 애드온은 hooking 개념으로 보시면 됩니다.</p>
<p>XE의 동작중 입력이나 출력을 조작할 수 있는 position을 정의하고 이 position에서 애드온을 호출함으로서 애드온은 XE의 모듈이 하는 정상적인 동작을 변형하거나 중단 또는 무언가를 추가할 수 있습니다.</p>
<ol>
<li><strong>before_module_init</strong><br />
모듈을 찾기 전에 호출됩니다.<br />
이 시점에서 request argument에 대한 조작을 통해서 특정 조건에서 전혀 다른 결과물을 만들 수 있도록 할 수도 있습니다.<br />
악의적인 공격을 대비할 수도 있고 특정 사용자들에 대해 다른 결과를 보이도록 할 수 있습니다.</li>
<li><strong>before_module_proc</strong><br />
모듈이 찾아져서 동작하기 바로 직전에 호출됩니다.<br />
찾아진 모듈에 따라서 다른 동작을 수행하게 할 수 있습니다.</li>
<li><strong>after_module_proc</strong><br />
모듈의 동작 후 즉 결과물을 조작하기 위한 용도로 쓰일 수 있습니다.</li>
<li><strong>before_display_content</strong><br />
GET/POST 요청시에 호출이 됩니다.<br />
최종 생성된 HTML 결과물을 제어할 수 있습니다.<br />
정규 표현식등을 통해서 원하는 곳에 임의의 정보를 추가할 수 있습니다.</li>
</ol>
|
|
2009.07.27 14:23:11 |