ํค์ด ํ๋ธ๋ฅด! ์ฐ๋ฆฌ๋ Badoo์์ ํ๋ํ๊ณ ์์ต๋๋ค
์ต๊ทผ ๋ช ๋ ๋์ PHP๋ ํฐ ๋ฐ์ ์ ์ด๋ฃจ์์ต๋๋ค. ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๊ฐ์ ๋๊ณ ์์ ์ฑ ์์ค์ด ๋์์ก์ต๋๋ค. ์ค๋๋ ์๋ฌด ๋ฌธ์ ์์ด PHP์์ ๋ฐ๋ชฌ๊ณผ ์๋ช ์ด ๊ธด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด Spiral Scout๋ ๋ ๋ฐ์ ํ ์ ์์์ต๋๋ค. RoadRunner๋ PHP-FPM๊ณผ ๋ฌ๋ฆฌ ์์ฒญ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํ์ง ์์ผ๋ฏ๋ก ์ถ๊ฐ์ ์ธ ์ฑ๋ฅ ํฅ์์ ์ ๊ณตํฉ๋๋ค(์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค์ง๋ง). ํ์ฌ ์ด ๋๊ตฌ๋ฅผ ์คํํ๊ณ ์์ง๋ง ์์ง ๊ณต์ ํ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค. ๊ทธ๋ค์ ๊ธฐ๋ค๋ฆฌ๋ ์ฆ๊ฑฐ์์ ๋ํ๊ธฐ ์ํด, Spiral Scout์ RoadRunner ๋ฐํ ๋ฒ์ญ๋ณธ์ ๊ฒ์ํฉ๋๋ค.
๊ธฐ์ฌ์ ์ ๊ทผ ๋ฐฉ์์ ์ฐ๋ฆฌ์๊ฒ ๊ฐ๊น์ต๋๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ PHP์ Go๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ์ฌ ๋ ์ธ์ด์ ์ด์ ์ ์ป๊ณ ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ ํธํ์ง ์์ต๋๋ค.
์ง๋ XNUMX๋
๋์ ๋ชฉ๋ก์ ์๋ ํ์ฌ๋ฅผ ์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค์์ต๋๋ค.
๊ฑฐ์ ์ฆ์ ์ฐ๋ฆฌ๋ Go๋ฅผ ํตํด ์ต๋ 40๋ฐฐ์ ์ฑ๋ฅ ํฅ์์ผ๋ก ๋ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ธฐ์กด PHP ์ ํ์ ํ์ฅํ๊ณ ๋ ์ธ์ด์ ์ด์ ์ ๊ฒฐํฉํ์ฌ ๊ฐ์ ํ ์ ์์์ต๋๋ค.
Go์ PHP์ ์กฐํฉ์ด ์ค์ ๊ฐ๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ด๋ป๊ฒ ๋์์ด ๋๋์ง, Go์ PHP๊ฐ ๊ด๋ จ๋ ์ผ๋ถ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํ ์ ์๋ ๋๊ตฌ๋ก ์ด๋ป๊ฒ ๋ฐ๋์๋์ง ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ผ์์ ์ธ PHP ๊ฐ๋ฐ ํ๊ฒฝ
Go๋ฅผ ์ฌ์ฉํ์ฌ ์ฃฝ์ด๊ฐ๋ PHP ๋ชจ๋ธ์ ๋์ด๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ธฐ ์ ์ ๊ธฐ๋ณธ PHP ๊ฐ๋ฐ ํ๊ฒฝ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ nginx ์น ์๋ฒ์ PHP-FPM ์๋ฒ์ ์กฐํฉ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํฉ๋๋ค. ์ ์๋ ์ ์ ํ์ผ์ ์ ๊ณตํ๊ณ ํน์ ์์ฒญ์ PHP-FPM์ผ๋ก ๋ฆฌ๋๋ ์ ํ๋ ๋ฐ๋ฉด PHP-FPM ์์ฒด๋ PHP ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. ๋ ์ธ๊ธฐ ์๋ Apache์ mod_php ์กฐํฉ์ ์ฌ์ฉํ๊ณ ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์๋ํ๋๋ผ๋ ์๋ฆฌ๋ ๋์ผํฉ๋๋ค.
PHP-FPM์ด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์์ฒญ์ด ๋ค์ด์ค๋ฉด PHP-FPM์ PHP ํ์ ํ๋ก์ธ์ค๋ฅผ ์ด๊ธฐํํ๊ณ ์์ฒญ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ํ(_GET, _POST, _SERVER ๋ฑ)์ ์ผ๋ถ๋ก ์ ๋ฌํฉ๋๋ค.
PHP ์คํฌ๋ฆฝํธ ์คํ ์ค์๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก ์๋ก์ด ์ ๋ ฅ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ป๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ฐ๊ณ ๋ค์ ์ด๊ธฐํํ๋ ๊ฒ์ ๋๋ค.
์ด ์คํ ๋ชจ๋ธ์๋ ๋ง์ ์ด์ ์ด ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์๋น์ ๋ํด ๋๋ฌด ๊ฑฑ์ ํ ํ์๊ฐ ์์ผ๋ฉฐ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์์ ํ ๊ฒฉ๋ฆฌ๋์ด ์์ผ๋ฉฐ ๊ทธ ์ค ํ๋๊ฐ "์ข ๋ฃ"๋๋ฉด ์๋์ผ๋ก ์ฌ์์ฑ๋๊ณ ๋๋จธ์ง ํ๋ก์ธ์ค์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ ๊ทผ ๋ฐฉ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฅํ๋ ค๊ณ ํ ๋ ๋ํ๋๋ ๋จ์ ๋ ์์ต๋๋ค.
์ผ๋ฐ PHP ํ๊ฒฝ์ ๋จ์ ๋ฐ ๋นํจ์จ
์ ๋ฌธ PHP ๊ฐ๋ฐ์๋ผ๋ฉด ํ๋ ์์ํฌ๋ฅผ ์ ํํ์ฌ ์ ํ๋ก์ ํธ๋ฅผ ์์ํ ์์น๋ฅผ ์๊ณ ์์ ๊ฒ์ ๋๋ค. ์ข ์์ฑ ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ORM, ๋ฒ์ญ ๋ฐ ํ ํ๋ฆฟ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ฌผ๋ก ๋ชจ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ํ๋์ ๊ฐ์ฒด(Symfony/HttpFoundation ๋๋ PSR-7)์ ํธ๋ฆฌํ๊ฒ ๋ฃ์ ์ ์์ต๋๋ค. ํ๋ ์์ํฌ๋ ๋ฉ์ง๋ค!
๊ทธ๋ฌ๋ ๋ชจ๋ ๊ฒ์๋ ๋๊ฐ๊ฐ ์์ต๋๋ค. ๋ชจ๋ ์ํฐํ๋ผ์ด์ฆ ์์ค ํ๋ ์์ํฌ์์ ๋จ์ํ ์ฌ์ฉ์ ์์ฒญ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ต์ํ ์์ญ ๊ฐ์ ํ์ผ์ ๋ก๋ํ๊ณ ์๋ง์ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ฌ๋ฌ ๊ตฌ์ฑ์ ๊ตฌ๋ฌธ ๋ถ์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ต์ ์ ๊ฒฝ์ฐ ๊ฐ ์์ ์ ์๋ฃํ ํ ๋ชจ๋ ๊ฒ์ ์ฌ์ค์ ํ๊ณ ๋ค์ ์์ํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐฉ๊ธ ์์ํ ๋ชจ๋ ์ฝ๋๊ฐ ์ธ๋ชจ ์๊ฒ ๋์ด ๋ ์ด์ ๋ค๋ฅธ ์์ฒญ์ ์ฒ๋ฆฌํ์ง ์๊ฒ ๋ฉ๋๋ค. ๋ค๋ฅธ ์ธ์ด๋ก ๊ธ์ ์ฐ๋ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ด๊ฒ์ ๋งํ๋ฉด ๊ทธ์ ์ผ๊ตด์ ๋นํฉํ๋ ๊ฒ์ ๋ณด๊ฒ ๋ ๊ฒ์ ๋๋ค.
PHP ์์ง๋์ด๋ค์ ์๋ฆฌํ ์ง์ฐ ๋ก๋ฉ ๊ธฐ์ , ๋ง์ดํฌ๋กํ๋ ์์ํฌ, ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์บ์ ๋ฑ์ ์ฌ์ฉํ์ฌ ์๋
๋์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ๋ชจ์ํด ์์ต๋๋ค. ํ์ง๋ง ๊ฒฐ๊ตญ์๋ ์ฌ์ ํ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ค์ ํ๊ณ ๋ค์ ์์ํด์ผ ํฉ๋๋ค. (๋ฒ์ญ์ ์ฃผ: ์ด ๋ฌธ์ ๋
Go๋ฅผ ์ฌ์ฉํ๋ PHP๋ ํ๋ ์ด์์ ์์ฒญ์์ ์ด์๋จ์ ์ ์์ต๋๊น?
cron ์์ , CSV ํ์, ๋๊ธฐ์ด ์ฐจ๋จ๊ธฐ์ ๊ฐ์ด ๋ช ๋ถ ์ด์(์ต๋ ๋ช ์๊ฐ ๋๋ ๋ฉฐ์น ) ์ง์๋๋ PHP ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ๋ชจ๋ ๋์ผํ ์๋๋ฆฌ์ค์ ๋ฐ๋ผ ์๋ํฉ๋๋ค. ์์ ์ ๊ฒ์ํ๊ณ ์คํํ๊ณ ๋ค์ ์์ ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ฝ๋๋ ํญ์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ฏ๋ก ํ๋ ์์ํฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๋ํ๋ ๋ฐ ํ์ํ ์ถ๊ฐ ๋จ๊ณ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๊ท์คํ ๋ฐ๋ฆฌ์ด๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์๋ช ์ด ๊ธด ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒ์ ์ฝ์ง ์์ต๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ํ๋ก์ธ์ค๊ฐ ์์ ํ ์ข ๋ฃ๋๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ง๋จ์ด ์ง์ฆ๋๋ฉฐ F5 ๋๋ฒ๊น ์ด ๋ ์ด์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
PHP 7์ด ์ถ์๋๋ฉด์ ์ํฉ์ด ๊ฐ์ ๋์์ต๋๋ค. ์ ๋ขฐํ ์ ์๋ ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๋ฑ์ฅํ๊ณ , ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ๋ ์ฌ์์ก์ผ๋ฉฐ, ์ด์ ์ปค๋ ํ์ฅ์ด ๋์ถ๋์ง ์์ต๋๋ค. ์ฌ์ค, ์์ง๋์ด๋ ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์ํ๊ณ ์ฝ๋์ ์ํ ๋ฌธ์ ๋ฅผ ์ธ์ํด์ผ ํฉ๋๋ค(์ด๋ฌํ ์ฌํญ์ ๋ฌด์ํ ์ ์๋ ์ธ์ด๊ฐ ์์ต๋๊น?). ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ PHP 7์ ์ฐ๋ฆฌ๋ฅผ ์ํด ์ค๋น๋ ๋๋ผ์์ด ์ ์ต๋๋ค.
์๋ช ์ด ๊ธด PHP ์คํฌ๋ฆฝํธ๋ก ์์ ํ๋ ๋ชจ๋ธ์ ๊ฐ์ ธ์์ HTTP ์์ฒญ ์ฒ๋ฆฌ์ ๊ฐ์ ๋ณด๋ค ์ฌ์ํ ์์ ์ ์ ์ฉํ์ฌ ๊ฐ ์์ฒญ์ ๋ํด ์ฒ์๋ถํฐ ๋ชจ๋ ๊ฒ์ ๋ก๋ํ ํ์๋ฅผ ์์จ ์ ์์ต๋๊น?
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋จผ์ HTTP ์์ฒญ์ ์๋ฝํ๊ณ ๋งค๋ฒ ์ฃฝ์ด์ง ์๊ณ ํ๋์ฉ PHP ์์ปค๋ก ๋ฆฌ๋๋ ์ ํ ์ ์๋ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํด์ผ ํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์์ํ PHP(PHP-PM) ๋๋ C ํ์ฅ(Swoole)์ ์ฌ์ฉํ์ฌ ์น ์๋ฒ๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋ฐฉ๋ฒ์๋ ๊ณ ์ ํ ์ฅ์ ์ด ์์ง๋ง ๋ ์ต์ ๋ชจ๋ ์ฐ๋ฆฌ์๊ฒ ์ ํฉํ์ง ์์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ ๋ง์ ๊ฒ์ ์ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋จ์ํ ์น ์๋ฒ ์ด์์ด ํ์ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ PHP์ "์ด๋ ค์ด ์์"๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ก๋ถํฐ ์ฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๋ ์๋ฃจ์ ์ ์ป์ ์ ์๊ธฐ๋ฅผ ๊ธฐ๋ํ์ต๋๋ค. ๋์์ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๊ฒ ์ฝ๊ฒ ์กฐ์ ํ๊ณ ํ์ฅํ ์ ์์ต๋๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ํ์ํ์ต๋๋ค.
Go๊ฐ ๋์์ด ๋ ๊น์? ์ฐ๋ฆฌ๋ ์ธ์ด๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ก ์ปดํ์ผํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๊ณ ์์์ต๋๋ค. ํฌ๋ก์ค ํ๋ซํผ์ ๋๋ค. ์์ฒด์ ์ด๊ณ ๋งค์ฐ ์ฐ์ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ชจ๋ธ(๋์์ฑ)๊ณผ HTTP ์์ ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์์ฒ ๊ฐ์ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํตํฉ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ ๊ฐ์ง ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฒฐํฉ์ ์ด๋ ค์
๋จผ์ ๋ ๊ฐ ์ด์์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์๋ก ํต์ ํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํด์ผ ํ์ต๋๋ค.
์๋ฅผ ๋ค์ด,
์ฐ๋ฆฌ๋ ์์ผ/ํ์ดํ๋ผ์ธ์ ํตํด ํ๋ก์ธ์ค ๊ฐ์ ์ํธ ์์ฉ์ ๊ตฌ์ถํ๊ธฐ ์ํด ๋ณด๋ค ์ผ๋ฐ์ ์ธ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ง๋ ์์ญ ๋ ๋์ ์ ๋ขฐํ ์ ์๋ ๊ฒ์ผ๋ก ์ ์ฆ๋์์ผ๋ฉฐ ์ด์ ์ฒด์ ์์ค์์ ์ ์ต์ ํ๋์์ต๋๋ค.
๋จผ์ ํ๋ก์ธ์ค ๊ฐ ๋ฐ์ดํฐ ๊ตํ๊ณผ ์ ์ก ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋จํ ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ ๋ง๋ค์์ต๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ํํ๋ก ์ด ์ ํ์ ํ๋กํ ์ฝ์ ๋ค์๊ณผ ์ ์ฌํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ PHP ์ธก์์
ํ๋์ ํ๋กํ ์ฝ๋ก๋ ์ถฉ๋ถํ์ง ์์ ๊ฒ ๊ฐ์๊ณ ํธ์ถ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
์ฌ๋ฌ PHP ์์ ์์ ์์ ๋ถ์ฐ
์ํธ ์์ฉ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ ํ ์์ ์ PHP ํ๋ก์ธ์ค๋ก ์ ์กํ๋ ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๊ธฐ ์์ํ์ต๋๋ค. ์์ ์ด ๋์ฐฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ์์ ์ ์คํํ ๋ฌด๋ฃ ์์ ์๋ฅผ ์ ํํด์ผ ํฉ๋๋ค. ์์ ์/ํ๋ก์ธ์ค๊ฐ ์ค๋ฅ์ ํจ๊ป ์ข ๋ฃ๋๊ฑฐ๋ "์ข ๋ฃ"๋๋ฉด ์ด๋ฅผ ์ ๊ฑฐํ๊ณ ๋์ฒดํ ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํฉ๋๋ค. ์์ ์/ํ๋ก์ธ์ค๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ์์ ์ ์ํํ ์ ์๋ ์์ ์ ํ๋ก ๋ฐํํฉ๋๋ค.
ํ์ฑ ์์
์ ํ์ ์ ์ฅํ๊ธฐ ์ํด ๋ค์์ ์ฌ์ฉํ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ์ ์๋ ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ์๋ํ๋ PHP ์๋ฒ๋ฅผ ์ป์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ด ์น ์๋ฒ๋ก ์๋ํ๊ธฐ ์์ํ๋ ค๋ฉด ๋ค์ด์ค๋ HTTP ์์ฒญ์ ๋ํ๋ด๋ ์ ๋ขฐํ ์ ์๋ PHP ํ์ค์ ์ ํํด์ผ ํ์ต๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๊ทธ๋ฅ
PSR-7์ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ธฐ ๋๋ฌธ์(๊ธฐ์ ์ ์ผ๋ก๋ ๊ทธ๋ ์ง ์๋ค๊ณ ๋งํ๋ ์ฌ๋๋ ์์) ๊ฐ๋ฐ์๋ ์์น์ ์ผ๋ก ์์ฒญ์ ๊ธ๋ก๋ฒ ์ํฐํฐ๋ก ์ทจ๊ธํ์ง ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์๋ช ์ด ๊ธด PHP ํ๋ก์ธ์ค์ ๊ฐ๋ ๊ณผ ์ ๋ง์ต๋๋ค. ์์ง ์ด๋ฆ์ด ์ง์ ๋์ง ์์ ์ต์ข ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ก๋๋ฌ๋ ์๊ฐ - ๊ณ ์ฑ๋ฅ PHP ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ
์ฐ๋ฆฌ์ ์ฒซ ๋ฒ์งธ ํ ์คํธ ์์ ์ API ๋ฐฑ์๋์๋๋ฐ, ์ด๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์์ธกํ ์ ์๊ฒ ํญ๋ฐํฉ๋๋ค(ํ์๋ณด๋ค ํจ์ฌ ๋ ์์ฃผ). ๋๋ถ๋ถ์ ๊ฒฝ์ฐ nginx๋ก ์ถฉ๋ถํ์ง๋ง, ์์๋๋ ๋ถํ ์ฆ๊ฐ์ ๋ํด ์ถฉ๋ถํ ๋น ๋ฅด๊ฒ ์์คํ ๊ท ํ์ ๋ง์ถ ์ ์์๊ธฐ ๋๋ฌธ์ ์ ๊ธฐ์ ์ผ๋ก 502 ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด ์๋ฃจ์ ์ ๋์ฒดํ๊ธฐ ์ํด 2018๋ ์ด์ ์ฒซ ๋ฒ์งธ PHP/Go ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๋ฐฐํฌํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฆ์ ๋๋ผ์ด ํจ๊ณผ๋ฅผ ์ป์์ต๋๋ค! ์ฐ๋ฆฌ๋ 502 ์ค๋ฅ๋ฅผ ์์ ํ ์์ด์ ๋ฟ๋ง ์๋๋ผ ์๋ฒ ์๋ฅผ XNUMX/XNUMX๋ก ์ค์ฌ ๋ง์ ๋น์ฉ์ ์ ์ฝํ๊ณ ์์ง๋์ด์ ์ ํ ๊ด๋ฆฌ์์ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ค์ผ ์ ์์์ต๋๋ค.
์ฌํด ์ค๋ฐ๊น์ง ์๋ฃจ์
์ ๊ฐ์ ํ๊ณ MIT ๋ผ์ด์ผ์ค๋ก GitHub์ ๊ฒ์ํ๊ณ ์ด๋ฆ์ ์ง์ ํ์ต๋๋ค.
RoadRunner๊ฐ ๊ฐ๋ฐ ์คํ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ
์ ์ฒญ
๋ด์ฅ๋ RPC ๋๋ถ์ ํ์ฅ ๋ํผ๋ฅผ ์์ฑํ์ง ์๊ณ ๋ PHP์ฉ Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ API๋ฅผ ์ด ์ ์์ต๋๋ค. ๋ ์ค์ํ ๊ฒ์ RoadRunner๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ๋น HTTP ์๋ฒ๋ฅผ ๋ฐฐํฌํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์์ ์๋ PHP์์ ํธ๋ค๋ฌ ์คํ์ด ํฌํจ๋ฉ๋๋ค.
PHP ๋ฐ Go ์ปค๋ฎค๋ํฐ์ ๋์์ผ๋ก ์๋ฃจ์ ์ ์์ ์ฑ์ ๊ฐ์ ํ๊ณ ์ผ๋ถ ํ ์คํธ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ต๋ 40๋ฐฐ๊น์ง ํฅ์ํ์ผ๋ฉฐ ๋๋ฒ๊น ๋๊ตฌ๋ฅผ ๊ฐ์ ํ๊ณ Symfony ํ๋ ์์ํฌ์์ ํตํฉ์ ๊ตฌํํ์ผ๋ฉฐ HTTPS, HTTP/2, ํ๋ฌ๊ทธ์ธ ๋ฐ PSR-17.
๊ฒฐ๋ก
์ผ๋ถ ์ฌ๋๋ค์ ์ฌ์ ํ โโPHP๊ฐ ๋๋ฆฌ๊ณ ๋ค๋ฃจ๊ธฐ ํ๋ ์ธ์ด๋ก ์๋ํ๋ ์ค์ฉ ํ๋ฌ๊ทธ์ธ์ ์์ฑํ๋ ๋ฐ๋ง ์ ํฉํ ๊ตฌ์ ๊ฐ๋ ์ ์ฌ๋ก์กํ ์์ต๋๋ค. ์ด ์ฌ๋๋ค์ ์ฌ์ง์ด PHP์ ํ๊ณ๊ฐ ์๋ค๊ณ ๋งํ ์๋ ์์ต๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ถฉ๋ถํ ์ปค์ง๋ฉด ๋ "์ฑ์ํ" ์ธ์ด๋ฅผ ์ ํํ๊ณ ์๋ ๋์ ์ถ์ ๋ ์ฝ๋ ๊ธฐ๋ฐ์ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ๋ํด ๋๋ตํ๊ณ ์ถ์ต๋๋ค. ๋ค์ ์๊ฐํ์ญ์์ค. ์ฐ๋ฆฌ๋ ๋น์ ๋ง์ด PHP์ ๋ํ ์ ํ์ ์ค์ ํ๋ค๊ณ ๋ฏฟ์ต๋๋ค. ํ์์ ํ ์ธ์ด์์ ๋ค๋ฅธ ์ธ์ด๋ก ์ ํํ๊ฑฐ๋ ํ์์ ๋ง๋ ์ธ์ด๋ฅผ ์ฐพ๊ฑฐ๋ ์ธ์ด๋ฅผ ๋๊ตฌ๋ก ์๊ฐํ๊ธฐ ์์ํ ์ ์์ต๋๋ค. PHP์ ๊ฐ์ ์ธ์ด์ ๊ฒฐํจ์ด ์ค์ ๋ก ์ฑ๊ณต์ ์ด์ ์ผ ์ ์์ต๋๋ค. Go์ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด์ ๊ฒฐํฉํ๋ฉด ํ ์ธ์ด๋ง ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๊ฐ๋ ฅํ ์ ํ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ฌ๋ฌ ๊ฐ์ง Go ๋ฐ PHP๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ ๊ฒฐ๊ณผ ์ฐ๋ฆฌ๋ Go ๋ฐ PHP๋ฅผ ์ข์ํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๊ฒ์ ์ํด ํ๋๋ฅผ ํฌ์ํ ๊ณํ์ด ์์ต๋๋ค. ๋ฐ๋๋ก ์ฐ๋ฆฌ๋ ์ด ์ด์ค ์คํ์์ ๋ ๋ง์ ๊ฐ์น๋ฅผ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ๊ฒ์ ๋๋ค.
UPD: RoadRunner์ ์ ์์์ด์ ์๋ณธ ๊ธฐ์ฌ์ ๊ณต๋ ์ ์๋ฅผ ํ์ํฉ๋๋ค.
์ถ์ฒ : habr.com