CMS(Content Management System)이란,
웹사이트 구축에 필요한 웹기획자, 개발자, 디자이너의 3가지 역할 중
개발자와 디자이너의 영역을 처리해주는 SW분류를 의미합니다.
따라서 웹기획자가 의도한대로 유연하게 조정할 수 있는지, 손쉬운 관리가 가능한지 등이 중요한 검토항목이 됩니다.

CMS 주요 검토항목
네비게이션(메뉴) 관리 - 어느정도 depth의 네비게이션을 관리할 수 있는가, 관리기능은 세밀한 조정이 가능한가
콘텐츠 관리 - 작성가능한 콘텐츠의 종류는 다양한가, 모듈(컴포넌트)는 다양하게 존재하는가
스킨(테마) 관리 - 다양한 스킨이 제공되는가, 스킨은 손쉬운 편집이 가능한가
인증 - 컨텐츠 권한, 사용자 권한에 대한 세밀한 조정이 가능한가
사용자 정의 필드 - 개발자없이 원하는 필드를 추가, 삭제 할 수 있는가
사용자 정의 콘텐츠 - 개발자 없이 콘텐츠의 새로운 유형을 생성할 수 있는가
관리자 인터페이스 - 관리자에게 쉬운 인터페이스를 제공하는가

개발자라면 누구나 한번쯤 떠올려보는 SW지만, 쉬운관리와 세밀한 조정을 동시에 제공하기란 쉬운 일이 아닙니다.
CMS는 국내에서 Xe가 활발하게 사용되고 있으며, 해외에서 Drupal, Joomla 등이 활발하게 사용되고 있습니다.
이번시간에는 drupal 을 사용해서 웹사이트를 구축하는 방법을 진행해 보겠습니다.


제가 설치하는 시점에서는 6.17버전이 안정화 버전이라서 그걸 다운로드 받았습니다.
다운받은 파일을 설치할 경로에 압축해제 하시고,
http://설치도메인/install.php 를 브라우저로 호출하시면 설치단계가 시작됩니다.

저희 서버에는 modsecurity가 적용되어 있어서, 설치과정에 오류가 나네요~
구글링 해보니, Modsecurity 적용된 환경에서 Drupal 설치를 하려면
modsecurity 룰셋을 변경해 주어야 정상적으로 설치됩니다.
(Drupal 6.x, ModSecurity2 환경)

vi /etc/httpd/modsecurity.d/modsecurity_localrules.conf

# drupal setting
<LocationMatch "/">
SecRuleRemoveById 960010
SecRuleRemoveById 960015
SecRuleRemoveById 960032
SecRuleRemoveById 950107
</LocationMatch>

# drupal setting
<LocationMatch "/install.php">
  SecRuleRemoveById 970003
  SecRuleRemoveById 960010
</LocationMatch>
추가사항
드루팔의 관리자화면을 정상사용 하기 위해서
vi /etc/httpd/modsecurity.d/base_rules/modsecurity_crs_41_phpids_filters.conf
66번줄의 content 를 제거해 주었다.

다른 SW를 위한 modsecurity 설정은 아래를 참고하세요.

vi /etc/httpd/modsecurity.d/modsecurity_localrules.conf

더보기


