๋ฐ์ดํฐ ๊ณต๊ธ์๋ ์ ์ setupBeforeClass
๊ฐ ์คํ๋๊ธฐ ์ ์ ํธ์ถ๋ฉ๋๋ค. ๋ฐ๋์ ๊ฒฝ์ฐ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
์ฌ์ฉ ์ฌ๋ก:
setupBeforeClass
์์ ์ ์ ์์ฑ์ ์ด๊ธฐํํ๊ณ ๊ณต๊ธ์๊ฐ ํด๋น ์์ฑ์ ๋ฐํํ๋๋ก ํ๋ ๊ฒ์
๋๋ค.๋ฌธ์ ๋ ๊ณต๊ธ์๊ฐ ํธ์ถ๋ ๋ ์์ฑ์ด ์ด๊ธฐํ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
๋ฐ๊ฒฌ๋ ๋ฒ์ : 3.7.14
์ ์ ๋ฆฌ์์ค๊ฐ setupBeforeClass
์์ ์ด๊ธฐํ๋ ์ ์๋๋ก ๋ช ๊ฐ์ง ์์๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ๋ฐ์ดํฐ ๊ณต๊ธ์๊ฐ ์ ์ ์ด๊ฑฐ๋ ๋์ผํ ํ
์คํธ ํด๋์ค์ ์์ ํ์๊ฐ ์๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ ๋ง ์๋ฏธ๊ฐ ์๋์ง ํ์ ํ ์ ์์ต๋๋ค.
์ด๋ํฐ๋ฅผ ์ง์ฐ ์ด๊ธฐํํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๊ทธ๋ฌ๋ฉด ์์๋ ์ ํ ์ค์ํ์ง ์์ต๋๋ค.
๋ฐ์ดํฐ ๊ณต๊ธ์๋ฅผ ์คํํ์ง ์์ผ๋ฉด ํ
์คํธ ๋ฉ์๋๊ฐ ์คํ๋๋ ํ
์คํธ ์๋ฅผ ์ ์ ์์ต๋๋ค. ์๋ฒฝํ ์ธ์์์ ์ฐ๋ฆฌ๋ B/C๋ฅผ ๊นจ๊ณ ๋ฐ์ดํฐ ์ ๊ณต์๊ฐ Countable
๋ฅผ ํ์ฅํ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๊ฐ ๋๋๋ก ์๊ตฌํ ๊ฒ์
๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ถ๋ฆฌํ๊ณ ํจ์ฌ ๊นจ๋ํ ์ํฉ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๊ฒ์ @whatthejeff ๋ฌด์์ ์ฐ๋ฆฌ๋ ์ผ์ ๋๋ธ๋ค. ๊ทธ๋ฌ๋ ๊ณต๊ธ์์์ ๋ฐํ๋ ๋ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฐฐ์ด๋ก ๋ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์์ฑ์์์ ์ด๊ธฐํํ๋ ๊ฒ์ด ์กฐ๊ธ ๋ ๊น๋ํ ์ ์์ต๋๋ค.
@sebastianbergmann ok ๊ทธ๋ค์ด ์ ์ ์ ํธ์ถ๋์๋์ง ์ดํดํฉ๋๋ค. ๋ฌธ์์์ ์ธ๊ธํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? (๋น์ ์ด ๊ด์ฐฎ๋ค๋ฉด ๋ณ๊ฒฝ๋๋ PR์ ์ด ์ ์์ต๋๋ค). ๋๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ ๊ฒ์ด ๋ง์ ๋์์ด ๋ ๊ฒ์ธ์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค. ์ ์ ์ฌ๋์ ๋ณด๋ฉด ํ ๊ณต๊ธ์์์ ๋ค๋ฅธ ๊ณต๊ธ์๋ก์ ์ข ์์ฑ์ด ์์ต๋๋ค.
๋ต์ฅ์ ๋ณด๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ฌธ์ ๋ฅผ ์ข ๋ฃํฉ๋๋ค.
@vicb , ์ด์ ๋ํ ๋ฌธ์ ๊ด๋ จ PR์ ๊ธฐ๊บผ์ด ๋ณํฉํ๊ฒ ์ต๋๋ค.
์ฅ๋ฉด์ ์ฝ๊ฐ ๋ฆ์ ์ ์์ง๋ง ์ด๊ธฐํํด์ผ ํ๋ ์ข
์์ฑ์ด ์์ ๋ ์ํํ๋ ์ผ์ @dataProvider
์ฃผ์์ ๋ฒ๋ฆฌ๊ณ ๋์ yield
์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
@srosato ๋๋ ๋ฐ๋ณด์ ๋๋ค (๋๋ yield๋ฅผ ์ฌ์ฉํ์ง ์์์ต๋๋ค). ์ด ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋จํ ์๋ฅผ ๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น? ์ฌ๊ธฐ์ ์๋ ์๊ฐ ์ ์ ํ์ง ์์ ๊ฒฝ์ฐ https://gist.github.com์ ํตํด.
@dataProvider
์ ์ค์ ์ฝ๋๊ฐ ํ์ํ๊ณ ๊ทธ๋ค์ง ํฌ์ง ์์ ๊ฒฝ์ฐ ํ
์คํธ์์ ๋ฌธ์์ด๋ก ์ง์ ํ๊ณ eval
ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
public function myProvider() {
return [
'new Klass("param 1", "param 2")',
'new Klass("param 1", "param 2")',
];
}
/**
* <strong i="8">@dataProvider</strong> myProvider
*/
public testMyFunction($instance_str) {
$klass = eval("return {$instance_str};");
# continue testing $klass ...
}
๋ด ๋ ์ผํธ:
์ ์ ์์ฑ(๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ณ ์์)์ ์์กดํ๋ ๋ฐ์ดํฐ ๊ณต๊ธ์ ๋์ ์ setUp()
๋ฉ์๋์์ ํ
์คํธ ํด๋์ค์ ํด๋์ค ๋ฉค๋ฒ๋ก ํ์ํ ๋ฐ์ดํฐ/๊ฐ์ฒด๋ฅผ ์ค์ ํ๊ณ ์์ต๋๋ค.
tearDown()
์์ null๋ก ์ค์ ํ๊ฑฐ๋ ๋ณต์กํ ๊ฐ์ฒด๊ฐ ์์ ๋ clear()
๋ฉ์๋๋ฅผ ๊ตฌํํฉ๋๋ค.
ํ
์คํธ ํด๋์ค ์ ์ฒด์ ์ข
์์ฑ์ด ๋๋ฌด ๋ง์ง ์์ ํ ์ด ์ ๊ทผ ๋ฐฉ์์ด ํธ์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๋ฌํ ์ข
์์ฑ์ด ํ๋ ๋๋ ๋ ๊ฐ ์ด์ ์๋ ๊ฒฝ์ฐ ์ ์ฒด ๋์์ธ์ ์ง๋์น๊ฒ ์๊ฐํด์ผ ํ ์๋ ์์ต๋๋ค.
ํนํ, DB ์ฐ๊ฒฐ์ setUpBeforeClass()
์ค์ ๋ ์ ์ ์์ฑ์ผ๋ก ์ฌ์ฉํ๊ณ $queryBuilder
์ ํด๋์ค ๋ฉค๋ฒ๋ก ์ฐ๊ฒฐ์ ์ฃผ์
ํ๋ setUp()
(๋์ ๋ฐ์ดํฐ ๊ณต๊ธ์์์ ๋ฐํ).
ํด๊ฒฐ์ฑ
์ ์๋ก์ด ๊ฐ์ธ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ๊ทธ ์์ static
๋งํผ ๋ง์ ๋ณ์๋ฅผ ์ ์ํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ทธ ์ค ํ๋๊ฐ ์ค์ ๋์ด ์๋์ง ํ์ธํ๊ณ , ์ค์ ๋์ด ์์ง ์์ผ๋ฉด ๋ชจ๋ ์ค์ ํ๊ณ ๋ฐํ(๋๋ ์๋ณด)ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด _๋ณ์๋ ํ ๋ฒ๋ง ์ ์ธ๋ฉ๋๋ค_. ์ ๊ณต์๊ฐ 10๊ฐ์ด๋ ๋ญ๋ ์๊ด์์ต๋๋ค. ๊ฒ๋ค๊ฐ setUpBeforeClass()
๋๋ setUp()
์์ต๋๋ค.
์์์ ๊ทธ๊ฒ์ ๋ณด์ญ์์ค:
private static function getData()
{
static $data, $anotherData;
if (!isset($data)) {
$data = new TestClass();
$anotherData = [];
}
return [
$data,
// Or: clone $data
$anotherData,
];
}
public static function setUpBeforeClass()
{
list(self::$sampleJson, self::$sampleData) = self::getData();
}
public function sampleProvider()
{
$data = self::getData();
return [
$data
];
}
@MAChitgarha ์ด์ ๊ทํ์ ์๊ฒฌ ๋๋ถ์ ์ด ํฐ์ผ์ ๋ํด ์๊ฒ ๋์์ต๋๋ค. :)
์ ๋ #3736์ ๋ฐ์ดํฐ ๊ณต๊ธ์ ๋ก์ง์ ๋ฆฌํฉํ ๋งํ์ฌ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
setUpBeforeClass
๋ฐ setUp
์ดํ์ ์คํํ ์ ์์ต๋๋ค.@epdenouden ๋ฐ๊ฐ์ต๋๋ค ! ;) ๋ชฉ๋ก์ ๋ ๋ฒ์งธ ํญ๋ชฉ์ ์ข์ ํญ๋ชฉ์ ๋๋ค. ๊ทธ๊ฒ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
๋น์ ์ ๋ฐ์ดํฐ ์ ๊ณต์๊ฐ ๊ฐ๋ฅํด์ง
ํ์ฌ ๊ฐ๋ฅํ์ง ์์ต๋๊น? ์ ๋ ํญ์ ์ ์ ๋ฐ์ดํฐ ๋์ ๋น์ ์ ๋ฐ์ดํฐ ๊ณต๊ธ์๋ฅผ ํ ์คํธ์ ์ฌ์ฉํ๋ฉฐ ๋ฌธ์ ์์ด ์์๋๋ก ์๋ํฉ๋๋ค(PHPUnit 7.5.6 ์ฌ์ฉ). ๋ด๊ฐ ์๋ชป?
ํ์ฌ ๊ฐ๋ฅํ์ง ์์ต๋๊น? ์ ๋ ํญ์ ์ ์ ๋ฐ์ดํฐ ๋์ ๋น์ ์ ๋ฐ์ดํฐ ๊ณต๊ธ์๋ฅผ ํ ์คํธ์ ์ฌ์ฉํ๋ฉฐ ๋ฌธ์ ์์ด ์์๋๋ก ์๋ํฉ๋๋ค(PHPUnit 7.5.6 ์ฌ์ฉ). ๋ด๊ฐ ์๋ชป?
์๋, ๋น์ ์ด ๋ง์ต๋๋ค! ์ ํํ์ด ์ ํํ์ง ์์์ต๋๋ค. ์๋ ค์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ํ์ฌ ์ฝ๊ณ ์๋ ๋ฐ์ดํฐ ๊ณต๊ธ์ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์์ธํ ์ดํด๋ณด์ญ์์ค.
private static function getDataFromDataProviderAnnotation($allTheParameters): ?iterable
// code for locating the data provider
// [...]
if ($dataProviderMethod->isStatic()) {
$object = null;
} else {
$object = $dataProviderClass->newInstance();
}
// code for preparing returned data rows
// [...]
}
์ฌ๊ธฐ์ ๋๋ฌ์ด ์์ ๋น๋ฐ์ด ์์ต๋๋ค.
instanceof
์์ ํธ์ถ๋์ง๋ง...๋ฐ์ดํฐ ์ ๊ณต์ ๋ฆฌํฉํ ๋ง๊ณผ ๊ด๋ จํ์ฌ ์๊ฐํ๊ณ ํ์ธํ ์ ์๋ ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ฃผ์ จ์ต๋๋ค! ๊ฐ์ฒด ์ธ์คํด์ค๊ฐ ๋์ผํ ์ ํ์ด๋ ๋ณต์ ๋ณธ์ด ์๋๋ผ ์์๋๋ ๊ฐ์ฒด์ธ์ง ํ์ธํ๊ธฐ ์ํด ์ถ๊ฐ ํ ์คํธ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค. โ๏ธ ๊ทธ๋ฆฌ๊ณ ๐ฐ ๋น์ ์ด ์์คํ ๋ฅด๋ด์ ์์ ๋ ๋์๊ฒ.
@MAChitgarha ์ธ์คํด์ค๊ฐ ์ค์ ๋ก ๋ค๋ฆ ๋๋ค. https://github.com/epdenouden/phpunit/blob/4718e0bb470170b2da46bf0e05b7275110a2a29d/tests/_files/DataProviderInstanceTest.php#L14 -L27
@epdenouden ๊ทธ๋ฌ๋ ๋๋ ์ด๋ค ์คํจ๋ ์ป์ง ์์ต๋๋ค! PHPUnit 7.5.13์์ ์ด์ค์ ์ ์ค๋ฅ๋ฅผ ์์ฑํ์ง ์์ต๋๋ค. ์ด ์ค๋ฅ๋ ์ด๋ป๊ฒ ๋ฐ์ํฉ๋๊น? ์ด์ ๋ฒ์ ๊ณผ์ ๋นํธํ์ฑ์ ์๋ฏธํฉ๋๊น?
์ด๊ฒ์ 8.2๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ค์ธ ์ง์ฐ ๋ก๋ฉ ๋ฐ์ดํฐ ๊ณต๊ธ์ ๋ถ๊ธฐ์ ์์ต๋๋ค. ๋ค์์ 7.5.x๋ฅผ ํ์ธํ๊ฒ ์ต๋๋ค. ๋ฏธ๋ฆฌ ์๋ ค์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ด๊ฒ์ด ์๋ํ๋ค๋ฉด ๋น์ ์ ๊ณต๊ธ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋๋ก ๋ช ์์ ์ผ๋ก ์์ฒญํ๋ ๋ค๋ฅธ ์ด์ ๋ฌธ์ ๋ก ๋์๊ฐ์ ์ ํํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ค์ ์ดํด๋ด์ผ ํฉ๋๋ค.
์ด์จ๋ : ๊ทํ์ ์๊ฒฌ์ ์ด๋ฏธ ๋งค์ฐ ์ ์ฉํ ํ ์คํธ์ ์๊ฐ์ ์ฃผ์์ต๋๋ค. :)
๊ทธ๋ฆฌ๊ณ @MAChitgarha ์, BC ํด์์ด ๋ ๊ฒ์ ๋๋ค.
@epdenouden ๊ธฐ๋ค๋ฆฌ๊ฒ ์ต๋๋ค. ์ด๋ค ์ด์ ๋ก ๋ด ํ๋ก์ ํธ์์ PHPUnit 7.5.13์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ์ง๋ง ๊ณง 8.2.*๋ก ์ ๋ฐ์ดํธํ ์์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ข์ ์์์ BC-break๊ฐ ์์ ๋ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. PHPUnit ์์ฒด์ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ์ ๋ฌด์์ ๋ณ๊ฒฝํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์์ ์ ๊ฐ๋ฅํ์ง ์์๊น ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ชจ๋ ๋น์ ์๊ฒ ๋ฌ๋ ค ์์ต๋๋ค! :)
๊ทธ๋ฆฌ๊ณ ์ข์ ์์์ BC-break๊ฐ ์์ ๋ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. PHPUnit ์์ฒด์ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ์ ๋ฌด์์ ๋ณ๊ฒฝํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์์ ์ ๊ฐ๋ฅํ์ง ์์๊น ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ชจ๋ ๋น์ ์๊ฒ ๋ฌ๋ ค ์์ต๋๋ค! :)
์์ฃผ ์ข์ ์ด์ ์์ด ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ์ค๋จ์ ๋์ ํ๋ ๊ฒ์ @sebastianbergmann ์ด ํ์ฉํ๋ ๊ฒ์ด
์, ํ ์คํธ์ ์ต์ข ์ฌ์ฉ์/๊ฐ๋ฐ์๋ก์ ๋ณด๊ณ ์ถ์ ๊ฒ์ด ๋ฌด์์ธ์ง ์๋ ค์ฃผ์ญ์์ค. ์ด๋ฌํ ํ๋ก์ ํธ์๋ ์์ ๋ด์ฌ์ ๊ฐ๋ฐ์๊ฐ ๋ง์ง ์๋ค๋ ์ ์ ์ผ๋์ ๋์ญ์์ค.
์ฌ๋ฏธ์๋ ์ฌ์ค: ์์ ํ ์คํธ๋ ์ค์ ๋ก ๋ฒ์ 7.x์ 8.x์์ ๋ชจ๋ ์๋ํ๋ฉฐ JIT ํ๋กํ ํ์ ์์๋ ์คํจํฉ๋๋ค.
๋ด๊ฐ ์์ ํ๊ณ ์๋ ์ฝ๋๋ ์ฌ์ ํ ์๋ ์ฝ๋ ํ๋ฆ๊ณผ ํจ์ฌ ๋น์ทํฉ๋๋ค. ๊ทธ๋์ ๊ทธ๊ฒ์ ๋ฒ๊ทธ์ ๊ฒฐ๊ณผ์ผ ์๋ ์๊ณ , ์ฌ์ ํ ๋ ๋ฆฌํฉํ ๋งํด์ผ ํ๋ ์ผ๋ถ ๋ ผ๋ฆฌ์ผ ์๋ ์๊ณ , PHP์ ๊ฐ์ฒด ๋ฐ ๋ฆฌํ๋ ์ ์ ๋ํด ๋ฎ์ ์์ค์ ๊ฒ, ์กฐํํด์ผ ํ๋ ๊ฒ ๋๋ ๋ด ๋ถ๋ถ์ ๋ํ ์์งํ ํ ์คํธ์ผ ์๋ ์์ต๋๋ค. ๐ฌ
@epdenouden JIT? PHP์ฉ JIT๋ก ํ ์คํธ ์ค์ ๋๊น, ์๋๋ฉด ์ ๊ฐ ๋ชจ๋ฅด๋ ๊ฒ์ด ์์ต๋๊น? ์ฃ์กํฉ๋๋ค. ์ฝ๊ฐ ํผ๋์ค๋ฝ์ต๋๋ค. PHP7.x ๋ฐ PHP8.x ๋๋ PHPUnit7.x ๋ฐ PHPUnit8.x์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น?!
@epdenouden JIT? PHP์ฉ JIT๋ก ํ ์คํธ ์ค์ ๋๊น, ์๋๋ฉด ์ ๊ฐ ๋ชจ๋ฅด๋ ๊ฒ์ด ์์ต๋๊น? ์ฃ์กํฉ๋๋ค. ์ฝ๊ฐ ํผ๋์ค๋ฝ์ต๋๋ค. PHP7.x ๋ฐ PHP8.x ๋๋ PHPUnit7.x ๋ฐ PHPUnit8.x์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น?!
@MAChitgarha PHP8์ด Just-In-Time _compiler_๋ฅผ ์ป๊ณ ์์ผ๋ฏ๋ก ํผ๋์ ์ดํดํฉ๋๋ค. ๋๋ ๋์ผํ ์์ด๋์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์๋ก์ด ๋ฐ์ดํฐ ์ ๊ณต์ ๊ตฌํ ์ด๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. Just-in-time _loader_(์ผ๋ช ์ง์ฐ ๋ก๋ฉ). ํ์ํ ๋ ํ์ํ ๊ฒ๋ง ์ด๊ธฐํํ์ญ์์ค.
์ด๊ฒ์ PHP ์ธ์ด ์์ฒด์ ๊น๋ค๋ก์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ณง ์ถ์๋ PHP ๋ฒ์ 8 JIT์์ ์ ์๋ํฉ๋๋ค. ๋ด ๋ชจ๋ ์์ ์ ๊ตฌ์ฑ ๊ตฌ๋ฌธ ๋ถ์, ํ ์คํธ ๋ก๋ ๋ฐ ์คํ ๋ฑ๊ณผ ๊ฐ์ ์์ ์ ๋ค์ ์ํํ๋ PHPUnit ๋ด๋ถ ๊น์์ด ์์ต๋๋ค.
๋ด๊ฐ ์๋ฌด ๊ฒ๋ ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉด ์ ๋๋ก ํ๊ณ ์๋ ๊ฒ์ ๋๋ค. ๋ฎ์์ง GCP ๋๋ AWS ์ธ๋ณด์ด์ค๋ฅผ ์ ์ธํ๊ณ . ๐ธ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@MAChitgarha PHP8์ด Just-In-Time _compiler_๋ฅผ ์ป๊ณ ์์ผ๋ฏ๋ก ํผ๋์ ์ดํดํฉ๋๋ค. ๋๋ ๋์ผํ ์์ด๋์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์๋ก์ด ๋ฐ์ดํฐ ์ ๊ณต์ ๊ตฌํ ์ด๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. Just-in-time _loader_(์ผ๋ช ์ง์ฐ ๋ก๋ฉ). ํ์ํ ๋ ํ์ํ ๊ฒ๋ง ์ด๊ธฐํํ์ญ์์ค.
์ด๊ฒ์ PHP ์ธ์ด ์์ฒด์ ๊น๋ค๋ก์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ณง ์ถ์๋ PHP ๋ฒ์ 8 JIT์์ ์ ์๋ํฉ๋๋ค. ๋ด ๋ชจ๋ ์์ ์ ๊ตฌ์ฑ ๊ตฌ๋ฌธ ๋ถ์, ํ ์คํธ ๋ก๋ ๋ฐ ์คํ ๋ฑ๊ณผ ๊ฐ์ ์์ ์ ๋ค์ ์ํํ๋ PHPUnit ๋ด๋ถ ๊น์์ด ์์ต๋๋ค.
๋ด๊ฐ ์๋ฌด ๊ฒ๋ ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉด ์ ๋๋ก ํ๊ณ ์๋ ๊ฒ์ ๋๋ค. ๋ฎ์์ง GCP ๋๋ AWS ์ธ๋ณด์ด์ค๋ฅผ ์ ์ธํ๊ณ . ๐ธ