216.73.216.217 TODAY : 4,545

PHP ์˜จ๋ผ์ธ ๊ฐ•์˜

 > 

PHP - ๊ณ ๊ธ‰

๐Ÿ“š PHP ๊ณ ๊ธ‰ - 7์ฃผ์ฐจ: ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋””๋ฒ„๊น… - 02 ์ฝ”๋“œ ํ”„๋กœํŒŒ์ผ๋ง (Xdebug)

๐Ÿ“š PHP ๊ณ ๊ธ‰ - 7์ฃผ์ฐจ: ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋””๋ฒ„๊น… - 02 ์ฝ”๋“œ ํ”„๋กœํŒŒ์ผ๋ง (Xdebug)
ํ‰์  10.0 ๋ผ์ด์„ผ์Šค free
์‚ฌ์šฉ์žํ‰์  10.0 ์šด์˜์ฒด์ œ
๋‹ค์šด๋กœ๋“œ 1 ํŒŒ์ผํฌ๊ธฐ 0
์ œ์ž‘์‚ฌ LUZENSOFT ๋“ฑ๋ก์ผ 2025-09-22 17:03:33
์กฐํšŒ์ˆ˜ 16
- ์„ค๋ช…

์ฝ”๋“œ ํ”„๋กœํŒŒ์ผ๋ง์˜ ์ค‘์š”์„ฑ

uploadImage

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ์ผ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ง€์ ์„ ์ •ํ™•ํžˆ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ '๋А๋ฆฌ๋‹ค'๊ณ ๋งŒ ์ƒ๊ฐํ•˜๊ณ  ์ง์ž‘์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์˜คํžˆ๋ ค ๋” ํฐ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ #์ฝ”๋“œ_ํ”„๋กœํŒŒ์ผ๋ง(Code Profiling)์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ํ”„๋กœํŒŒ์ผ๋ง์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•˜์—ฌ ์–ด๋–ค ํ•จ์ˆ˜๋‚˜ ์ฝ”๋“œ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ #์‹œ๊ฐ„ ๊ณผ #๋ฉ”๋ชจ๋ฆฌ ๋ฅผ ์†Œ๋น„ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. โฑ๏ธ



Xdebug๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

uploadImage

#Xdebug ๋Š” PHP์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ #๋””๋ฒ„๊น… ๋ฐ #ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Xdebug๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ์‹คํ–‰ ํ๋ฆ„์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋“ฑ ๋‹ค์–‘ํ•œ ์„ฑ๋Šฅ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณ‘๋ชฉ ์ง€์ (bottleneck)์„ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ”



Xdebug ํ”„๋กœํŒŒ์ผ๋ง ์„ค์ • ๋ฐ ์‚ฌ์šฉ๋ฒ•


Xdebug๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ ํ”„๋กœํŒŒ์ผ๋ง์€ ํฌ๊ฒŒ ์„ธ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.


1. Xdebug ์„ค์น˜ ๋ฐ ์„ค์ •


php.ini ํŒŒ์ผ์—์„œ Xdebug๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ํ”„๋กœํŒŒ์ผ๋ง ์˜ต์…˜์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Ini, TOML

[Xdebug]
zend_extension="c:phpextphp_xdebug.dll" ; ์œˆ๋„์šฐ ๊ฒฝ๋กœ ์˜ˆ์‹œ
xdebug.mode = profile
xdebug.start_with_request = yes
xdebug.output_dir = "C:xampptmpxdebug" ; ํ”„๋กœํŒŒ์ผ๋ง ํŒŒ์ผ์ด ์ €์žฅ๋  ๊ฒฝ๋กœ

  • xdebug.mode = profile: Xdebug์˜ ๋ชจ๋“œ๋ฅผ ํ”„๋กœํŒŒ์ผ๋ง์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • xdebug.start_with_request = yes: ๋ชจ๋“  HTTP ์š”์ฒญ์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ํ”„๋กœํŒŒ์ผ๋ง์„ ์‹œ์ž‘ํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • xdebug.output_dir: ํ”„๋กœํŒŒ์ผ๋ง ๊ฒฐ๊ณผ ํŒŒ์ผ(.cachegrind)์ด ์ €์žฅ๋  ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.


2. ์ฝ”๋“œ ์‹คํ–‰ ๋ฐ ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ์ดํ„ฐ ์ƒ์„ฑ


