์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
PHP - Hypertext Preprocessor | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
์ต์ด ๊ฐ๋ฐ์ | Rasmus Lerdorf | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
์ด์ ๋ฐ ๊ฐ๋ฐ | The PHP Group | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
๊ณต์ ์ฌ์ดํธ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
๋ผ์ด์ ์ค | PHP License | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
์ฒ์ ๋ฒ์ |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
์ต์ ๋ฒ์ |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1. ๊ฐ์[ํธ์ง]
<?php
echo "Hello, World!";
?>๋ํ์ ์ธ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ์ธ์ด๋ก ์ ์ธ๊ณ ์๋ง์ ์น ์์คํ
์ ๊ธฐ๋ฐ์ด ๋๋ ์ธ์ด. ๋น์ทํ ์ธ์ด๋ก๋ ASP, JSP ๋ฑ์ด ์๋ค. C-like ๋ฌธ๋ฒ[1]์ ์ฌ์ฉํ์ฌ, ์๊ท๋ชจ ์น ํ์ด์ง ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์น๊ด๋ จ ํจ์๋ค์ด ๋ง์ ์์ฐ์ฑ์ด ๋๋ค๋ ์ ์์ ์ฌ์ฉ์, ์ฌ์ฉ์ฒ๊ฐ ๋ง๋ค. 1995๋
๋ผ์ค๋ฌด์ค ๋ฌ๋ํ๊ฐ ์ฒ์ ๊ณต๊ฐํ๊ณ , ์ง๊ธ์ The PHP Group ์ด๋ผ๋ ๋จ์ฒด์์ ๊ฐ๋ฐ ๋ฐ ๊ด๋ฆฌ๋ฅผ ๋งก๊ณ ์๋ค.PHP๋ผ๋ ์ด๋ฆ์ ์๋ Personal Home Page Tools์๋๋ฐ, ์ง๊ธ์ PHP - Hypertext Preprocessor์ ์ฌ๊ท ์ฝ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
์๋ํ๋ ์ค, ๋ฏธ๋์ด์ํค ๋ฑ์ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ด PHP๋ก ์ง์ฌ ์๋ค. ์์ธ๋ก ์น์ํ์ ํด๋ณด๋ฉด ์ฐ์ด๋ ๊ณณ์ด ๋ง๋ค. ์ฐ๋ฆฌ๋๋ผ ํ์ ์ผ๋ก ๋์ ์ ์ ์จ์ ์ฐจ์งํ XpressEngine๊ณผ ๋ผ์ด๋ฏน์ค, ์์นดํธ๋ PHP๋ก ์ ์๋๋ค.
์ฐ๋ฆฌ๋๋ผ ์ค์ ์ผํ๋ชฐ๊ณผ ์ธํฐ๋ท ์ปค๋ฎค๋ํฐ, ์ง์ญ์ธ๋ก ์ฌ ๋ฑ ๋๋ค์๊ฐ PHP ๊ฑฐ๋ PHP ๊ธฐ๋ฐ CMS๋ก ์ ์๋์ด ์๋ค.
2. ํน์ง[ํธ์ง]
PHP๋ ์คํ ์์ค์ธ๋ฐ ํฌํ
๋ ๊ณณ์ด ๋ง์ ๊ฑฐ์ ๋ชจ๋ ์น ์๋ฒ์์ ์คํํ ์ ์๋ค. PHP ๊ณต์ ์ฌ์ดํธ์์๋ ์์ค ์ฝ๋๋ฅผ ๊ณต๊ฐํ๊ณ ์๊ณ , ๋ฆฌ๋
์ค ๋ฑ์ ์ ๋์ค ๊ณ์ด OS์์ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๊ณ ์๋ค. ๊ทธ๋ฌ๋ ๋๋ค์์ ๊ฒฝ์ฐ ์ง์ ์ปดํ์ผ์ ํ ํ์๋ ์๋๋ฐ, ์ ๋ช
๋ฆฌ๋
์ค ๋ฐฐํฌ๋ณธ์ ๊ณต์ ์ ์ฅ์์๋ PHP ์ค์น ํจํค์ง๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ์๋ค๋ฉด Packagist ๊ฐ์ ํจํค์ง ์ ์ฅ์(repository)์์ ๊ฐ OS์ ํ๊ฒฝ์ ๋ง๋ PHP ์ค์น ํจํค์ง๋ฅผ ์ฐพ์ ์ ์๋ค. ๋ณ๋์ ์ ์ฅ์๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฒ์ ๋ ์
๋ง๋๋ก ์ค์นํ ์ ์๋ค. ์๋์ฐ์ฉ์ PHP ๊ณต์ ์ฌ์ดํธ์์ ์ง์ ์คํ ํ์ผ๋ก ๋ง๋ค์ด์ ์ ๊ณตํ๋ค. PHP5.5 ๋ฒ์ ๋ถํฐ๋ 64๋นํธ ๋ฒ์ ๋ ๋์ค๊ณ ์๋ค. ์๋์ฐ์ฉ์ ๊ฒฝ์ฐ ๋์ ๋ฐฉ์์ ์ฐจ์ด ๋๋ฌธ์ IIS ๋ฐ NGINX์์ ๋๋ฆฌ๋ PHP๋ Non-Thread Safe ๋ฒ์ ์ผ๋ก, ์ํ์น์์ ๋๋ฆฌ๋ PHP๋ Thread-Safe ๋ฒ์ ์ผ๋ก ๋ฐ๋ก ๋์จ๋ค.
PHP๋ Perl์ธ์ด์ ์ํฅ์ ๋ฐ์ ๋ณ์ ์ด๋ฆ ์์ $๋ฅผ ๋ถ์ธ๋ค๋ ์ (์: $abc)๊ณผ ๋ฌธ์์ด๋ผ๋ฆฌ ๊ฒฐํฉํ ๋ ๋ง์ ๊ธฐํธ(+)๋ฅผ ์ (.)์ผ๋ก ๋์ ํด์ ์ด๋ค๋ ์ (์: "Hello, " . "world!" = "Hello, world!")์ด๋ค. ํ์์ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํ๋๋๋ก ๋ง์ ๊ธฐํธ(+)์ผ๋ก ๋ฌธ์์ด ๊ฒฐํฉ์ ํด๋ณด๋ ค๊ณ ํ๋ฉด ๋ง์ ๊ธฐํธ ์๋ค์ ์๋ ๋ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํด์ ๊ณ์ฐํด ๋ฒ๋ฆฐ๋ค. (์: "Hello, " + "world!" = 0)[2]
PHP ์ ํฐ ํน์ง ์ค ํ๋๋ ์ํ๊ฐ ์๋ค๋ ์ (Stateless)์ธ๋ฐ, PHP์น ์๋ฒ์ ์์ฒญ์ ํ ๋ ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ก์ธ์๊ฐ ์คํํ ๋ค ๋ฐ๋ก ์ข ๋ฃ๋๊ณ ์๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋กญ๊ฒ ์์๋๋ ๋ฐฉ์์ด๋ค. ๋๋ฌธ์ PHP์์ ์ฑ๊ธํค ํจํด์ ๊ตฌํํ๋ฉด ๊ฐ์ฒด๋ 1ํ ์์ฒญ์ ์ํ ์์ ์ด ๋๋ ๋๊น์ง๋ง ์ ์ง๋๋ค.
๋ค๋ฅธ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก
์์ฃผ ์๋ ์๋ WYSIWYG ๊ธฐ๋ฐ ์๋ํฐ๋ฅผ ์ฌ์ฉํ ๋
PHP๋ Perl์ธ์ด์ ์ํฅ์ ๋ฐ์ ๋ณ์ ์ด๋ฆ ์์ $๋ฅผ ๋ถ์ธ๋ค๋ ์ (์: $abc)๊ณผ ๋ฌธ์์ด๋ผ๋ฆฌ ๊ฒฐํฉํ ๋ ๋ง์ ๊ธฐํธ(+)๋ฅผ ์ (.)์ผ๋ก ๋์ ํด์ ์ด๋ค๋ ์ (์: "Hello, " . "world!" = "Hello, world!")์ด๋ค. ํ์์ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํ๋๋๋ก ๋ง์ ๊ธฐํธ(+)์ผ๋ก ๋ฌธ์์ด ๊ฒฐํฉ์ ํด๋ณด๋ ค๊ณ ํ๋ฉด ๋ง์ ๊ธฐํธ ์๋ค์ ์๋ ๋ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํด์ ๊ณ์ฐํด ๋ฒ๋ฆฐ๋ค. (์: "Hello, " + "world!" = 0)[2]
PHP ์ ํฐ ํน์ง ์ค ํ๋๋ ์ํ๊ฐ ์๋ค๋ ์ (Stateless)์ธ๋ฐ, PHP์น ์๋ฒ์ ์์ฒญ์ ํ ๋ ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ก์ธ์๊ฐ ์คํํ ๋ค ๋ฐ๋ก ์ข ๋ฃ๋๊ณ ์๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋กญ๊ฒ ์์๋๋ ๋ฐฉ์์ด๋ค. ๋๋ฌธ์ PHP์์ ์ฑ๊ธํค ํจํด์ ๊ตฌํํ๋ฉด ๊ฐ์ฒด๋ 1ํ ์์ฒญ์ ์ํ ์์ ์ด ๋๋ ๋๊น์ง๋ง ์ ์ง๋๋ค.
๋ค๋ฅธ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก
<?php ... ?>๋ก ์ด๋ฃจ์ด์ง ์คํฌ๋ฆฝํธ ์คํ ์์ญ์ด ์๋ค. <? ... ?>๋ ๋น๊ถ์ฅ์ด๋ค. ๋ณ์ ํ๋๋ง ์ถ๋ ฅํ ๋์๋ <?=$var?> ๊ฐ์ ํ์์ผ๋ก๋ ์ค์ผ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ์ค์ฌ ์ฐ๋ ๋ฐฉ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊บผ์ ธ ์์ด์ ์ฐ๋ ค๋ฉด php.ini์์ short_open_tags์ ์ค์ ์ on์ผ๋ก ๋ฐ๊ฟ์ค์ผ ํ๋ค. ์ค์ฌ ์ฐ๋ ๋ฐฉ์์ด ๊บผ์ ธ ์๋ ์ด์ ๋ XML์ <? xml version="1.0" ?>๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ๊ณผ ์ถฉ๋ํ๊ธฐ ๋๋ฌธ์ด๋ค. PHP๊ฐ ์ฒ์ ๋์์ ๋๋ HTML๋ง ์์ด์ ์ค์ฌ ์ฐ๋ ๋ฐฉ์์ด ๋ฌธ์ ๊ฐ ์์์ง๋ง, HTML์ XML์ ๋ฌธ๋ฒ์ ๋์
ํ XHTML 1.0์ด ๋์ค๋ฉด์ ์ถฉ๋์ด ์ผ์ด๋ฌ๊ณ ๊ฒฐ๊ตญ ์ ์ต์
์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๊บผ์ ธ ์๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒ. ๋คํํ HTML5์์๋ XML ๋ฌธ๋ฒ์ด ๋น ์ก๋ค. PHP 5.4๋ถํฐ๋ short_open_tags ์ค์ ๊ฐ์ ์๊ด์์ด ํญ์ <?=$var?> ํํ๋ก ์ธ ์ ์๊ฒ ๋์๋ค.์์ฃผ ์๋ ์๋ WYSIWYG ๊ธฐ๋ฐ ์๋ํฐ๋ฅผ ์ฌ์ฉํ ๋
<?php ... ?>๋ก ์ด๋ฃจ์ด์ง ์คํฌ๋ฆฝํธ ์คํ ์์ญ์ ์ฌ๋ฐ๋ฅด์ง ์์ ํ๊ทธ๋ก ์๋ชป ์ธ์ํ๋ ๋ฌธ์ ๋ฅผ ํํผํ๊ธฐ ์ํด <script language="php"> ... </script>[3] ํ๊ทธ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค. ๊ทธ๋ฌ๋ ์ด ํ๊ทธ๋ JavaScript์์ ์ฐ๋ ๊ฒ ์ผ๋ฐ์ ์ด๊ณ ๊ทธ ๋๋ฌธ์ ํผ๋๋๋ค๋ ๋ฌธ์ ๋ก ์ฐ์์ด ์ค์ด๋ค์๊ณ ๋ ๊ฑฐ์ ์์๋ก ๋จ์์๋ค๊ฐ PHP 7๋ถํฐ๋ ์ญ์ ๋์๋ค.2.1. ์ฅ์ [ํธ์ง]
- PHP๋ ์๋ฒ์ ๋ฐฐํฌํ๋๊ฒ ๊ฐํธํ๋ค. PHP ์ธํฐํ๋ฆฌํฐ์์ ์คํํ ๋๋ง๋ค ํ์ผ์ ์ฝ๊ณ ๋ฐ๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ์บ์[4]๋ฅผ ์คํํ๊ณ ๋ฐ๋ ๋ถ๋ถ์ ๋ค์ ํด์ํ ๋ค ์บ์ ํ๋ ๋ฐฉ์์ผ๋ก ์๋ํด์ ์ ๋ก๋๋ง ํ๋ฉด ๋๋ฏ๋ก ์ ๊ฒฝ ์ธ ๊ฒ์ด ์ค์ด๋ ๋ค.
- PHP๋ ๋ฑ์ฅ ๋น์ C์ธ์ด๋ก ์น์๋ฒ๋ฅผ ์์ฑํ๋ CGI์ ๋นํด ๋ฐฐ์ฐ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ฌ์ฉ์๊ฐ ๋ณด๋ HTMLํ์ด์ง์ ํ ํ๋ฆฟ๋ ์ง์๋๋ฉด์ ์น์๋ฒ๋ฅผ ๋ง๋ค ์ ์๊ณ ์น ๊ฐ๋ฐ์ ํ์ํ ๊ด๋ จ ํจ์๋ค์ด ๋ด์ฅ๋์ด ์๋ค๋๊ฒ์ด ์ฅ์ ์ด์๋ค.
2.2. ๋จ์ [ํธ์ง]
- ์ ์ฒด์ ์ผ๋ก ์ ์ค๊ณ๋ ์ธ์ด๋ ๊ฒฐ์ฝ ์๋๋ค. ์๋ฅผ ๋ค์ด ๋ด์ฅ ํจ์๋ ์ธ์ ์ด๋ฆ ๊ท์น์ ์ผ๊ด์ฑ์ด ๋ถ์กฑํ๋ค. ์ด๋ PHP๋ฅผ ๋ง๋ rasmus๊ฐ ํ์ํ ๋๋ง๋ค ๊ธฐ๋ฅ์ ๋ง๋ค์๋๋ฐ C์ธ์ด ํจ์๋ค์ ๊ฐ์ ธ์ค๊ณ ์ดํ ํจ์๋ค์ ์ถ๊ฐํ๋ฉด์ ์ด๋ฆ ๊ท์น์ด ๋ฐ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๊ฒ ๋๋ฌธ์ ๊ณผ๊ฑฐ์๋ ๋ง์ด ๊น์๋ค. 7.0 ์ดํ์๋ ๊ณ์ ๋ฒ์ ์ ํ๋ฉด์ ๋ฐ๋ ์ด๋ฆ ๊ท์น์ ๋ง๊ฒ ์์ ํ ํจ์๋ฅผ ์ง์ํ๋ ๋ฑ[5] ์ ์ฐจ ๋์์ง๋ ์ถ์ธ๋ค.
- PHP๋ 7.4๊น์ง ์ ์๋์ง ์์ ๋ณ์(undefined)๋ฅผ ์ธ์์์๋ค.[6] ์ ์๋์ง ์์ ๋ณ์๋ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก null๋ก ํ๋ณํํด์ ๋ณด์ฌ์ค๋ค. ๋ค๋ง ์ ์ ๋์ง ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค๋ ์๋ฆผ์ ๋ณด์ฌ์ฃผ๊ธฐ๋ํ๋ค. ์๋ฌ ๋ณด์ฌ์ฃผ๋ ์ค์ ์ E_ALL ๋ก ํด๋์ผ ํ์๋๋ค [7] , ๋์จํ ==๊ฐ ์๋ ===๋ฅผ ์ฐ๋๋ผ๋ ๊ฐ๋ค๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ์ด๋ฅผ ํ์ธํ๋ ค๋ฉด get_defined_vars ํจ์(์ง์ญ ๋ณ์) ๋๋ $GLOBALS ๋ณ์(์ ์ญ ๋ณ์) ๋ฑ์ ํตํด ์ ์ธ๋ ๋ณ์์ ๋ชฉ๋ก ๋ฐฐ์ด์ ์ป์ด์จ ๋ค์, ๊ทธ ๋ฐฐ์ด์ ๋ณ์๊ฐ ํฌํจ๋์ด ์๋์ง๋ฅผ ํ์ธ ํ์ฌ์ผ ํ๋ค. ๊ทธ๋ฌ๋ null๊ณผ ๊ตฌ๋ถํ์ง ์๋ ํน์ฑ์ ์ด์ฉํด ๋ณดํต์ issetํจ์๋ก ์ฒดํฌํ๋ค.
- ์คํฌ๋ฆฝํธ ์ธ์ด๋ผ๋ ํน์ฑ์ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๋งํผ ์ฑ๋ฅ ํ๊ณ๊ฐ ์๋ค. ๊ณต์์ ์ผ๋ก ๋ฉํฐ์ค๋ ๋ฉ์ ์ง์ํ์ง ์์ผ๋ฉฐ ๋ฉํฐํ๋ก์ธ์ฑ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ํํธ PHP 8.0 ๋ฒ์ ๋ถํฐ๋ ์ธํฐํ๋ฆฌํฐ์ JIT์ด ์ง์๋์ด ๊ธฐ์กด 7.4๋๋น 2๋ฐฐ ๊ฐ๋์ ์ฑ๋ฅํฅ์์ด ์๋ค.
2.3. ๋ค๋ฅธ ์น ์๋น์ค ๊ฐ๋ฐ ๊ธฐ์ ๊ณผ์ ๋น๊ต[ํธ์ง]
์ข
์ข
Java ์ง์์ JSP์ ๋น๊ต๋๊ธฐ๋ ํ์๋ค.
ํ๊ตญ์ SI์ ๊ณ์์๋ PHP ๊ฐ๋ฐ์์์ JSP ๊ฐ๋ฐ์๋ก ๋์ด๊ฐ๋ ์ผ์ด ์๋นํ ๋ง์๋๋ฐ, ๊ณต๊ณต๊ธฐ๊ด์์๋ ์ ๋ถ์์ ๋ง๋ ์๋ฐ๊ธฐ๋ฐ์ ์ ์์ ๋ถํ๋ ์์ํฌ๋ฅผ ์จ์ผ ์ฌ์ ์ ๋ฐ์ฃผํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋๋ค์๊ณ ๋ฏผ๊ฐ ๋๊ท๋ชจ ์ฌ์ ์์ ์ ์ง๋ณด์์ฑ์ด๋ ์์ ์ฑ, ์ฑ๋ฅ ๋ฑ์ ์ด์ ๋ก Java ๊ธฐ๋ฐ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ๋ณธ๊ณผ ์ค๊ตญ์์๋ PHP๊ฐ ๋ง์ด ์ฐ์ด๊ณ ์๋ค.
2020๋ ํ์ฌ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ๋ค์ด ์ ์ธ๊ณ ์น ์๋น์ค ๊ฐ๋ฐ์ ์ฃผ๋ก ์ฌ์ฉ๋๊ณ ์๋ค.
ํ๊ตญ์ SI์ ๊ณ์์๋ PHP ๊ฐ๋ฐ์์์ JSP ๊ฐ๋ฐ์๋ก ๋์ด๊ฐ๋ ์ผ์ด ์๋นํ ๋ง์๋๋ฐ, ๊ณต๊ณต๊ธฐ๊ด์์๋ ์ ๋ถ์์ ๋ง๋ ์๋ฐ๊ธฐ๋ฐ์ ์ ์์ ๋ถํ๋ ์์ํฌ๋ฅผ ์จ์ผ ์ฌ์ ์ ๋ฐ์ฃผํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋๋ค์๊ณ ๋ฏผ๊ฐ ๋๊ท๋ชจ ์ฌ์ ์์ ์ ์ง๋ณด์์ฑ์ด๋ ์์ ์ฑ, ์ฑ๋ฅ ๋ฑ์ ์ด์ ๋ก Java ๊ธฐ๋ฐ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ๋ณธ๊ณผ ์ค๊ตญ์์๋ PHP๊ฐ ๋ง์ด ์ฐ์ด๊ณ ์๋ค.
2020๋ ํ์ฌ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ๋ค์ด ์ ์ธ๊ณ ์น ์๋น์ค ๊ฐ๋ฐ์ ์ฃผ๋ก ์ฌ์ฉ๋๊ณ ์๋ค.
- Java ์ง์์ Spring(ํ๋ ์์ํฌ)
- Ruby ์ง์์ Ruby on Rails
- C#์ .NET Core ์ฃผ๋ก ๋ถ๋ฏธ์์ ์ฐ์ธ๋ค
3. ๋ ๊ฑฐ์์ ํ๋ํ[ํธ์ง]
2000๋
๋ ์ด๋ฐ(2005๋
์ด์ ) ๊ตญ๋ด์์๋ ๋ค์ด๋ฒ๋ PHP๋ฅผ ์ฌ์ฉํ๊ธด ํ์๋๋ฐ, ๊ทธ ๋น์ PHP๋ ๊ตฌ๋์๋๋ ๋๋ฆฐ๋ฐ๋ค ๊ฐ์ฒด์งํฅ์ ์ง์ํ์ง ์์๊ธฐ ๋๋ฌธ์ ํ์
์ด ํ๋ค๋ค๋ ์ด์ ๋ก 2000๋
๋ ์ค๋ฐ Java ๊ณ์ด์ JSP๋ C# ๊ณ์ด์ ASP.NET์ผ๋ก ์ฎ๊ฒจ๊ฐ๋ค. (PHP์์ ์ ๋๋ก๋ ๊ฐ์ฒด์งํฅ์ ๋ฑ์ฅ์ 2009๋
์ธ PHP 5.3์ด๋ค.) ํ์ด์ค๋ถ์ ์ด์ ์๋ PHP๋ฅผ ์ฃผ ์ธ์ด๋ก ์ฌ์ฉํ๋ค๊ฐ 2014๋
์์ฌ์์ PHP ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ hack์ด๋ผ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ค. ๊ด๋ จ๊ธฐ์ฌ
MVC ํจํด[8]์ ์ ์ฉํ๊ธฐ์๋ ์ด๋ ค์ ๋ค PHP 5.3๋ถํฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์์๊ฐ ๋ค์ด๊ฐ๊ธฐ ์์ํ๋ค. ๊ทธ๋ฌ๋ ๋๋ค์์ CMS๋ค์ ์ด๋ฏธ ์ ์ฐจ์งํฅํ์ผ๋ก ์์ฑ๋์ด ์์๊ณ , ๊ทธ๋ฐ์๋ ์๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๋ณด์๊ด๋ฆฌ๊ฐ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค ์๋ฅผ ๋ค์ด ๋ณด์ํจ์น ์ง์์ด ๋๋ ๋ฒ์ ์ ํจ์๋ฅผ ์ฌ์ฉํ ์ ๋ก๋ณด๋๋ฅผ ์ฌ์ฉํ๋ค ์ผ์ด๋ ๋ฝ๋ฟ ๊ฐ์ธ์ ๋ณด ํดํน ์ฌ๊ฑด ๋ฑ์ด ์๋ค.
MVC ํจํด[8]์ ์ ์ฉํ๊ธฐ์๋ ์ด๋ ค์ ๋ค PHP 5.3๋ถํฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์์๊ฐ ๋ค์ด๊ฐ๊ธฐ ์์ํ๋ค. ๊ทธ๋ฌ๋ ๋๋ค์์ CMS๋ค์ ์ด๋ฏธ ์ ์ฐจ์งํฅํ์ผ๋ก ์์ฑ๋์ด ์์๊ณ , ๊ทธ๋ฐ์๋ ์๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๋ณด์๊ด๋ฆฌ๊ฐ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค ์๋ฅผ ๋ค์ด ๋ณด์ํจ์น ์ง์์ด ๋๋ ๋ฒ์ ์ ํจ์๋ฅผ ์ฌ์ฉํ ์ ๋ก๋ณด๋๋ฅผ ์ฌ์ฉํ๋ค ์ผ์ด๋ ๋ฝ๋ฟ ๊ฐ์ธ์ ๋ณด ํดํน ์ฌ๊ฑด ๋ฑ์ด ์๋ค.
3.1. ๋ชจ๋ PHP[ํธ์ง]
2000๋
์ ๋์จ PHP 4๊น์ง๋ ํด๋์ค๊ฐ ์์ด๋ ์ง์๋๋๊ฒ ์ ์ด์ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ด๋ ค์ ์ง๋ง 2009๋
์ PHP 5.3์ด ๋์ค๋ฉด์ ๊ฐ์ ๋๋ค. ๊ทธ ๋๋ถ์ PHP 4๊น์ง๋ ์ ๋ง ์์ํ๊ฒ ์คํฌ๋ฆฝํธ ํํ๋ก ์์ฑ๋ ์ฝ๋๋ค์ด ๋ง์๋๋ฐ, PHP 5.3 ์ดํ๋ก๋ ์ ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ์ ์ฉ๋๊ธฐ ์์ํ๋ค ๋๋ถ์ PHP์ ์ต์ด ๊ฐ๋ฐ๋น์[9] ์ฃผ์ ์ฌ์ฉ ๋์์ด์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ ์์ผ๋ก ๋ฐฐ์ฐ์ง ์์ ์ฌ๋๋ค ์
์ฅ์์๋ PHP์ ์ต๋ ์ฅ์ ์ด์๋ ๋ฎ์ ์ง์
์ฅ๋ฒฝ์ด ๋์์ง๊ณ ์๋ค๊ณ ์ฐ๋ คํ๋ ์ฌ๋๋ค๋ ์์์ ์ ๋. [10] ๊ทธ๋์ 5.3๋ฒ์ ๊น์ง๋ฅผ ๊ณ ์ PHP, 5.4~5.6๊น์ง ๊ณผ๋๊ธฐ์ด๋ฉฐ 7.0 ๊ทธ ์ดํ ๋ฒ์ ์ ํ๋ PHP๋ก ๋ถ๋ฆฌํด์ ๋ณด๋ ์๊ฐ์ด ์๋ค.
PHP ํ๋ ์์ํฌ๋ค์ด ๋ฑ์ฅํ๋ฉด MVC ํจํด, HMVC ๋ฑ ์ด ์ ์ฉ๋๋ฉด์ ํ์ ๊ด๋ จ ๋ฌธ์ ๋ ๋๋ถ๋ถ ํด์๋์์ผ๋ฉฐ PHP 7๋ถํฐ๋ ์ข ๋ ํ์คํ OOP ์ธ์ด์ ๊ฐ๊น์์ก๋ค. ํ์กดํ๋ ๋ฌธ์ ๋ค์ ๋๋ค์๋ ์์ง๋ 5.x ๋์์ ๋ฒ์ด๋์ง ๋ชปํ๋ ์ ์ฐจ์งํฅ์ ์ผ๋ก ์์ฑ๋ CMS๋ค๊ณผ ์ฌ๊ธฐ์ ์ต์ํด์ ธ ์๋ก์ด๊ฒ์ ๋ฐฐ์ฐ์ง์๋ ์ฌ์ฉ์, ๊ฐ๋ฐ์๋ค์ด ์์ธ์ด๋ค. ํนํ Laravel ํ๋ ์์ํฌ๊ฐ ๋์คํ๋์ด ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ค. XE๋ ๋ฒ์ 3๋ถํฐ ์ ์ฉํ์๋ค. ์ถ๊ฐ๋ก PHP Framework Interop Group์์ ์ ์ํ PSR ๊ท์น[11]์ผ๋ก ์ธํด ๋ง์ ํ๋ ์์ํฌ๋ค์ด ์ ํํ๋์๋ค. ์ด์ PHP ๊ฐ๋ฐ์์๋ PSR ๊ท์น์ ์งํค๋๊ฒ ๊ถ์ฅ๋๋ค.
์นํธ์คํ ์ชฝ์์๋ PHP๊ฐ ๊ฐ์ธ์ด๋ค. ๋๋ถ๋ถ์ ์นํธ์คํ ์ด PHP๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๊ณ ์๋ค. ๋ค๋ง ์ต์ ๋ฒ์ ์ง์์ด ๋ฆ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. 2020๋ ํ์ฌ์๋ ์ด๋ฏธ ์ง์์ข ๋ฃ๋ 7.0์ ๋จธ๋ฌผ๋ฌ ์๋ ์นํธ์คํ ์ด ์ข ๋ง๋ค. JSP์ ๊ฒฝ์ฐ์๋ ์ปดํ์ผ ์ธ์ด์ธ ์๋ฐ๋ฅผ ์ฐ๊ธฐ์ฝ๊ฒํ๋ ํ ํ๋ฆฟ์์ง์ธ๋ฐ ์ํ์น๋ IIS ๋ง๊ณ ๋ ํฐ์บฃ์ด๋ ์๋ฒ ์ปจํ ์ด๋๋ฅผ ์ค์นํ๊ณ ์ฝ๋๊ฐ ๊ฐฑ์ ๋ ๋๋ง๋ค ์ปดํ์ผ ํด์ผํ๋ค. ASP.NET ์ฆ .NET์ ๋ฆฌ๋ ์ค์์๋ ์ง์๋์ง๋ง[12] ๋ง์ดํฌ๋ก์ํํธ์ ์ด์์ฒด์ ์ IIS๋ก ์ด์ํ ๋๊ฐ ์ ํฉํ๋ฉฐ ์ด๋๋ ๋ผ์ด์ผ์ค๋น์ฉ์ด ๋น์ธ๋ค .
PHP๋ ๋์จํ ํ์ ๊ฒ์ฌ์ $GLOBALS, extract() ๊ฐ์ ์ ์ญ๋ณ์ ์ ๊ทผ ๋ฑ์์ ๋ณด์ ์ทจ์ฝ์ ๋ฌธ์ ๊ฐ ๋ง์ด ์ง์ ๋์๋ค. ํ์ ๊ฐํ๋ PHP 7๋ถํฐ ๊ฐ์ ๋ ๋ถ๋ถ์ด ์์ง๋ง, ์ด์ฐฝ๊ธฐ๋ถํฐ ์ด์ด์ ธ ์จ ํน์ ์ ํจ์๋ค ๋น์ผ๊ด์ฑ์ ์ฌ์ ํ๋ค. PHP 8.1 ๋ถํฐ๋ ์ผ๋ถ ๋ฌธ์ ๊ฐ ๋์๋ $GLOBALS ๋ณ์ ์ฌ์ฉ์ ์ธํฐํ๋ฆฌํฐ ์ฐจ์์์ ์ ํํ๊ธฐ๋ก ๋ฐ๋์๋ค.
๋ชจ๋ PHP๋ผ๊ณ ํ๋ PHP 7.0 ์ด ๋์ค๊ธฐ ์ด์ ๊น์ง๋ ์ ๋๋ก ๋ ๋์์ธ ํจํด์ด๋ ํ๋ ์์ํฌ๊ฐ ํ๋ฆฝ๋์ง ์์๊ณ , ์ด๋ก ์ธํด ๋ณด์ ๋ฐ์ ๊ฐ๋ณ๊ฒ ๋ ๋ ค๋ฒ๋ฆฐ ์ฝ๋๋ฅผ ์ง๋ ๋ฐฉ๋ฒ๋ค์ด ์์ด์ ๊ทธ๊ฑธ ์ฐ๋ ๊ฐ๋ฐ์๋ค์ด ๋ง์๋๋ฐ "PHP๋ ์์ ํ์ง ์๋ค"๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ ๋ฐ ์ผ์กฐํ์๋ค. ๊ฒฐ๋ก ์ ๋งํ์๋ฉด, PHP ๊ฐ๋ฐ์๋ ๊ณ ๋์ ์์ฐ์ฑ์ ๋ฐ๋ ๋์ '์๊ธฐ ์ค์ค๋ก' ์ฝ๋์ ๋ณด์์ฑ์ ๋ํด ์ ๊ฒฝ์ ์จ์ผ ํ๋ค๋ ์ด์ผ๊ธฐ๋ค.
์น์ ์ฌ๋ผ์ ์๋ PHP ๋นํ ๋ฌธ์๋ ์ ์ฌํ ๋ด์ผ ํ๋ค. ์๋ชป๋ ๋ด์ฉ์ ๊ธฐ์ฌํ๋ ๊ฒฝ์ฐ๋ ์๊ณ , ํ์์ ์์ ํด๊ฒฐ๋ ๋ฌธ์ ๋ ๋กํ๋ ์ฌ๋ ค๋๋ ๊ฒฝ์ฐ๋ ๋ง๋ค. 7.0์ด ๋์ค๊ธฐ ์ด์ ๋น์ ๋ฒ์ ์ด 5.x ์์ ์ ์์ฑ๋ ๊ธ์ด ๋ง๊ธฐ๋ ํ๋ค. ํนํ PHP: ์๋ชป๋ ๋์์ธ์ ํ๋ํ์ ๋ฒ์ญ๋ณธ์ด ๊ตญ๋ด ์น์ ๋ง์ด ํผ์ ธ ์๋๋ฐ, ์ด ๊ธ์ 2012๋ ์ ์์ฑ๋์ด์ ํ ์์ ์์๋ ๋ง์ ๋ถ๋ถ์ด ๋ฌ๋ผ์ก๊ณ , ์๋ง์ถ์ด ๊ฐ๋ฐ์๊ฐ ์ฃผ๊ด์ ์ธ ๊ฐ์ธ์๊ฒฌ์ ๋ธ๋ก๊ทธ์ ์ด ๊ธ์ด๋ผ ๊ฐ๊ด์ ์ด์ง ๋ชปํ ๊ธ์ด๋ค.
๋ค๋ฅธ ํ๋ซํผ์ฒ๋ผ ๋ชจ๋ํ ์ํ๊ณ๋ฅผ ์ง์ํ๊ธฐ ์ํด Composer๋ผ๋ ์์กด์ฑ ๊ด๋ฆฌ ๋๊ตฌ๊ฐ ๋์ ํจํค์ง ๊ตฌ์ฑ๊ณผ์ ์ ๊ฐ์ํ ํ ์ ์๊ฒ ๋์๋ค. PHP ํจํค์ง๋ ์ฃผ๋ก ํจํค์ง์คํธ์์ ์ฐพ์ ์๊ฐ ์๋ค. https://packagist.org/
PHP ํ๋ ์์ํฌ๋ค์ด ๋ฑ์ฅํ๋ฉด MVC ํจํด, HMVC ๋ฑ ์ด ์ ์ฉ๋๋ฉด์ ํ์ ๊ด๋ จ ๋ฌธ์ ๋ ๋๋ถ๋ถ ํด์๋์์ผ๋ฉฐ PHP 7๋ถํฐ๋ ์ข ๋ ํ์คํ OOP ์ธ์ด์ ๊ฐ๊น์์ก๋ค. ํ์กดํ๋ ๋ฌธ์ ๋ค์ ๋๋ค์๋ ์์ง๋ 5.x ๋์์ ๋ฒ์ด๋์ง ๋ชปํ๋ ์ ์ฐจ์งํฅ์ ์ผ๋ก ์์ฑ๋ CMS๋ค๊ณผ ์ฌ๊ธฐ์ ์ต์ํด์ ธ ์๋ก์ด๊ฒ์ ๋ฐฐ์ฐ์ง์๋ ์ฌ์ฉ์, ๊ฐ๋ฐ์๋ค์ด ์์ธ์ด๋ค. ํนํ Laravel ํ๋ ์์ํฌ๊ฐ ๋์คํ๋์ด ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ค. XE๋ ๋ฒ์ 3๋ถํฐ ์ ์ฉํ์๋ค. ์ถ๊ฐ๋ก PHP Framework Interop Group์์ ์ ์ํ PSR ๊ท์น[11]์ผ๋ก ์ธํด ๋ง์ ํ๋ ์์ํฌ๋ค์ด ์ ํํ๋์๋ค. ์ด์ PHP ๊ฐ๋ฐ์์๋ PSR ๊ท์น์ ์งํค๋๊ฒ ๊ถ์ฅ๋๋ค.
์นํธ์คํ ์ชฝ์์๋ PHP๊ฐ ๊ฐ์ธ์ด๋ค. ๋๋ถ๋ถ์ ์นํธ์คํ ์ด PHP๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๊ณ ์๋ค. ๋ค๋ง ์ต์ ๋ฒ์ ์ง์์ด ๋ฆ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. 2020๋ ํ์ฌ์๋ ์ด๋ฏธ ์ง์์ข ๋ฃ๋ 7.0์ ๋จธ๋ฌผ๋ฌ ์๋ ์นํธ์คํ ์ด ์ข ๋ง๋ค. JSP์ ๊ฒฝ์ฐ์๋ ์ปดํ์ผ ์ธ์ด์ธ ์๋ฐ๋ฅผ ์ฐ๊ธฐ์ฝ๊ฒํ๋ ํ ํ๋ฆฟ์์ง์ธ๋ฐ ์ํ์น๋ IIS ๋ง๊ณ ๋ ํฐ์บฃ์ด๋ ์๋ฒ ์ปจํ ์ด๋๋ฅผ ์ค์นํ๊ณ ์ฝ๋๊ฐ ๊ฐฑ์ ๋ ๋๋ง๋ค ์ปดํ์ผ ํด์ผํ๋ค. ASP.NET ์ฆ .NET์ ๋ฆฌ๋ ์ค์์๋ ์ง์๋์ง๋ง[12] ๋ง์ดํฌ๋ก์ํํธ์ ์ด์์ฒด์ ์ IIS๋ก ์ด์ํ ๋๊ฐ ์ ํฉํ๋ฉฐ ์ด๋๋ ๋ผ์ด์ผ์ค๋น์ฉ์ด ๋น์ธ๋ค .
PHP๋ ๋์จํ ํ์ ๊ฒ์ฌ์ $GLOBALS, extract() ๊ฐ์ ์ ์ญ๋ณ์ ์ ๊ทผ ๋ฑ์์ ๋ณด์ ์ทจ์ฝ์ ๋ฌธ์ ๊ฐ ๋ง์ด ์ง์ ๋์๋ค. ํ์ ๊ฐํ๋ PHP 7๋ถํฐ ๊ฐ์ ๋ ๋ถ๋ถ์ด ์์ง๋ง, ์ด์ฐฝ๊ธฐ๋ถํฐ ์ด์ด์ ธ ์จ ํน์ ์ ํจ์๋ค ๋น์ผ๊ด์ฑ์ ์ฌ์ ํ๋ค. PHP 8.1 ๋ถํฐ๋ ์ผ๋ถ ๋ฌธ์ ๊ฐ ๋์๋ $GLOBALS ๋ณ์ ์ฌ์ฉ์ ์ธํฐํ๋ฆฌํฐ ์ฐจ์์์ ์ ํํ๊ธฐ๋ก ๋ฐ๋์๋ค.
๋ชจ๋ PHP๋ผ๊ณ ํ๋ PHP 7.0 ์ด ๋์ค๊ธฐ ์ด์ ๊น์ง๋ ์ ๋๋ก ๋ ๋์์ธ ํจํด์ด๋ ํ๋ ์์ํฌ๊ฐ ํ๋ฆฝ๋์ง ์์๊ณ , ์ด๋ก ์ธํด ๋ณด์ ๋ฐ์ ๊ฐ๋ณ๊ฒ ๋ ๋ ค๋ฒ๋ฆฐ ์ฝ๋๋ฅผ ์ง๋ ๋ฐฉ๋ฒ๋ค์ด ์์ด์ ๊ทธ๊ฑธ ์ฐ๋ ๊ฐ๋ฐ์๋ค์ด ๋ง์๋๋ฐ "PHP๋ ์์ ํ์ง ์๋ค"๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ ๋ฐ ์ผ์กฐํ์๋ค. ๊ฒฐ๋ก ์ ๋งํ์๋ฉด, PHP ๊ฐ๋ฐ์๋ ๊ณ ๋์ ์์ฐ์ฑ์ ๋ฐ๋ ๋์ '์๊ธฐ ์ค์ค๋ก' ์ฝ๋์ ๋ณด์์ฑ์ ๋ํด ์ ๊ฒฝ์ ์จ์ผ ํ๋ค๋ ์ด์ผ๊ธฐ๋ค.
์น์ ์ฌ๋ผ์ ์๋ PHP ๋นํ ๋ฌธ์๋ ์ ์ฌํ ๋ด์ผ ํ๋ค. ์๋ชป๋ ๋ด์ฉ์ ๊ธฐ์ฌํ๋ ๊ฒฝ์ฐ๋ ์๊ณ , ํ์์ ์์ ํด๊ฒฐ๋ ๋ฌธ์ ๋ ๋กํ๋ ์ฌ๋ ค๋๋ ๊ฒฝ์ฐ๋ ๋ง๋ค. 7.0์ด ๋์ค๊ธฐ ์ด์ ๋น์ ๋ฒ์ ์ด 5.x ์์ ์ ์์ฑ๋ ๊ธ์ด ๋ง๊ธฐ๋ ํ๋ค. ํนํ PHP: ์๋ชป๋ ๋์์ธ์ ํ๋ํ์ ๋ฒ์ญ๋ณธ์ด ๊ตญ๋ด ์น์ ๋ง์ด ํผ์ ธ ์๋๋ฐ, ์ด ๊ธ์ 2012๋ ์ ์์ฑ๋์ด์ ํ ์์ ์์๋ ๋ง์ ๋ถ๋ถ์ด ๋ฌ๋ผ์ก๊ณ , ์๋ง์ถ์ด ๊ฐ๋ฐ์๊ฐ ์ฃผ๊ด์ ์ธ ๊ฐ์ธ์๊ฒฌ์ ๋ธ๋ก๊ทธ์ ์ด ๊ธ์ด๋ผ ๊ฐ๊ด์ ์ด์ง ๋ชปํ ๊ธ์ด๋ค.
๋ค๋ฅธ ํ๋ซํผ์ฒ๋ผ ๋ชจ๋ํ ์ํ๊ณ๋ฅผ ์ง์ํ๊ธฐ ์ํด Composer๋ผ๋ ์์กด์ฑ ๊ด๋ฆฌ ๋๊ตฌ๊ฐ ๋์ ํจํค์ง ๊ตฌ์ฑ๊ณผ์ ์ ๊ฐ์ํ ํ ์ ์๊ฒ ๋์๋ค. PHP ํจํค์ง๋ ์ฃผ๋ก ํจํค์ง์คํธ์์ ์ฐพ์ ์๊ฐ ์๋ค. https://packagist.org/
4. ๊ตฌ๋๋ฐฉ์[ํธ์ง]
PHP๋ ์ธํฐํ๋ฆฌํฐ๋ฐฉ์์ด๋ฉด์ ์คํํ ํ๋ก์ธ์ค๊ฐ ๋๋๊ณ ๋ค์ ์คํ์ ์ฝ๋๋ฅผ ๋งค๋ฒ ํด์ํด์ ์คํํ๋ ๋ฐฉ์์ด๋ผ ํผํฌ๋จผ์ค์ ํ๊ณ๊ฐ ์์๋ค. ๊ทธ๋์ PHP ์ฝ๋๋ฅผ ์ต๋ํ ๊ทธ๋๋ก ์ฌํ์ฉํ๋ ์ปดํ์ผ๋ง์ ํตํด ํผํฌ๋จผ์ค๋ฅผ ํฅ์์ํค๋ ์ํํธ์จ์ด๋ค์ด ๋ช ๊ฐ์ง ๊ฐ๋ฐ๋์๋๋ฐ ๊ทธ์ค์์ opcode ์บ์๊ฐ 5.5๋ฒ์ ๋ถํฐ PHP ์์ง์ ํตํฉ๋์๋ค.
ํ์ด์ค๋ถ์ ์์ฌ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ค๊ฐ PHP์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด์ํ๊ธฐ ์ํด ์คํ ์์ค๋ก HipHop for PHP์ HipHop Virtual Machine(HHVM)์ ๊ฐ๋ฐํ๋ค. ์ ์๋ PHP ์ฝ๋๋ฅผ C++ ์ฝ๋๋ก ๋ณํํ ๋ค ์ปดํ์ผํ๋ ๋ฐฉ์์ด๊ณ , ํ์๋ Java์ ๋น์ทํ๊ฒ JIT ์ปดํ์ผ๋ง์ ํ๋ ๋ฐฉ์์ด๋ค. ํ์ฌ HipHop for PHP๋ ๊ฐ๋ฐ์ ์ค๋จํ๊ณ HHVM๋ง ๊ฐ๋ฐํ์ฌ ๋ด๋๊ณ ์๋ค. ์ฐธ๊ณ ๋ก ํ์ด์ค๋ถ์ HHVM์ ๊ฐ๋ฐํ๋ฉด์ hack์ด๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ง๋ค์๋๋ฐ, HHVM์์ hack ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ ์คํํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ PHP 7.0์์๋ ์ธํฐํ๋ฆฌํฐ์ ํ์๋ฅผ ๋ถ๋ฆฌํ๊ณ AST ํ์๋ฅผ ๋์ ํด์ HHVM์ ๊ฐ์ ์ธ ์๋๋ฅผ ๋ฐ๋ผ์ก์๋ค. 2020๋ ๋ง์ ์ถ์๋ PHP 8๋ถํฐ๋ ์ธํฐํ๋ฆฌํฐ์ JIT ์ ๋์ ํ์ฌ JIT ๊ตฌ๋์ฌ๋ถ์ ๋ฐ๋ผ 7.4๋๋น 2๋ฐฐ ๊ฐ๋์ ์ฑ๋ฅ ํฅ์์ด์๋ค.๋ฒค์น๋งํฌ
ํ์ด์ค๋ถ์ ์์ฌ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ค๊ฐ PHP์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด์ํ๊ธฐ ์ํด ์คํ ์์ค๋ก HipHop for PHP์ HipHop Virtual Machine(HHVM)์ ๊ฐ๋ฐํ๋ค. ์ ์๋ PHP ์ฝ๋๋ฅผ C++ ์ฝ๋๋ก ๋ณํํ ๋ค ์ปดํ์ผํ๋ ๋ฐฉ์์ด๊ณ , ํ์๋ Java์ ๋น์ทํ๊ฒ JIT ์ปดํ์ผ๋ง์ ํ๋ ๋ฐฉ์์ด๋ค. ํ์ฌ HipHop for PHP๋ ๊ฐ๋ฐ์ ์ค๋จํ๊ณ HHVM๋ง ๊ฐ๋ฐํ์ฌ ๋ด๋๊ณ ์๋ค. ์ฐธ๊ณ ๋ก ํ์ด์ค๋ถ์ HHVM์ ๊ฐ๋ฐํ๋ฉด์ hack์ด๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ง๋ค์๋๋ฐ, HHVM์์ hack ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ ์คํํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ PHP 7.0์์๋ ์ธํฐํ๋ฆฌํฐ์ ํ์๋ฅผ ๋ถ๋ฆฌํ๊ณ AST ํ์๋ฅผ ๋์ ํด์ HHVM์ ๊ฐ์ ์ธ ์๋๋ฅผ ๋ฐ๋ผ์ก์๋ค. 2020๋ ๋ง์ ์ถ์๋ PHP 8๋ถํฐ๋ ์ธํฐํ๋ฆฌํฐ์ JIT ์ ๋์ ํ์ฌ JIT ๊ตฌ๋์ฌ๋ถ์ ๋ฐ๋ผ 7.4๋๋น 2๋ฐฐ ๊ฐ๋์ ์ฑ๋ฅ ํฅ์์ด์๋ค.๋ฒค์น๋งํฌ
5. ๊ฐ๋ฐ ๋๊ตฌ[ํธ์ง]
๊ตฌ๋ฒ์ PHP๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ์๋ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ(IDE)์ ์ ์ฐ๋ ๊ณณ์ด ์ข
์ข
์๋๋ฐ, ์ค๋ฅ๋ฅผ ์ก๊ณ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ด๊ธฐ ์ํด์๋ IDE๋ฅผ ์ฐ๋ ๊ฒ์ด ์ข๋ค. VS Code ๊ฐ์ ํ
์คํธ ์๋ํฐ์ ๋๋ฒ๊น
์ ์ํ Xdebug๋ฅผ ์ค์นํด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์๋ค. ํนํ VS Code๋ MS๊ฐ ์ ํญ์ ์ผ๋ก ๋ฐ์ด์ฃผ๊ณ ์์ด ๊ฐ์ข
ํ๋ฌ๊ทธ์ธ์ ์ซ์๋ ๋์ด๋๋ ์ค์ด๋ค.
์์ฆ์ JetBrains ์ฌ์์ ๊ฐ๋ฐํ ์ ๋ฃ IDE PhpStorm์ด ํธ๋ฆฌํ ์ฝ๋ ์๋ํฐ, ๊ฐ์ข ํ๋ ์์ํฌ ์ง์, ์ ์ํ ์ํฌํธ์ ํ์ ์ด ์ ์ ์จ์ ๋๋ ค๊ฐ๊ณ ์๋ค. PhpStorm์ PHP๋ฟ๋ง ์๋๋ผ JavaScript ๋ฐ ์น ๊ด๋ จ ๊ธฐ๋ฅ๋ค๊น์ง ์ ๋ถ ํฌํจํ๊ณ ์๋ค.
์์ฆ์ JetBrains ์ฌ์์ ๊ฐ๋ฐํ ์ ๋ฃ IDE PhpStorm์ด ํธ๋ฆฌํ ์ฝ๋ ์๋ํฐ, ๊ฐ์ข ํ๋ ์์ํฌ ์ง์, ์ ์ํ ์ํฌํธ์ ํ์ ์ด ์ ์ ์จ์ ๋๋ ค๊ฐ๊ณ ์๋ค. PhpStorm์ PHP๋ฟ๋ง ์๋๋ผ JavaScript ๋ฐ ์น ๊ด๋ จ ๊ธฐ๋ฅ๋ค๊น์ง ์ ๋ถ ํฌํจํ๊ณ ์๋ค.
6. PHP ์ฝ๋ฉ ํ์ค์[ํธ์ง]
PHP 5.3 ์ดํ PHP ์ง์์๋ ํ๋ ์์ํฌ๋ค์ด ๋์ค๋ฉด์ ์ฝ๋ฉํ์ค๊ณผ ํ๋ ์์ํฌ๋ค ํธํ์๊ดํด PHP ํ๋ ์์ํฌ ๊ทธ๋ฃน์์ ๊ท์น์ ์ ํ๋ค.
PSR 0 ~ 17๊น์ง ์์ผ๋ PSR 4 ์ 12๊ฐ ์ฃผ์๊ท์น์ด๊ณ PSR 4์์ PHP ํด๋์ค๋ฅผ ์๋์ผ๋ก ๋ถ๋ฌ์ค๋ ์คํ ๋ก๋ ๋ผ๋ ๊ฒ ์๋๋ฐ Node.js๊ณ์ NPM๊ณผ ๊ฐ์ ํจํค์ง ์์กด์ฑ ๊ด๋ฆฌ์์ธ ์ปดํฌ์ ๊ฐ ๊ตฌํ์ฒด์ด๋ค.
PSR ํ๊ตญ์ด ๋ฒ์ญ๋ฌธ์
๊ทธ ๋ฐ์ PHP The Right Way๋ผ๋ ๋ฌธ์๊ฐ ์ธ์ ๋ฐ๊ณ ์๋ค. ํ๊ตญ์ด ๋ฒ์ญhttps://modernpug.github.io/php-the-right-way/
PSR 0 ~ 17๊น์ง ์์ผ๋ PSR 4 ์ 12๊ฐ ์ฃผ์๊ท์น์ด๊ณ PSR 4์์ PHP ํด๋์ค๋ฅผ ์๋์ผ๋ก ๋ถ๋ฌ์ค๋ ์คํ ๋ก๋ ๋ผ๋ ๊ฒ ์๋๋ฐ Node.js๊ณ์ NPM๊ณผ ๊ฐ์ ํจํค์ง ์์กด์ฑ ๊ด๋ฆฌ์์ธ ์ปดํฌ์ ๊ฐ ๊ตฌํ์ฒด์ด๋ค.
PSR ํ๊ตญ์ด ๋ฒ์ญ๋ฌธ์
๊ทธ ๋ฐ์ PHP The Right Way๋ผ๋ ๋ฌธ์๊ฐ ์ธ์ ๋ฐ๊ณ ์๋ค. ํ๊ตญ์ด ๋ฒ์ญhttps://modernpug.github.io/php-the-right-way/
7. ์ ๋ฐ์ดํธ[ํธ์ง]
PHP์ ๊ณต์ ์
๋ฐ์ดํธ๋ 7.0์ด ๋์จ ์ดํ๋ก ์ต์ ๋ฒ์ ๋ฐ ํ์ 2๊ฐ ๋ฒ์ ๊น์ง๋ง ์
๋ฐ์ดํธ๋ฅผ ์ ์งํ๋ค. ์๋ฅผ ๋ค์ด 7.4๊ฐ ๋์ค๋ฉด 7.3๊ณผ 7.2๋ ์
๋ฐ์ดํธ๋ฅผ ์ง์ํ๊ณ , 7.1์ ์
๋ฐ์ดํธ๋ฅผ ์ข
๋ฃํ๋ ํ์์ด๋ค. ๊ทธ๋ฌ๋ ๋ง์ด ์ฐ์ด๋ ๋ช๋ช ๋ฆฌ๋
์ค์ ๋ฐฐํฌํ(๋ํ์ ์ผ๋ก ๋ ๋ํ ๋ฆฌ๋
์ค์ CentOS, ์ฐ๋ถํฌ)์ PHP์ ์
๋ฐ์ดํธ๊ฐ ์ข
๋ฃ๋ ์ดํ์๋ ์์ฒด์ ์ผ๋ก ๊ณ์ ๋ณด์ ์
๋ฐ์ดํธ๋ฅผ ์ง์ํ๋๋ฐ, ์ด๋ฐ ์ ๋ช
๋ฐฐํฌํ๋ค์ ๋ณดํต ์๋ฒ์ฉ์ผ๋ก ์จ์ ์ง์ ๊ธฐ๊ฐ์ด ๊ธด ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ (ํนํ LTS๋ก ๋ถ๋ฆฌ๋ ์ฅ๊ธฐ์ง์ ๋ฒ์ ), ํธํ์ฑ์ ์ํด ํด๋น ๋ฉ์ด์ ๋ฒ์ ๋ด์์๋ ๊ณต์ ์ ์ฅ์์ PHP ๋ฒ์ ์ ๋ฐ๊พธ์ง ์๊ธฐ ๋๋ฌธ์ ์์ฒด์ ์ผ๋ก ๋ณด์ ์
๋ฐ์ดํธ๋ฅผ ์ง์ํ๋ ๊ฒ์ด๋ค. PHP๋ ์น์๋ฒ์ด๋ ๋ณด์์ด ํจ์น๋ ์ต์ ๋ฒ์ ์ ์ฐ๋๊ฒ์ด ์ข๋ค.
7.1. PHP 5[ํธ์ง]
- 2009๋ 6์ 5.3 ๋ฒ์ ์ต๋ช ํจ์ ๋ฌธ๋ฒ์ด ์ถ๊ฐ๋๊ณ ๋ฉ๋ชจ๋ฆฌ ํ์๋ฅผ ์ํ ๊ฐ๋น์ง์ปฌ๋ ํฐ๊ฐ ๋์ ๋์๋ค.
- 2012๋ 3์ 5.4 ๋ฒ์ ์ ๋ฐ์ดํธ๋ ๊ธฐ๋ฅ[13]์ด ๋ค๋ฅธ ์ธ์ด์์ ์ด๋ฏธ ์ง์๋๋ ๊ฒ๋ค์ด์ง๋ง, ์ ์์ง๋ค์ ๋ชจ๋ฅด์ ๋ก ์ธํด์ ํํธ์ฑ๊ณผ ํ์์ด ๊ต์ฐจํ๊ณ ์๋ค. ์ ๊ธฐ๋ฅ ์๊ฐ ๊ทธ๋ฆฌ๊ณ ์์ ์์ด ํด๋ ์ค๋ค์ ๋ชจ๋ํํ ์ ์๋ ํธ๋ ์ดํธ ๋ฌธ๋ฒ์ ์ง์ํ๊ฒ ๋์๋ค.
- 2013๋ 6์์ 5.5๊ฐ ๋ฐฐํฌ๋์๋ค. yield ๋ฐ finally ํค์๋ ์ง์,
๊ฒฐ๊ตญ ๋ ๋ท๋ถ๋ณด์์ฑ ๊ฐํ, ๋ฐฐ์ด ์ง์ ๊ฐํ ๋ฑ์ ๊ณจ์๋ก ํ๊ณ ์๋ค. ๋ณด์์์ ๋ฌธ์ ๋๋ฌธ์ mysqli ๋ฐ PDO๋ฅผ ์ ์ธํ MySQL ์ฐ๊ฒฐ์ด ๋น๊ถ์ฅ(deprecated) ์์์๋ค๊ฐ PHP 7์์๋ ์์ ํ ์ ๊ฑฐ๋์๋ค.
PHP 5๊ฐ ์ฒ์ ๋์จ ๊ฒ์ด 2004๋ ์ผ๋ก ๊ฑฐ์ 10๋ ์ด ๋์๋๋ฐ, ์ฌ์ค 2005๋ ๋ถํฐ PHP 6์ ๋ํ ๊ฐ๋ฐ์ด ์์๋์๋ค. ํ์ง๋ง ์ด๊ฒ ์ทจ์๋๋ ๋ฐ๋์ PHP 5๋ก ๊ทผ 10๋ ๊ฐ ์ฐ๋ ค๋จน๊ฒ ๋ ๊ฒ์ด๋ค. PHP 6์ ์ฒ์๋ถํฐ ์ ๋์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋๋๋๋ก ์ค๊ณ๊ฐ ๋์๊ณ , ์ด ๋๋ฌธ์ ๋๋จํ ๋ง์ ๋ณ๊ฒฝ์ ์ด ์๊ณ ๋ ๋ฒ์ ์ด์๋ค. ๊ทธ๋ฌ๋ ํํ ์ธ์ฝ๋ฉ์ผ๋ก UTF-16์ ์ ํํ ๊ฒ์ด ๋ฐ๋ชฉ์ ์ก์๋ค. ์ด๋ฏธ ์น์์ ์ ๋์ฝ๋ ์ธ์ฝ๋ฉ์ UTF-8์ด ๋์ธ๊ฐ ๋๋ ์ค์ด์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ์ค์ฑ ์ผ๋ก ๊ฐ๋ฐ์๋ค์ ์ฐธ์ฌ๊ฐ ์ค์ด๋ค์๊ณ , ๊ฐ๋ฐ์ ๋ํญ์ ๊ฒช๋ค๊ฐ 2010๋ 5์์ PHP 6 ํ๋ก์ ํธ๋ ์ทจ์๋์๋ค. ๊ทธ๋ฆฌ๊ณ PHP 6์์ ๋ ผ์๋๋ ์๋น์์ ๊ธฐ๋ฅ์ PHP 5.4๋ก ํก์๋์๋ค. UTF-8์ด ๊ธฐ๋ณธ ์ธ์ฝ๋ฉ์ด ๋ ๊ฒ๋ 5.4 ๋ฒ์ ๋ถํฐ์ด๋ค.
ํ์ง๋ง ๋ณด์ ๋ฌธ์ ๊ฐ ๋๋ฌ๋๊ณ ์๋ PHP 5๋ก ์ฅ๊ธฐ๊ฐ ๋ฒํฐ๋ ๊ฒ์ ์๋ฌด๋๋ ๋ฌด๋ฆฌ๊ฐ ๋ง์๋ค. ์์ง์ด 10๋ ๊ฐ ๋ฐ๋์ง ์์ ์ฑ ์ ์ง๋๋ค ๋ณด๋ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ ์ธ์ด๋ณด๋ค ์๋ ์ฐจ์ด๊ฐ ํฌ๊ฒ ๋๊ฒ ๋ ๊ฒ์ด๋ค. ์์ ๊ฐ์ ๋ค์ด ์์์ง๋ง, ๊ทผ๋ณธ์ ์ธ ๊ฐ์ ์ ๋ฌด๋ฆฌ์๋ค. ๊ฒฐ๊ตญ, 2014๋ PHP 6์ ๊ฑด๋๋ฐ๊ณ ์ฐจ๊ธฐ ๋ฒ์ ์ผ๋ก PHP 7์ ๊ฐ๋ฐ์ ๋ฐํํ๋ค. PHP 7์ PHP NG(Next Generation)๋ผ๋ ์๋ก์ด ๊ตฌํ์ฒด๊ฐ ๋์ ๋ ๊ฒ์ด๋ฉฐ, ๋๋ถ์ 2015๋ 6์ ๋ฐฐํฌ๋ PHP 7 ์ํ 1 ๋ฒ์ ์ PHP 5.6์ ๋นํด ์ฝ 70%, PHP 5.5๋ณด๋ค ๊ฑฐ์ 2๋ฐฐ์ ์ฑ๋ฅ ํฅ์์ ๋ณด์ฌ, HHVM ๋ชป์ง์์ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋ค. ๋ํ, ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๋์์ ๊ธฐ์กด PHP 5์ ํธํ์ฑ์ ์ต๋ํ ์ ์งํ ์ํ๋ก ๋์ด๊ฐ๊ธฐ ๋๋ฌธ์ ํผ๋์ ๋ง์ง ์์๋ค์
7.2. PHP 7[ํธ์ง]
PHP 7์ ๋ฐํ ํ๋ณด๋ ์๋นํ ๋น ๋ฅด๋ค. 2015๋
6์ 11์ผ์ ์ํ 1์ด ๋์จ ์ดํ ํ ๋ฌ ๋ง์ธ 7์ 10์ผ์ ๋ฒ ํ 1์ด ๋์ค๊ณ , ํ ๋ฌ ๋ง์ธ 8์ 18์ผ ๋ฆด๋ฆฌ์ฆ ํ๋ณด์ 1(RC1)์ด ๋์๋ค. 12์ 3์ผ์ ์ผ๋ฐ ์ด์ฉ์์ฉ(GA)์ด ๋์๋ค. PHP 7์ PHP 5.6๋ณด๋ค๋ 2๋ฐฐ ๋น ๋ฅธ ์ฑ๋ฅ์ด๊ณ ํจ์ ์ธ์์ ๋ฐํ ๊ฐ์ ํ์
์ ์ง์ ํ ์ ์๊ฒ ๋์๋ค.
- 2015๋ 12์ 3์ผ, ๋๋์ด PHP 7 ์ ์ ๋ฒ์ ์ด ๋ฐํ๋์๋ค. # AST ํ์๊ฐ ์ ์ฉ๋์๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ฐ์ํ๋ค.
์ค์ ๋ก ์ฌ๋ฌ ์ฌ์ฉ์์ ๋ฒค์น๋งํฌ์ ์ํ๋ฉด PHP 7์ ์ด์ ๋ณด๋ค 2๋ฐฐ์์ 10๋ฐฐ๊น์ง๋ ๋น ๋ฅด๋ค๊ณ ํ๋ค.๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ๊ณณ์ ์ ๋ฌํ ๋ ๊ฐ ๋ณต์ฌ ์๋๋ฐ 7.0 ๋ถํฐ๋ ์ฐธ์กฐ์ ๋ฌ์ ํ๋๋ก ๋ฐ๋์ด์ ๊ฐ์ฒด์๋ &๋ฅผ ์ฐ์ง์์๋ ๋๋ค.[14]
ํจ์์ ๋งค๊ฐ๋ณ์์ ํ์ ์ ์ง์ ํ ์ ์๊ฒ๋์๋ค.
PHP 4 ์คํ์ผ์ ์์ฑ์ ๋ฌธ๋ฒ์ด ์ญ์ ๋๊ณ 5.0์์ ๋์จ ๋ฌธ๋ฒ์ ์จ์ผํ๋ค.
๋ฌผ์ํ ๋๊ฐ๋ฅผ ํ๊ธฐํ๋ null ๋ณํฉ ์ฐ์ฐ์๊ฐ ์ง์๋์ด ํธ๋ฆฌํด์ก๋ค.[15]์ด์ ๋ฐฉ์ $user = (!empty($_GET['user'])) ? $_GET['user'] : ''; // ์ผํญ์ฐ์ฐ์๋ก ์ฒ๋ฆฌ ? ์์ ๊ฐ์ด ์์ผ๋ฉด ๋์ ํ๊ณ ์์ผ๋ฉด ๋ค์ ๊ฒ์ ์ด๋ค. PHP7.0 ๋ถํฐ๋ ๊ฐ์ ํํ์์ด ๊ฐ๋จํด์ง๋ค. $user = $_GET['user'] ?? ''; // ??(null ๋ณํฉ์ฐ์ฐ์) ์์ ๋ณ์๊ฐ ์์ผ๋ฉด ๋ค์๊ฒ์ ์ด๋ค.
- 2016๋ 6์ 9์ผ, PHP 7.1 ์ํ ๋ฒ์ ์ ๋ด๋์๋ค. ์ดํ ๋ ์ฐจ๋ก ๋ ์ํ ๋ฒ์ ์ ๋ด๋์ ๋ค 7์ 21์ผ์ ๋ฒ ํ ๋ฒ์ ์ผ๋ก ๋์ด๊ฐ๋ค. ์ดํ ๋ฆด๋ฆฌ์ฆ ํ๋ณด์ 1(RC1)์ 9์ 1์ผ์ ๋์๋ค.
- 2016๋ 12์ 1์ผ, PHP 7.1 ์ ์ ๋ฒ์ ์ด ๋ฐํ๋์๋ค.
- 2017๋ 11์ 30์ผ, PHP 7.2 ์ ์ ๋ฒ์ ์ด ๋ฐํ๋์๋ค. ์ด์ ์ผ ๋ค๋ฅธ ์ธ์ด์ฒ๋ผ count() ํจ์์ ๋ฐฐ์ด์ ํด๋นํ์ง ์๋ ๊ฐ์ด ๋งค๊ฐ๋ณ์์ ๋ค์ด๊ฐ ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ธ๋ค.
๋๋์ด ์ ์ ์ฐจ๋ ธ๊ตฌ๋ - 2018๋ 12์ 1์ผ, PHP 7.0 ๋ฒ์ ์ง์์ด ์์ ํ ์ข ๋ฃ๋์๋ค.
- 2018๋ 12์ 6์ผ, PHP 7.3 ์ ์ ๋ฒ์ ์ ๋ฐํํ์๋ค. Heredoc, Newdoc ๋ฌธ๋ฒ์ด ์ ์ฐํด์ก๊ณ , ํจ์ ํธ์ถ ์ ๋ง์ง๋ง ํ๋ผ๋ฏธํฐ ๋ค์ ์ฝค๋ง๋ฅผ ๋ถ์ด๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก๋ค.
- 2018๋ 12์ 31์ผ, PHP 5.6 ๋ฒ์ ์ ์ง์์ด ์์ ํ ์ข ๋ฃ๋์๋ค. ์ด๋ก์จ PHP 5.x ๋ฒ์ ์ 15๋ ๊ฐ์ ๊ธธ๊ณ ๊ธด ์ญ์ฌ๋ฅผ ๋ง๊ฐํ๊ฒ ๋์๋ค.
- 2019๋ 11์ 26์ผ, PHP 7.4 ์ ์ ๋ฒ์ ์ด ๋ฐํ๋์๋ค. ์ฑ๋ฅ์ด ์ต๋ 8%์ ํฅ์ ๋์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉฐ์น ํ์ธ 12์ 1์ผ์ PHP 7.1 ๋ฒ์ ์ง์์ด ์ข ๋ฃ๋์๋ค.
7.3. PHP 8[ํธ์ง]
- 2020๋ PHP 8์์ ์ฑ๋ฅํฅ์์ ์ํ JIT ๋์ , ์ ์๋์ง ์์ ๋ณ์ ๊ฒ์ฌ ๋ฑ ์์ธ์ฒ๋ฆฌ ๊ฐํ๊ฐ ๋์๋ค.
ํนํ ์๋ฌ๋ฅผ ์ผ์์ ์ผ๋ก ๊ฐ์ถ๋๋ฐ ์ฌ์ฉ๋๋ @์ฐ์ฐ์๊ฐ ์ฌ๋ผ์ก๋ค. [16]
๋ค๋ฅธ์ธ์ด์์ ์ต์ ๋์ด๋ผ๊ณ ๋ ๋ถ๋ฅด๋ null safe ์ฐ์ฐ์๊ฐ ์ง์๋๋ค.
//์๋๋ 8.0
$country = $session?->user?->getAddress()?->country;๋ค๋ฅธ์ธ์ด์์ ์ด๋ ธํ ์ด์ ์ด๋ผ๊ณ ๋ ๋ถ๋ฅด๋ ์ ํธ๋ฆฌ๋ทฐํธ๊ธฐ๋ฅ์ด ์ง์๋๋ค.
์ฃผ์์ ์ฌ๋์ด ํด์ํ์ง๋ง ์ ํธ๋ฆฌ๋ทฐํธ๋ ํ๋ก๊ทธ๋จ์๊ฒ ํด๋น ์ฝ๋ ์ญํ ์ ์ง์ ํ๋ ๋ฉํ ๋ฐ์ดํฐ์ด๋ค.
๋ฌธ๋ฒ์ #[]
class PostsController
{
#[Route("/api/posts/{id}", methods: ["GET"])]
public function get($id) { /* ... */ }
}ํจ์์ ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ ๋ถ์ผ์ ์๊ฒ๋์๋ค.
htmlspecialchars($string, double_encode: false);
//๋๋ฒ์งธ ์ธ์์ double_encode ์ด๋ผ๋ ์ด๋ฆ์ด ์์ด ํจ์๋ฅผ ๋ด๋ถ๋ฅผ ๋ณด์ง ์๊ณ ๋ false๊ฐ ์ด๋ค์ญํ ์ธ์ง ๋ณด๋๋ฐ ๋์๋๋ค.- 2020๋ 11์ 26์ผ ์ ์ ์ถ์ ๋์๋ค.
8. ๊ธฐํ[ํธ์ง]
- FastCGI๋ก ํ๋ก์ ํ๊ฒ ๋๋ฉด HTTPํค๋์ X-Powered-By ์ด๋ฆ์ ๋ฒ์ ์ ๋ณด๊ฐ ์ถ๊ฐ๋๋ค. : X-Powered-By: PHP/7.4.2 [17]
- ํ์ฌ ์น์์ ๊ณต๊ฐ๋ ๋ง์ ์น ๊ด๋ จ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ด PHP๋ก ์์ฑ๋์๊ธฐ ๋๋ฌธ์, ํ์ํ ๋ถ๋ถ์ ๊ณ ์น ์ ์์ ์ ๋๋ก ๋ฐฐ์๋๋ฉด ๋์์ด ๋๋ค. ํนํ ๊ฐ๋จํ ์๋ฒ์ฉ ์๋ํ ์คํฌ๋ฆฝํธ ํ์ผ์ ์ง๊ธฐ์๋ ํธ๋ฆฌํ๊ณ , ์น์๋ฒ๋ฅผ ๊ฒฝํํด๋ณด๊ธฐ ๊ด์ฐฎ์ ์ธ์ด์ด๋ค๋ฒ
- ๋ผ์ด์ ์ค๋ฅผ ๋ณด๋ฉด, ์ผ๋จ ํ๋ฆฌํ๋ก์ธ์๋ 3.x(PHP License/GPL ๋์ผ ๋ผ์ด์ ์ค)๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฒ์ ์ด PHP License๋ผ ๋ถ๋ฆฌ๋ ๋ ์์ ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฅธ๋ค. MIT ํ๊ฐ์ ๋น์ค๋ฌด๋ฆฌํ ํํ์ง๋ง ํ๋ฆฌํ๋ก์ธ์๋ฅผ ์ฌ๋ฐฐํฌํ ๋ (๋ด์ฉ ์์ ์ฌ๋ถ์ ๊ด๊ณ์์ด) ํจํค์ง๋ช ์ PHP๋ผ๋ ๋จ์ด๋ฅผ ๋ฃ์ง ๋ชปํ๊ฒ ํ๊ณ , 'This product includes PHP software, freely available from http://www.php.net/software'๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ์ฝ๋์ ์ฝ์ ํ ๊ฒ์ ๊ฐ์ ํ๋ ๋ด์ฉ์ด ์์ด GPL๊ณผ๋ ํธํ์ด ๋์ง ์๋๋ค.
- ํ์ด์ค๋ถ์์ PHP์ ์ง๋ํ ๊ณตํ์ ํ๊ณ ์๋ค. ์ด์ ๋ ์์์ ์ธ๊ธํ๋ฏ์ด ํ์ด์ค๋ถ์ด PHP(or hack ์ธ์ด) ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ.[18] ๋ํ์ ์ผ๋ก ํ์ด์ค๋ถ์์ PHP์ ํ์ค์ ๋ํด ๊ณต์ํํ ๋ฌธ์๊ฐ ์๋ค. ์ฌ์ง์ด ๊ณต์ PHP์์๋ ์ด ๋ฌธ์๋ฅผ ์ด์ฉํ๋ค. ์ด์ ๊น์ง PHP๋ ์ ๋๋ก ๋ ์ธ์ด ์ฌ์์(php.net์ ๋ฌธ์์๋ ์ฑ๊ฒฉ์ด ์กฐ๊ธ ๋ค๋ฅด๋ค)๊ฐ ์์๋ค. ์ฆ, ๋ง๋ ํ PHP ์ธ์ด ๊ฐ๋ฐ์ง์ด ํด์ผ ํ ์ผ์ ๋ ํ ํผ ์ ๋ฐ๊ณ ํ์ด์ค๋ถ์์ ํ ๊ฒ์ด๋ค. GitHub ํ์ด์ง
- ํ์ด์ค๋ถ๊ณผ ์๋ํ๋ ์ค, ๋ฏธ๋์ด์ํค๋ฟ๋ง ์๋๋ผ Magento์ WooCommerce๋ผ๋ ์ด์ปค๋จธ์ค ํ๋ซํผ์๋ PHP๊ฐ ์ฌ์ฉ๋๊ณ ์๋ค. Magento์ WooCommerce๋ ์ธ๊ณ 1, 2์๋ฅผ ๋คํฌ๋ ์คํ ์์ค ์ด์ปค๋จธ์ค ํ๋ซํผ์ด๋ค.
- Laravel, Codeigniter ๋ฑ์ ํ๋ ์์ํฌ๊ฐ ์๊ณ ์ปดํฌ์ ๋ผ๋ ์์กด์ฑ ๊ด๋ฆฌ ๋๊ตฌ๋ ์กด์ฌํ๋ค. ๋๋ฒ๊น ๋๊ตฌ๋ก๋ Xdebug๊ฐ ์ฐ์ธ๋ค.
9. PHP๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ ๋ชฉ๋ก[ํธ์ง]
๋๋ฌด์ํค์ ํญ๋ชฉ์ด ์๋ ๊ฒ๋ง ์ถ๊ฐํ๋ค. (๊ฐ๋๋ค ์)
- PocketMine-MP - ๋ง์ธํฌ๋ํํธ BE ์๋ฒ ํ๋ก๊ทธ๋จ
[1] ์ฌ์ค PHP๋ Perl๊ณผ ์ข ๋ ์ ์ฌํ๋ค. ๋ค๋ง C์ธ์ด์์ ํ์๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฏ๋ก C-like๋ก ๊ธฐ์ ํ์๋ค.
[2] PHP์์๋ ๋ณ์๋ฅผ ์ฌ์ ์ ์ ์ธํ ํ์๊ฐ ์๊ณ , $var = 9;์ด๋ฉด ์ซ์, $var = "String"; ์ด๋ฉด ๋ฌธ์์ด $var = true ์ด๋ฉด ์ฐธ๊ฑฐ์ง ๋ณ์๋ก ์ ์ฉ๋๋ฉฐ, ์ด๋ฏธ ์ ์ธ๋ ๋ฌธ์์ด์ด + ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ซ์๋ก ์ธ์ํ๋ค.
[3] ์คํฌ๋ฆฝํธ์ ์ธ์ด ์์ฑ์ผ๋ก
language๋ฅผ ์ฐ๋ ๊ฒ ๋ํ ์ฌ์ค์ ๋นํ์ค์ด๋ค. ํ์ค๋๋ก๋ผ๋ฉด type์ผ๋ก ์ฐ๋ ๊ฒ์ด ์ณ๋ค. HTML4 ์์ ๋ถํฐ ๋ ๊ฐ์ง ํํ๊ฐ ํผ์ฉ๋๊ณ ์์๋๋ฐ HTML5์์ ํ์๊ฐ ์ด์๋จ์ ๊ฒ.[4] php opcache
[5] ๊ธฐ์กด ํจ์๋ ์ง์ํ์ง๋ง, ์์ํ ์์ ๊ณ ์๋ค.
[6] PHP 8.0์์๋ ๋ณด์์ ์ํด ์๋ฌ๊ฐ ๋๋๋ก ๋ฐ๋์๋ค.
[7] Notice ์์ค์ ๋ก๊ทธ๋ก ๋ณด์ฌ์ฃผ๋๋ฐ php.ini์์ ์ค์ ์ ๊ป์๊ฒฝ์ฐ ๋ชจ๋ฅด๊ณ ์ง๋์น๊ธฐ ์ฝ๋ค.
[8] (Model)-์ถ๋ ฅ(View)-์
๋ ฅ ๋ฐ ์ ์ด(Controller)์ ํด๋นํ๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํด์ ์์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์.
[9] 95~2002๋
[10] ๊ทธ๋ฐ๋ฐ ๋ฃจ๋น ์จ ๋ ์ผ์ฆ ๋ฑ์ ์ํฅ์ ๋ฐ์ ๋ค์ํ MVC ํจํด์ ์ง์ํ๋ ์น ๊ฐ๋ฐ ํ๋ ์์ํฌ๋ค์ด ๊ฐ๋ฐ๋์๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ๋ณด๋ฉด ์คํ๋ ค ๋์ด๋๊ฐ ๋น์ทํ๊ฑฐ๋ ๋ฎ์์ก๋ค๊ณ ํ ์ ์๋ค. 2015๋
ํ์ฌ ๋์ธ๋ก ๋ ์ค๋ฅด๊ณ ์๋ Laravel ์น ํ๋ ์์ํฌ ๊ฐ์ ๊ฒฝ์ฐ์๋ GitHub์์ Python์ ๋ํ์ ์ธ ์น ๊ฐ๋ฐ ํ๋ ์์ํฌ์ธ Django์ star ์๋ฅผ ๋ฐ์ด๋์๋ค.
[11] PHPํ๋ก๊ทธ๋จ ์์ฑ ๊ถ์ฅ ๊ท์น
[12] 2016๋
์๋ .NET์ ์คํ ์์ค ๊ตฌํ์ฒด์ธ .NET Core๊ฐ ์ง์๋๊ธฐ ์์ํ๋ค.
[13] ๋ฐฐ์ด์ ๏ผป๏ผฝ๋ก ์ ์ธํ๊ธฐ, ๋ฐฐ์ด์ ๋ฆฌํดํ๋ ํจ์๋ฅผ ๊ณง๋ฐ๋ก ์ ๊ทผํ๊ธฐ ๋ฑ. ์ด๊ฒ์ ์ด๋ฏธ ์ค๋์ ๋ถํฐ JavaScript์์ ๊ตฌํ๋ ๊ฒ๋ค์ด๋ค. ์ด ์ธ์๋ JavaScript์์ ์ ๋ํ ์ผ๋ถ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๋ค.
[14] call by reference
[15] null coalescing operator
[16] ์ฆ PHP 7์์ ๋ฒ๊ทธ๋ฅผ ์ก์ง์๊ณ ์ง์ฌ์ง ์ฝ๋๋ค์ PHP8์์ ๋ฌธ์ ๊ฐ ๋๋ฌ๋ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
[17] ์ฌ๋ด์ผ๋ก header_remove๋ก ์ง์ธ ์ ์๋๋ฐ ์ง์ฐ์ง ์์์ ํ๋ก๊ทธ๋จ ์ ๋ณด๊ฐ ๋
ธ์ถ๋๋ฉด ์๋ฒ ๋ณด์์ ์ทจ์ฝํ ๊ฑฐ๋ผ๋ ์ง์ ์ด ์๋ค. #StackOverflow
[18] ์ธ๊ตญ์์๋ ๊ธฐ์
์ด ์คํ์์ค ํ๋ก์ ํธ๋ฅผ ์ด์ฉํ์ฌ ์์ฌ์ ์๋น์ค๋ฅผ ๊ตฌ์ถํ ๊ฒฝ์ฐ ๊ทธ ํ๋ก์ ํธ์ ๊ธฐ์ฌ(contribute)๋ฅผ ํ๋ ์ผ์ด ํํ๋ค.
[20] ์ฃผ๋ก ํ๋ก ํธ์๋์์ ์ฐ์์ผ๋ฉฐ, ํ์ฌ๋ PHP๋ฅผ ๋ฐํ์ผ๋ก ์์ฒด ๊ฐ๋ฐํ Hack ์ธ์ด๋ก ๋์ด๊ฐ๋ค.