반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함

Kurogo Tutorial 14 - Handling Requests -

2012. 5. 22. 08:52 | Posted by 솔웅


Handling Requests

이 섹션은 HTTP request들을 어떻게 Furogo 프레임워크가 처리하는지에 대한 개요에 대한 글입니다. 간략하게 아래와 같이 outline을 말할 수 있습니다.

1. mod_rewrite가 그 path 가 존재하는지 여부를 살펴 봄
  : DocumentRoot 안에는 2개의 파일과 1개의 폴더가 있습니다 : index.php, robots.txt and min
  : min 폴더는 css와 javascript assets의 version들을 consolidate 하기 위한 간략한 라이브러리를 포함하고 있습니다.
2. file이 없으면 그 사실이 index.php로 보내집니다.
3. file시스템에 있는 file로 경로가 매핑되고 이것을 return 하거나 404 코드가 return 됩니다.
4. SITE_DIR/config/site.ini를 업데이트해서 URLs을 다른 URLs로 매핑할 수 있습니다.
5. 첫번째 경로 component를 기반으로 한 config 폴더는 모듈이 로드 됐는지 확인합니다.





Path patterns

index.php 는 몇가지 패턴에 따라 경로를 analyze 할 겁니다.

- CURRENT_THEME/common/images 폴더에 favicon.ico 가 있으면 client한테 보내집니다.
- ga.php 가 lib 폴더로부터 보내 질 겁니다.
- css, javascript, 이미지들의 subpath 와 함께 모듈의 경로 (혹은 일반적인 경로) 를 포함한 request들은 Pagetype 과 Platform 파일들에 따른 규칙을 사용해서 작동합니다. 다음과 같은 예들이 있습니다. /modules/home/images/x.png, /common/css/compliant.css, /modules/admin/javascript/admin.js
- /media 경로가 있는 request는 현재 site 폴더의 subfolder 안에서 검색 될 겁니다. i.e. /media/file will map to SITE_DIR/media/file

어떤 패턴도 없으면 이 script는 SITE_DIR/config/site.ini 의 [urls] section 에 url이 있는 지 살펴 볼 겁니다. 만약 있으면 그 url로 rediret 될 겁니다.

다른 모든 request들은 그 request 의 첫번째 path component (/module) 를 근거로 site config 폴더에 있는 폴더를 찾으려고 할 겁니다. 첫번째 / 전에 있는 content들은 그 모듈의 id를 가리킬 겁니다. module.ini 파일의 id 프로퍼티를 추가함으로서 이것을 override 하실 수 있습니다.(좀 더 자세한 사항은 Copying a Module을 보세요). 슬래시 다음의 content들은 로드할 page 가 될 겁니다. 명시된 페이지가 없다면 index 페이지가 로드 될 겁니다. 이 script는 (index.php) WebModule::factory method 를 사용해 상응하는 id 를 갖고 module을 instantiate 하려고 시도할 겁니다. 이 때 파라미터로서 $_GET 과 $_POST 변수의 내용도 포함이 됩니다. (어떻게 module file들이 위치되는지에 대한 정보는 Writing Modules를 보세요). Note: the trailing .php for page names is optional.

Examples:


* /home - index 페이지와 함께 home 모듈이 로드 될 겁니다.
* /about/about_site - about_site와 함께 about 모듈이 로드 될 겁니다.
* /calendars/day?type=events 는 day 페이지와 함께 calendars 모듈이 로드되고 여기에 events라는 값을 가지는 Get 변수 name인 type을 포함할 겁니다.
* /news/?section=1 는 index 페이지와 함께 news 모듈을 로드하고 section이라는 name을 가지고 1이라는 값을 가지는 GET 변수를 포함할 겁니다.

Pages 에 대해서는 Writing Module setion에서 좀 더 자세하게 다뤄질 겁니다.

Pagetype & Platform Files

다양한 디바이스에 맞게 request를 만들다 보면 아주 다양한 상황에 놓이게 됩니다. device detection service에는 두가지 중요한 프로퍼티가 있습니다. 이 프로퍼티들은 어떤 content가 로드될 것인가에 영향을 미칩니다.

- pagetype - The basic type of device, is basic, touch, compliant or tablet.
- platform - The specific device type. Examples include: android, bbplus, blackberry, computer, featurephone, iphone, palmos, spider, symbian, webos, winmo


탬플릿 파일이나 css file 그리고 javascript 파일에 대해서는 서로 다른 디바이스 타입과 플랫폼들에 맞게 해당 버전을 로드할 수 있습니다. 프레임워크는 가장 알맞는 file을 로드할 겁니다 예를 들어 디바이스가 안드로이드 디바이스이면 다음 순서대로 index.tpl 파일을 찾아볼 겁니다.

- index-compliant-android.tpl
- index-compliant.tpl
- index.tpl


그리고 feature phone 일 경우는 아래 순서대로 살펴 보겠죠.

- index-basic-featurephone.tpl
- index-basic.tpl
- index.tpl


이렇게 함으로서 여러분은 서로 다른 HTML markup, CSS, javascript를 해당 디바이스에 맞게 제공할 수 있습니다.  탬플릿 안에서 CSS @import 와 {block} 함수를 사용함으로서 일반적인 layer utilize 구조나 스타일을 해당 디바이스에 맞게 제공 되도록 구현할 수 있습니다.


반응형

Comment