SlideShare a Scribd company logo
1 of 55
Download to read offline
4FTTJPO 9$PO
1)1'FTU 
1)11SPGJMJOH 
뺂 
컿쩢 
9QSFTTOHJOF%FWFMPQFS
헎읊콚맪삖삲 
컿쩢 
TVOHCVN!HNBJMDPN 
9QSFTTOHJOF 
9QSFTTOHJOF맪짪훟
맪짪핞픦핊캏
빪뺂 
펊잖빦팚몮핖픒밚
샃픎옪핊잏
옪믆앶픦킪맒쫃핯솒짝뫃맒	젢졶읺

헣졓옇펂핂푷
쿦 
훊믾퐎찖솒슿픒 
핊잏헣쫂쁢샎맪많옪믆앶 
핊잏픎옪핊얺	QSPGJMFS
않쁢솒묺읊칺푷펺옪믆앶콚큲 
핂힒킲핊픒몒
옪믆앶픦 
훊믾퐎찖솒슿픒 
핊잏헣쫂쁢샎맪많 
핊잏픎옪핊얺	 
핂힒킲핊픒몒
엖
멾뫊픦쁢샎 
픦풞핆픊옪쭎
핂 
	푾읺빦않픦몋푾많몒믖픃혾칺
 
힏풞픦많칺핂핃픦읊
엖 
킲찒푷픦쁢샎 
픦
믆엕삲졂푾읺쁢 
훟푢픦 
힟훟핞 
퓶헏핆짷쩣핂푢삲
퓶헏핆짷쩣핂푢삲 
옪핊잏픒핦퍊 
읊
옪핊잏
푾읺쁢쫂 
$start = microtime(); 
// 측정하려는 코드 
$end = microtime(); 
$duration = $end - $start; 
원시적이다. 이러지맙시다. 
$startMem = memory_get_usage(); 
// 측정하려는 코드 
$endMem = memory_get_usage(); 
$memoryUsage = $end - $start;
홎섢큲잖멚쫊밚푢  
픒턶쫓킪삲 
개발자의
 숙명,
 툴
 익히기!!
홎섢큲잖멚쫊밚푢  
9EFCVH9)1SPG 
 
개발자의
 숙명,
 툴
 익히기!!
$BMM(SBQI
9EFCVH 
TJODF 
QIQFYUFOTJPO 
샎헏핆1)1싢쩒밓 
싢쩒밓
 
옪핊잏믾쁳헪뫃 
IUUQYEFCVHPSH 
삲퍟쮾펂많짾쇦몮핖픚 
	8FC(SJOE
,$BDIF(SJOE
8JO$BDIF(SJOE
1)14UPSN슿
9)1SPG 
TJODF 
QIQFYUFOTJPO 
GBDFCPPL펞컪맪짪 
않핂쯚컪쩒펞헏푷펺칺푷쇮졷헏픊옪맪짪 
BHHSFHBUF
EJGG믾쁳헪뫃 
IUUQTHJUIVCDPNQIBDJMJUZYIQSPG
9EFCVHWT9)1SPG 
9EFCVH 9)1SPG 
쁞읺삲 찮읂삲 
킪맒	XBMMUJNF
 
킪맒	XBMMUJNF

젢졶읺
 
DQV킪맒 
쪒솒픦쮾펂푢 쮾펂믾쫆헪뫃
믾쫆핟솧풞읺
IUUQNZTFSWFSDPNJOEFYQIQ 9%#6(@130'*-*/( 
3410/4 
PHP 
Xdebug 
 