설치과정에서 오류를 만나신다면, 드루팔 퀵 설치 가이드( http://drupal.org/node/570116)를 보시면서 진행해 보시기 바랍니다.

Drupal 설치 전 설정을 저장할 파일과 디렉토리 권한을 조정해 줍니다
[hckim@www html]$ cp sites/default/default.settings.php sites/default/settings.php
[hckim@www html]$ chmod a+w sites/default/settings.php
[hckim@www html]$ chmod a+w sites/default

Drupal 설치 후 조정했던 권한을 변경해서 보안상 취약점을 제거합니다.
[hckim@www html]$ chmod a-w sites/default
[hckim@www html]$ chmod a-w sites/default/settings.php

기본 설치는 여기에서 끝났습니다.
설치 화면을 보시고 뭔가 마음에 안드시겠죠. 영어로된 화면하며, 복잡한 기능들..
차근차근 입맛에 맞게 설정해 가시다 보면, drupal의 유연한 기능에 놀라시게 될겁니다.

한글화

영어로 된 인터페이스를 우선 한글화 해 보겠습니다.
http://drupal.kldp.net/download/latest_ko_language_package
위 주소에서 한글화파일(6.15  - drupal-6.15-ko.20100222po.po)를 다운로드 받습니다.

한글로 drupal을 사용하시기 위해서는 locale 모듈을 활성화하시고, 다운로드 받은 po파일을 Korean이란 항목에 import하시면 됩니다.

추가 모듈 설치
http://drupal.org/project/Modules
원하는 모듈을 다운로드해서 압축을 해제한 후 "drupal설치된 경로/modules" 안에 업로드 하세요

추가 테마 설치
http://drupal.org/project/Themes
원하는 테마를 다운로드해서 압축을 해제한 후 "drupal설치된 경로/theme" 안에 업로드 하세요

위지윅 편집기로 콘텐츠 작성을 위한 추가설치
rupal에서 사용가능한 WysiWyg 편집기는 종류가 매우 많습니다.
(htmlarea, fckeditor, ckeditor, yui editor 등)
설치하는 방법은 모듈로 설치하는 법과, wysiwyg 모듈안의 에디터코어를 추가하는 방법이 있는데
저는 모듈로 ckeditor를 설치하는 방법을 선택했습니다.

파일업로드를 위해서는 ckfinder도 추가로 설치해야 합니다.
그중 ckeditor를 적용하는 방법에 대한 아래 글을 참고해서 적용했습니다.
http://www.brightwebsitedesign.com/how-to-install-ckeditor-and-ckfinder
http://yadadrop.com/drupal-video/ckfinder-file-browser-ckeditor-drupal


Transaction ? : http://en.wikipedia.org/wiki/Transaction

매뉴얼 : http://dev.mysql.com/doc/refman/5.0/en/commit.html


트랜잭션이란 논리적 작업 단위로 결합되는 작업 그룹을 의미하며 
데이터베이스의 오류와 상관없이
각 동작에 대해 일관성과 무결성을 제어하고 유지 관리하기위해서 사용됩니다

트랜잭션을 위한 준비

트랜잭션 테스트


테스트를 위한 table schema
CREATE TABLE trans
(
id int not null auto_increment,
item varchar(30) not null,
quantity varchar(10) not null,
primary key(id)
)type=innodb;
php sample
@mysql_connect("localhost","username",   "password") or die(mysql_error());
@mysql_select_db("test")   or die(mysql_error());
$query = "INSERT INTO trans   (id,item,quantity)
values (null,'Baseball',4)";

@mysql_query("BEGIN");   // transaction begins

$result = @mysql_query($query);
 
if(!$result)
{
	@mysql_query("ROLLBACK");   // transaction rolls back
	echo "you rolled back";
	exit;
}
 
else
{
	@mysql_query("COMMIT"); // transaction is committed
	echo "your insertion was successful";
}

'오픈소스SW' 카테고리의 다른 글

한국의 공개SW 생태계에 대한 이해  (0) 2010.08.15
공개SW CMS Drupal  (0) 2010.07.24
MySQL Transaction  (0) 2010.07.14
공개SW - 오픈소스 도입시 고려사항  (0) 2010.07.13
firefox 확장기능 Wired-Marker  (0) 2010.06.30
yui-compressor  (0) 2010.06.29

몇일 전 Jboss 세미나에서 몇년전 고민했던 내용이 나와서 다시 정리해봅니다.
(모두 개발하시는 분들이 참석해서 분위기는 좋았던것으로 기억됩니다)

오픈소스를 도입 후 현재 5년간 사용하고 있는 회사의 입장에서 오픈소스 도입 시 고려사항을 이야기하더군요
전에 하던 업무에서 이부분에 대해서 고민했던 적이 있었습니다.
기억이 나서 다시한번 정리해 봅니다.


외국의 경우 2007년에 발표된 오픈소스 카달로그라는 자료가 있어서
그걸 번역해서 홍보하기도 했었습니다.(한글본은 제 컴에서 검색이 안되네요)



이 문서의 주요골자는 오픈소스 도입 시 고려사항을 아래의 7개항목으로 선정하고
이 제품들에 대한 카달로그를 생성한 것이죠.


<도입 시 고려사항>



<오픈소스의 적용영역>

제 자료를 찾아보니
2008년12월에 작성했던 공개소프트웨어 정보화전략계획수립 가이드에 아래의 내용이 있네요.

이 문서의 내용은 오픈소스기반의 ISP사업을 위한 가이드입니다.



'오픈소스SW' 카테고리의 다른 글

공개SW CMS Drupal  (0) 2010.07.24
MySQL Transaction  (0) 2010.07.14
공개SW - 오픈소스 도입시 고려사항  (0) 2010.07.13
firefox 확장기능 Wired-Marker  (0) 2010.06.30
yui-compressor  (0) 2010.06.29
php 어플리케이션 로그 - log4php  (0) 2010.06.29
파이어폭스 확장기능 Wired-Marker
http://rockyourfirefox.com/2010/06/wired-marker/

이 확장기능은 브라우저에서 읽은 콘텐츠에 내가 원하는 색깔을 표시해두고,
다음에 방문하면 내가 지정한 표기가 그대로 남는 방식이다.
(중요한 내용을 읽을때 밑줄 쫘악 긋는 기능을 떠올리면 된다)

어디에 쓰일까?
글을 읽었는데 중요한 부분을 표시해두고 싶을때 (pdf 를 읽은 경우도 가능)

사용법
http://www.wired-marker.org/en/update.html



설치 후 브라우저 메뉴의 Wired-Marker 를 누르면 사이트바로 실행되고.

웹페이지에서 색상을 입히고 싶은 부분을 선택한 후 사이드바로 드래그하면 지정한 색상이 칠해진다.

드래그 할때마다 자꾸 묻는 설정이 귀찮다면 아래의 내용처럼 옵션을 변경하자
변경 후에는 더이상 대화창을 띄우지 않는다.



설정된 하일라이트를 제거할때는

사이드바의 마크를 선택해서 list view 를 선택하면
미리 설정된 리스트가 나타나고 선택해서 제거하면 된다.


'오픈소스SW' 카테고리의 다른 글

MySQL Transaction  (0) 2010.07.14
공개SW - 오픈소스 도입시 고려사항  (0) 2010.07.13
firefox 확장기능 Wired-Marker  (0) 2010.06.30
yui-compressor  (0) 2010.06.29
php 어플리케이션 로그 - log4php  (0) 2010.06.29
phpDocument 를 이용한 문서생성  (0) 2010.06.25
브라우저에 캐쉬되는 파일의 압축을 통해서 성능을 향상시키는 방법.

개발중에는 필요없지만, 배포를 위해서라면 성능을 향상시킬 필요가 있을경우
야후에서 BSD라이센스로 제공하는 compress 를 사용할 수 있다.

홈페이지 링크 : http://developer.yahoo.com/yui/compressor/

다운로드 : http://yuilibrary.com/downloads/#yuicompressor


사용을 위해서 사용자 환경에 java가 설치되어있어야 한다.
java 설치가 되어있는 환경이라면 아래와 같이 사용가능하다.

java -jar yuicompressor-x.y.z.jar myfile.js -o myfile-min.js

Global Options
-h, --help Displays this information
--type <js|css> Specifies the type of the input file
--charset <charset> Read the input file using <charset>
--line-break <column> Insert a line break after the specified column number
-v, --verbose Display informational messages and warnings
-o <file> Place the output into <file>. Defaults to stdout.

JavaScript Options
--nomunge Minify only, do not obfuscate
--preserve-semi Preserve all semicolons
--disable-optimizations Disable all micro optimizations


css파일과 js파일이 많은 경우에 한번씩 실행시키기 위해서..
editplus에 약간의 수정을 가했다.

다운받은 yuicompressor-2.4.2.jar 파일을 임의의 곳에 옮긴 후
(나의 경우는 아래보는것처럼 C:\xampp\yuicompressor-2.4.2.jar에 있다)
editplus 메뉴 중 도구 > 사용자도구 구성을 추가해서 아래와 같이 설정해준다.

메뉴제목
YUI COMPRESSOR

명령
C:\Program Files\Java\jre6\bin\java.exe

인수
-jar C:\xampp\yuicompressor-2.4.2.jar --charset utf-8 --line-break 100 -v --preserve-semi $(FilePath) -o $(FileDir)/$(FileNameNoExt)-min.$(FileExt)

출력내용캡쳐에 체크.

인수의 내용은 파일을 연 디렉토리에 파일명-min 이라는 이름으로 압축된 파일을 생성하라는 뜻이다.
php 어플리케이션의 로깅을 위해서 사용 가능한 공개sW


http://logging.apache.org/log4php/

이름에서 느껴지는 것처럼 lo4j와 유사한 사용법이므로 직관적인 사용이 가능하다.

기본출력에 보이도록 설정하는 경우 - log4php.properties
#### 기본출력 stdout
log4php.appender.default = LoggerAppenderEcho
log4php.appender.default.layout = LoggerLayoutSimple

#DEBUG < INFO < WARN < ERROR < FATAL.
log4php.rootLogger = WARN, default

log4php.logger.mylogger = INFO, default
log4php.additivity.mylogger = "false"

파일에 남기도록 설정하는 경우 - log4php.properties
#### 파일에 남기는 경우

log4php.rootLogger=debug, stdout, R

log4php.appender.stdout=LoggerAppenderConsole
log4php.appender.stdout.layout=LoggerLayoutPattern

# Pattern to output the caller's file name and line number.
log4php.appender.stdout.layout.ConversionPattern=%5p %t %F:%L - %m%n

log4php.appender.R=LoggerAppenderRollingFile
log4php.appender.R.File=C:/xampp/htdocs/log4php/viralphp.log

log4php.appender.R.MaxFileSize=100KB
# Keep one backup file
log4php.appender.R.MaxBackupIndex=1

log4php.appender.R.layout=LoggerLayoutPattern
log4php.appender.R.layout.ConversionPattern=%p %d{Y-m-d H:i:s.u} %t [%c] [%F:%L] - %m%n



php 에러로 나타나도록 설정하는 경우 - log4php.properties
### Log events using the php function: trigger_error
log4php.appender.default = LoggerAppenderPhp
log4php.appender.default.layout = LoggerLayoutPattern
log4php.appender.default.layout.conversionPattern = "%d{Y-m-d H:i:s.u} %-5p [%t] %c: %m%n"
log4php.rootLogger = DEBUG, default


syslog를 사용하도록 설정하는 경우 - log4php.properties
### Syslog 사용
log4php.appender.default = LoggerAppenderSyslog
log4php.appender.default.layout = LoggerLayoutSimple
log4php.appender.default.ident = log4php-test
log4php.appender.default.facility = LOG_LOCAL0
log4php.rootLogger = DEBUG, default

그외 db에 저장하는 pdo 사용법, 네트워크로 전송하는 소켓사용법등이 있으니
상세한 내용은 매뉴얼을 참고하자.


사용법

/**
 * log4php setting
 *
 * 웹서버 루트의 log4php/viralphp.log 파일에 로그 남기기
 *
 * @package    ViralMarketing
 * @author     Kim Hyeong Chae <hckim@abydos.co.kr>
 * @filesource
 * @todo       pdo를 이용한 변경 테스트
 *
 */

require_once $_SERVER["DOCUMENT_ROOT"]."/log4php/src/main/php/Logger.php";
Logger::configure($_SERVER["DOCUMENT_ROOT"] . '/log4php/log4php.properties');
$logger = Logger::getLogger("main");

/**
 * 접속자 아이피 로그파일에 남기기
 */
$logger->debug("접속자 아이피: " . $_SERVER["REMOTE_ADDR"]);


로그파일 내용

DEBUG 2010-06-29 13:39:18.216 4064 [main] [C:\xampp\htdocs\index.html:28] - 접속자 아이피: 127.0.0.1



'오픈소스SW' 카테고리의 다른 글

firefox 확장기능 Wired-Marker  (0) 2010.06.30
yui-compressor  (0) 2010.06.29
php 어플리케이션 로그 - log4php  (0) 2010.06.29
phpDocument 를 이용한 문서생성  (0) 2010.06.25
php 속도 증가를 위한 eAccelerator 설치  (0) 2010.06.24
오픈소스는 무료인가  (0) 2010.06.24

문서생성을 위한 문법
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.starting

설치
pear install PhpDocumentor


사용

Windows
-------
You need the cli version of PHP (php-cli.exe or cli/php.exe in 4.3.0+).
Either run phpDocumentor from the directory that PHP resides in, or put
php.exe in your DOS PATH enviroment variable.  The simplest usage of phpDocumentor is:

C:\>php.exe "C:\Path\To\phpdoc" -t targetdir -o HTML:default:default -d parsedir


Unix
----
Make sure that the cgi/cli version of PHP is in your path.  The simplest usage
of phpDocumentor is:

phpdoc -t targetdir -o HTML:default:default -d parsedir


웹UI제공

phpDocumentor Tags
 * @abstract
 * @access       public or private
 * @author       author name <author@email>
 * @copyright    name date
 * @deprecated   description
 * @deprec       alias for deprecated
 * @example      /path/to/example
 * @exception    Javadoc-compatible, use as needed
 * @global       type $globalvarname or
 * @global       type description of global variable usage in a function
 * @ignore
 * @internal     private information for advanced developers only
 * @param        type [$varname] description
 * @return       type description
 * @link         URL
 * @name         procpagealias or
 * @name         $globalvaralias
 * @magic        phpdoc.de compatibility
 * @package      package name
 * @see          name of another element that can be documented,
 *                produces a link to it in the documentation
 * @since        a version or a date
 * @static
 * @staticvar    type description of static variable usage in a function
 * @subpackage    sub package name, groupings inside of a project
 * @throws       Javadoc-compatible, use as needed
 * @todo         phpdoc.de compatibility
 * @var        type    a data type for a class variable
 * @version    version


eAccelerator is a free open-source PHP accelerator & optimizer.

홈페이지 : http://www.eaccelerator.net/http://www.eaccelerator.net/

다운로드 : http://bart.eaccelerator.net/source/0.9.6.1/


checksum
c95e87229a6e674b4994d4fc13278e516ea314f9 eaccelerator-0.9.6.1.tar.bz2
0ef91fb7579c3bf5c0e94d5ec2521c389de91ba8 eaccelerator-0.9.6.1.zip 


설치

소스 압축풀고 디렉토리로 이동해서

phpize
./configure
make
make install


php.ini 설정 추가(eaccelerator.so 파일의 경로가 맞도록)

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

캐쉬 디렉토리 생성 및 권한부여

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator

웹서버 재시작 후 확인

php -v 또는 페이지로 phpinfo 찍어본다.

확인

ab -n1000 http://mydomain.com/


다른 종류의 PHP Accelerator 소개 : http://www.ducea.com/2006/10/30/php-accelerators/

드루팔 환경의 속도비교 : http://2bits.com/articles/benchmarking-apc-vs-eaccelerator-using-drupal.html






어제 미팅이 있어서 이야기하던 중 이런 질문이 나왔습니다.

공개SW는 공짜다라는데 어떻게 이야기해야 하느냐?

정답부터 말하자면 오픈소스가 공짜인 기업도 있고, 그렇지 않은 기업도 있습니다.

이 문제는 비용의 관점을 어떻게 보느냐에 따라서 달라지는 것이 아닐까요

만일 오픈소스기반의 개발방법론이 정착된 환경의 기업이라면, 공짜입니다.
이런 경우라면 오픈소스라이선스에 대한 검토가 있을것이고,
참여과 기여를 통한 SW의 질적향상에 대한 경험, 오픈소스의 자유로운 배포정신 등을 이해하고 있을테니까.
좋은 SW를 무료로 사용하면서 비지니스를 창출할 수 있습니다.
자신이 좋은SW들을 패키징해서 제품으로 판매할 수도 있고(redhat, suse 등), IT서비스를 컨설팅할 수도 있으며(openlogic), 다른 IT서비스 카테고리를 선택할 수도 있고(blackduck), 하드웨어와 접목한 융합기기를 만들어 낼 수도 있습니다(embeded).

하지만, 오픈소스에 대한 이해와 학습이 없는 기업이라면 공짜가 아닙니다.
SW구매이후 발생될 여러가지 비용을 포함해야 하는 기업환경에서
소스코드의 자유로운 배포를 기본으로 하며(gpl,lgpl,mpl,bsd등), 적합한 라이센스를 검토해야 하고,
해당 SW에대한 기술지식, SW에 대한 유지보수 능력등이 필요한 오픈소스 SW를 공짜라고 판단하는것은  잘못된 생각입니다..

공개SW를 사용해야 할까요?

기업의  CTO가 오픈소스철학을 이해하고 있다는걸 전제한다면, 오픈소스는 기업의 EA에 많은 이익을 가져다 준다.
수 많은 SW의 리펙토링이 가능하고, 글로벌에 적용되는 SW개발방법론을 기업의 인적자원에게 숙련시킬수도 있으며
다양한 SW를 통해서 창의적인 아이디어를 획득할 기회도 증가합니다.

참여와 공유를 통해서 집단지성이 제공되는 최근의 흐름을 생각해볼때,
세상이 스마트해지면 해 질수록 오픈소스에 대한 이해는 더욱 필요합니다.







프로파일링이 왜 필요할까
[원문보기] [한글]

소프트웨어를 설계하고 코딩을 하다보면 프로그램을 최적화할 때가 있다.
대부분의 프로그램은 80:20 법칙을 따른다. 전체 코드의 20%가 전체 시간의 80%를 차지한다.

그래서 프로그래머가 해당 컴퓨터 아키텍쳐의 세세한 부분보다는 논리에 집중하여 프로그래밍 시간을 줄여주는
자바나 C#같은 언어가 인기를 얻었다.
프로그램의 실행시간은 길어지지만, 프로그래머의 시간은 절약된다.

그러나 프로그램을 더 빨리 실행하기위한 최적화가 필요하지 않다는 말은 아니다.
많은 컴파일러는 알아서 최적화를 한다.
예를 들어, GCC 컴파일러는 (대문자 주의) -O 옵션으로 최적화 수준을 지정한다.

프로파일링(profiling)은 프로그램의 성능을 높이기위해 최적화할 코드및 함수의 위치를 발견하도록 도와준다.
프로그램에서 10번만 호출하는 함수보다 1000번 호출하는 함수를 최적화하는게 당연하다고 생각하지 않는가.
프로그램을 프로파일링하면 코드의 어떤 부분을 자주 사용하고 어떤 함수가 CPU 시간을 많이 잡아먹는지 알 수 있다.
이 두 정보는 최적화할 대상을 정하는데 유용하다.
실제 프로그램을 실행하면서 정보를 모으기때문에 감춰진 버그를 찾는데도 유용하다.
실행중에 예기치않게 어떤 함수를 1000번 호출한다면 설계상 문제이거나 버그일 수 있다.
또, 크고 복잡한 프로젝트에서 코드를 살펴볼때도 유용하다.

프로파일링 정보에는 두가지 종류가 있다 :-

    * Flat Profile
      함수별로 사용하는 CPU 시간과 호출 횟수를 보여준다. 수집한 전체 프로파일링 정보의 간단한 요약이다. 성능을 높이기위해 어떤 함수를 다시 작성하거나 수정할지 알려준다.

    * Call Graph
      모든 함수에 대해 자신을 포함하여 다른 함수가 호출한 횟수를 보여준다. 그래서 어떤 함수 호출을 없애거나 다른 효율적인 함수로 대체할지 제안한다. 이 정보는 함수들간의 관계를 드러내고, 감춰진 버그를 알려주기도 한다. 호출그래프를 본 후에 특정 코드 경로를 최적화하고 싶을 것이다.



Xdebug 설치하기
http://www.xdebug.org/docs/install
- xampp 패키지로 개발환경을 구축했다면 xdebug가 포함되어 있으므로 별도로 디버거를 설치할 필요없이 php.ini의 설정만 변경해주면 된다.

Xdebug 프로파일링을 통해 얻어진 파일의포멧은 cachegrind 의 포멧을 따르고 있다.
Xdebug에서 프로파일링된 파일을 생성하도록 설정해 주었다면 아래의 도구들 중 하나를 골라서 분석 가능하다.

Xdebug 프로파일링을 위한 웹기반 분석도구 webgrind
http://code.google.com/p/webgrind/downloads/list

Xdebug 프로파일링을 위한 설치형 분석도구 WinCacheGrind
http://sourceforge.net/projects/wincachegrind/

리눅스용 분석도구
kcachegrind
http://kcachegrind.sourceforge.net/html/Home.html


Xdebug 설정 관련한 참고문서
http://www.ibm.com/developerworks/opensource/library/os-php-xdebug/


php.ini 설정
; xdebug
zend_extension = C:\xampp\php\ext\php_xdebug-2.1.0RC1-5.3-vc6.dll
xdebug.default_enable = On
xdebug.show_exception_trace = On
xdebug.show_local_vars = 1
xdebug.max_nesting_level = 50
xdebug.var_display_max_depth = 6

xdebug.dump_once = On
xdebug.dump_globals = On
xdebug.dump_undefined = On
xdebug.dump.REQUEST = *
xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT,SCRIPT_NAME

xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

;모든 파일에 대하여 자동으로 프로파일링할때
;xdebug.profiler_enable = 1
; 특정파일만 프로파일링 하고 싶을때 XDEBUG_PROFILE 을 get으로 실행한다.
; ex : http://example.com/sample.php?XDEBUG_PROFILE
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir ="C:\xampp\tmp"
;cachegrind 포멧으로 설정
xdebug.profiler_output_name = cachegrind.out.%t.%p


http://localhost/test.php?XDEBUG_PROFILE 처럼 호출하면 프로파일링이 시작되고, 설정한 디렉토리에 파일이 생성된다.

분석결과를 webgrind 로 본 화면


분석결과를 WinCacheGrid로 본 화면


+ Recent posts