์„ค์ • ์™„๋ฃŒ ํ›„ ์›น ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ณ , ํ”„๋กœํŒŒ์ผ๋งํ•  PHP ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ๋๋‚˜๋ฉด xdebug.output_dir์— .cachegrind ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—๋Š” ํ•จ์ˆ˜๋ณ„ ํ˜ธ์ถœ ํšŸ์ˆ˜, ์‹คํ–‰ ์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋“ฑ์˜ ์ƒ์„ธ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


3. ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ์ดํ„ฐ ๋ถ„์„

uploadImage

์ƒ์„ฑ๋œ .cachegrind ํŒŒ์ผ์€ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋กœ ์—ด์–ด๋ณด๊ธฐ์—๋Š” ๋‚ด์šฉ์ด ๋„ˆ๋ฌด ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ „๋ฌธ์ ์ธ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ๋Š” #KCachegrind (๋ฆฌ๋ˆ…์Šค) ๋˜๋Š” #qcachegrind (์œˆ๋„์šฐ, macOS)์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • #ํ•จ์ˆ˜_ํ˜ธ์ถœ_ํŠธ๋ฆฌ: ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ๋Š”์ง€ ๊ณ„์ธต์ ์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • #์‹คํ–‰_์‹œ๊ฐ„: ๊ฐ ํ•จ์ˆ˜๊ฐ€ ์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ–ˆ๋Š”์ง€ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • #์ž์ฒด_์‹œ๊ฐ„ (Self Time): ํ•จ์ˆ˜ ๋‚ด๋ถ€ ์ฝ”๋“œ ์ž์ฒด์˜ ์‹คํ–‰ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

  • #ํฌํ•จ_์‹œ๊ฐ„ (Inclusive Time): ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœํ•œ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์‹œ๊ฐ„๊นŒ์ง€ ๋ชจ๋‘ ํฌํ•จํ•œ ์ด ์‹คํ–‰ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

์ด ์ •๋ณด๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๊ธด ํ•จ์ˆ˜๋ฅผ ์ฐพ์•„๋‚ด๊ณ , ํ•ด๋‹น ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ๋ฌธ์ œ ์ฝ”๋“œ๋ฅผ ์ง‘์ค‘์ ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



์‹ค์ œ ์˜ˆ์‹œ: ๋А๋ฆฐ ์ฝ”๋“œ ๋ถ„์„ํ•˜๊ธฐ


๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜๋„์ ์œผ๋กœ ๋А๋ฆฌ๊ฒŒ ์ž‘๋™ํ•˜๋Š” PHP ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.

PHP

<?php
function slow_operation_A() {
    usleep(500000); // 0.5์ดˆ ์ง€์—ฐ
}

function slow_operation_B() {
    for ($i = 0; $i < 100000; $i++) {
        // ๋ณต์žกํ•œ ๊ณ„์‚ฐ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
    }
}

function main_function() {
    slow_operation_A();
    slow_operation_B();
    slow_operation_B();
}

main_function();
?>

์ด ์ฝ”๋“œ๋ฅผ Xdebug๋กœ ํ”„๋กœํŒŒ์ผ๋งํ•˜๊ณ  qcachegrind๋กœ ๋ถ„์„ํ•˜๋ฉด, slow_operation_B๊ฐ€ slow_operation_A๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ–ˆ์Œ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” slow_operation_B ํ•จ์ˆ˜์˜ ๋กœ์ง์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๋งˆ์น˜๋ฉฐ


#์„ฑ๋Šฅ_๋ณ‘๋ชฉ_ํ˜„์ƒ ์„ ํ•ด๊ฒฐํ•˜๋Š” ์ฒซ๊ฑธ์Œ์€ ์ •ํ™•ํ•œ ์ง„๋‹จ์ž…๋‹ˆ๋‹ค. Xdebug๋ฅผ ํ™œ์šฉํ•œ ์ฝ”๋“œ ํ”„๋กœํŒŒ์ผ๋ง์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๊ณผํ•™์ ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ , #์ตœ์ ํ™” ์˜ ๋ฐฉํ–ฅ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ œ์‹œํ•ด ์ค๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ๋””๋ฒ„๊น…์„ ๋„˜์–ด, ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜์ ์ธ ๊ธฐ์ˆ ์ด๋‹ˆ ๊ผญ ์ตํ˜€๋‘์„ธ์š”. โœจ



์†๋„, ์•ˆ์ •์„ฑ ํ™•์‹ค. ๋Š๊น€์—†์ด ๋น ๋ฅธ VPN. ๊ณ ํ’ˆ์งˆ ๋ธŒ์ดํ”ผ์—” ๋ฌด๋ฃŒ์ฒดํ—˜!

https://vpn.luzensoft.com