컿쁳 
핊옪헎핳
8FC(SJOE쮾펂킲 
3410/4 
WebGrind
9EFCVH컲 
$ pecl install xdebug 
$ vi php.ini 
zend_extension = xdebug.so 
xdebug.profiler_enabled = 0 # 상시 프로파일링 설정 
xdebug.profiler_append = 1 # 측정데이터 누적 설정 
xdebug.profiler_enable_trigger = 1 # XDEBUG_PROFILE 사용설정 
xdebug.profiler_output_dir = /tmp/xdebug # 파일 저장 경로
8FC(SJOE쮾펂컲 
https://code.google.com/p/webgrind/wiki/Installation
9)1SPG컲 
$ pecl install channel://pecl.php.net/xhprof-0.9.4 
$ vi php.ini 
extension = xhprof.so 
xhprof.output_dir = /tmp/xhprof
쮾펂컲헣 
9)1SPG펞뺂핳쇪쮾펂	YIQSPG@IUNM
YIQSPG@MJC
읊퓇펞컪헟믊쿦핖솒옫컲헣
쪒솒픦1)1 
QIQJOJ펞컪BVUP@QSFQFOE@GJMF
BVUP@BQQFOE@GJMF컲헣픒칺푷졂읺 
// header 
if (extension_loaded('xhprof')) { 
include_once 'php/xhprof_lib/utils/xhprof_lib.php'; 
include_once 'php/xhprof_lib/utils/xhprof_runs.php'; 
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 
} 
// footer 
if (extension_loaded('xhprof')) { 
$profiler_namespace = 'profiler'; 
$xhprof_data = xhprof_disable(); 
$xhprof_runs = new XHProfRuns_Default(); 
$run_id = 
$xhprof_runs-save_run($xhprof_data,$profiler_namespace); 
} 
9)1SPG컲
%.0
캦 
?PHP 
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-string; 
} 
?PHP 
function repeat($obj) 
{ 
$obj-string = str_repeat($obj-string, 15000); 
} 
function free($obj) 
{ 
unset($obj-string); 
}
9EFCVH 
%.0
9)1SPG 
%.0
펺얺많힎
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
} 
$BMMT
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
} 
$start = microtime(); 
*ODMVTJWF8BMM5JNF 
쿦픦홓욚킪맏쿦픦킪핟킪맏 
FOETUBSU 
$end = microtime();
YDMVTJWF8BMM5JNF 
*ODMVTJWF8BMM5JNF 
TVN	핞킫쿦슲픦*ODMVTJWF8BMM5JNF
 
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
}
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
} 
$start = memory_get_usage(); 
*ODMVTJWF.FN6TF 
쿦홓욚킪옪켆큲픦젢졶읺칺푷얗 
 쿦킪핟킪옪켆큲픦젢졶읺칺푷얗 
FOETUBSU 
$end = memory_get_usage(); 
$start 
$end
YDMVTJWF.FN6TF 
*ODMVTJWF.FN6TF 
TVN	핞킫쿦슲픦*ODMVTJWF.FN6TF
 
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
}
*ODMVTJWF1FBL.FN6TF 
쿦홓욚킪옪켆큲픦젢졶읺칺푷얗 
 쿦킪핟킪옪켆큲픦젢졶읺칺푷얗 
FOETUBSU 
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
} 
$start = memory_get_peak_usage(); 
$end = memory_get_peak_usage(); 
$start 
$end
YDMVTJWF1FBL.FN6TF 
*ODMVTJWF1FBL.FN6TF 
TVN	핞킫쿦슲픦*ODMVTJWF1FBL.FN6TF
 
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
} 
$start 
$end
43 
핞켆칺푷쩣픎YIQSPGEPDVNFOU읊
44 
옪핊잏
45 
믆얺빦 
쭒컫픎혾믖펂옃삲
46 
옪핊잏쭒컫칺옎
47 
9뫃킫칺핂옪핊잏섾핂 
찒헣캏헏픊옪잜핂

More Related Content

What's hot

JS programowanie obiektowe
JS  programowanie obiektoweJS  programowanie obiektowe
JS programowanie obiektowePiotr Czajkowski
 
Java Script - Object-Oriented Programming
Java Script - Object-Oriented ProgrammingJava Script - Object-Oriented Programming
Java Script - Object-Oriented Programmingintive
 
Java script.trend(spec)
Java script.trend(spec)Java script.trend(spec)
Java script.trend(spec)dynamis
 
Silex. Микрофреймворк для микроприложений
Silex. Микрофреймворк для микроприложенийSilex. Микрофреймворк для микроприложений
Silex. Микрофреймворк для микроприложенийSoftline
 
Barcamp
BarcampBarcamp
Barcamprenelc
 
The core of javascript
The core of javascriptThe core of javascript
The core of javascriptspringuper
 
BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!Toshio Ehara
 
The Flavor of TypeScript
The Flavor of TypeScriptThe Flavor of TypeScript
The Flavor of TypeScriptDmitry Sheiko
 
変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhacomakoto tsuyuki
 
Introduction to Service Worker
Introduction to Service WorkerIntroduction to Service Worker
Introduction to Service WorkerShogo Sensui
 
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговлеТененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговлеPlatonov Sergey
 

What's hot (20)

JS programowanie obiektowe
JS  programowanie obiektoweJS  programowanie obiektowe
JS programowanie obiektowe
 
Java Script - Object-Oriented Programming
Java Script - Object-Oriented ProgrammingJava Script - Object-Oriented Programming
Java Script - Object-Oriented Programming
 
Iteratory
IteratoryIteratory
Iteratory
 
Testování prakticky
Testování praktickyTestování prakticky
Testování prakticky
 
Java script.trend(spec)
Java script.trend(spec)Java script.trend(spec)
Java script.trend(spec)
 
PHP WTF
PHP WTFPHP WTF
PHP WTF
 
Silex al límite
Silex al límiteSilex al límite
Silex al límite
 
Silex. Микрофреймворк для микроприложений
Silex. Микрофреймворк для микроприложенийSilex. Микрофреймворк для микроприложений
Silex. Микрофреймворк для микроприложений
 
Barcamp
BarcampBarcamp
Barcamp
 
The core of javascript
The core of javascriptThe core of javascript
The core of javascript
 
BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!
 
Index2
Index2Index2
Index2
 
The Flavor of TypeScript
The Flavor of TypeScriptThe Flavor of TypeScript
The Flavor of TypeScript
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Menu orastat.c
Menu orastat.cMenu orastat.c
Menu orastat.c
 
Jslunch1
Jslunch1Jslunch1
Jslunch1
 
変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco
 
Introduction to Service Worker
Introduction to Service WorkerIntroduction to Service Worker
Introduction to Service Worker
 
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговлеТененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
 
Underscore.js
Underscore.jsUnderscore.js
Underscore.js
 

Viewers also liked

[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법Amy Kim
 
xecon-phpfest2014composer
xecon-phpfest2014composerxecon-phpfest2014composer
xecon-phpfest2014composerjhyeon1010
 
Userful 제품안내(다담데이타)
Userful 제품안내(다담데이타)Userful 제품안내(다담데이타)
Userful 제품안내(다담데이타)Minsik Kim
 
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle엑셈
 
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들XpressEngine
 
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬KTH, 케이티하이텔
 
Mysql old password 깨기
Mysql old password 깨기Mysql old password 깨기
Mysql old password 깨기HyunSeung Kim
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정Yoonwhan Lee
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTYoung D
 
programming with GDB
programming with GDBprogramming with GDB
programming with GDBNakCheon Jung
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4ukjinkwoun
 
게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링Seungmo Koo
 
NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개 NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개 Seungmo Koo
 
Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3성일 한
 
MySQL delete.update
MySQL delete.updateMySQL delete.update
MySQL delete.updateHoyoung Jung
 
Vim for php
Vim for phpVim for php
Vim for phpSol Kim
 

Viewers also liked (20)

[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법
 
xecon-phpfest2014composer
xecon-phpfest2014composerxecon-phpfest2014composer
xecon-phpfest2014composer
 
Userful 제품안내(다담데이타)
Userful 제품안내(다담데이타)Userful 제품안내(다담데이타)
Userful 제품안내(다담데이타)
 
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
 
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
 
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
 
Mysql old password 깨기
Mysql old password 깨기Mysql old password 깨기
Mysql old password 깨기
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
 
Exception&log
Exception&logException&log
Exception&log
 
programming with GDB
programming with GDBprogramming with GDB
programming with GDB
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4
 
게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링
 
NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개 NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개
 
Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3
 
MySQL delete.update
MySQL delete.updateMySQL delete.update
MySQL delete.update
 
Log4j 사용법
Log4j 사용법Log4j 사용법
Log4j 사용법
 
Vim for php
Vim for phpVim for php
Vim for php
 

PHP Profiling