RoadRunner: PHP๋Š” ์ฃฝ๋„๋ก ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Golang์ด ๋„์™€์ค๋‹ˆ๋‹ค.

RoadRunner: PHP๋Š” ์ฃฝ๋„๋ก ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Golang์ด ๋„์™€์ค๋‹ˆ๋‹ค.

ํ—ค์ด ํ•˜๋ธŒ๋ฅด! ์šฐ๋ฆฌ๋Š” Badoo์—์„œ ํ™œ๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค PHP ์„ฑ๋Šฅ ์ž‘์—…, ์šฐ๋ฆฌ๋Š” ์ด ์–ธ์–ด๋กœ ์ƒ๋‹นํžˆ ํฐ ์‹œ์Šคํ…œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์„ฑ๋Šฅ ๋ฌธ์ œ๋Š” ๋น„์šฉ ์ ˆ๊ฐ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. XNUMX๋…„ ์ด์ƒ ์ „์— ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์œ„ํ•ด PHP-FPM์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” PHP์šฉ ํŒจ์น˜ ์„ธํŠธ์˜€์œผ๋ฉฐ ๋‚˜์ค‘์— ๊ณต์‹ ๋ฐฐํฌํŒ์— ๋“ค์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ ๋ช‡ ๋…„ ๋™์•ˆ PHP๋Š” ํฐ ๋ฐœ์ „์„ ์ด๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๊ฐœ์„ ๋˜๊ณ  ์•ˆ์ •์„ฑ ์ˆ˜์ค€์ด ๋†’์•„์กŒ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  ์•„๋ฌด ๋ฌธ์ œ์—†์ด PHP์—์„œ ๋ฐ๋ชฌ๊ณผ ์ˆ˜๋ช…์ด ๊ธด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Spiral Scout๋Š” ๋” ๋ฐœ์ „ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. RoadRunner๋Š” PHP-FPM๊ณผ ๋‹ฌ๋ฆฌ ์š”์ฒญ ๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ถ”๊ฐ€์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์ง€๋งŒ). ํ˜„์žฌ ์ด ๋„๊ตฌ๋ฅผ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์•„์ง ๊ณต์œ ํ•  ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€์„ ๋”ํ•˜๊ธฐ ์œ„ํ•ด, Spiral Scout์˜ RoadRunner ๋ฐœํ‘œ ๋ฒˆ์—ญ๋ณธ์„ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์‚ฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์šฐ๋ฆฌ์—๊ฒŒ ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ PHP์™€ Go๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์–ธ์–ด์˜ ์ด์ ์„ ์–ป๊ณ  ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์„ ํ˜ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฆ๊ธฐ์‹ญ์‹œ์˜ค!

์ง€๋‚œ XNUMX๋…„ ๋™์•ˆ ๋ชฉ๋ก์— ์žˆ๋Š” ํšŒ์‚ฌ๋ฅผ ์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ํ–‰์šด 500, ์‚ฌ์šฉ์ž๊ฐ€ 500๋ช… ์ดํ•˜์ธ ๋น„์ฆˆ๋‹ˆ์Šค์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ ์—”์ง€๋‹ˆ์–ด๋“ค์€ PHP๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•ด ์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ XNUMX๋…„ ์ „ ์šฐ๋ฆฌ ์ œํ’ˆ์˜ ์„ฑ๋Šฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ™•์žฅ์„ฑ์—๋„ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นœ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐ์ˆ  ์Šคํƒ์— Golang(Go)์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฑฐ์˜ ์ฆ‰์‹œ ์šฐ๋ฆฌ๋Š” Go๋ฅผ ํ†ตํ•ด ์ตœ๋Œ€ 40๋ฐฐ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์œผ๋กœ ๋” ํฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ์กด PHP ์ œํ’ˆ์„ ํ™•์žฅํ•˜๊ณ  ๋‘ ์–ธ์–ด์˜ ์ด์ ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Go์™€ PHP์˜ ์กฐํ•ฉ์ด ์‹ค์ œ ๊ฐœ๋ฐœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€, Go์™€ PHP๊ฐ€ ๊ด€๋ จ๋œ ์ผ๋ถ€ ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋กœ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. 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 ์—”์ง€๋‹ˆ์–ด๋“ค์€ ์˜๋ฆฌํ•œ ์ง€์—ฐ ๋กœ๋”ฉ ๊ธฐ์ˆ , ๋งˆ์ดํฌ๋กœํ”„๋ ˆ์ž„์›Œํฌ, ์ตœ์ ํ™”๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์บ์‹œ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋…„ ๋™์•ˆ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์„ ๋ชจ์ƒ‰ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” ์—ฌ์ „ํžˆ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ์„ค์ •ํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋ฒˆ์—ญ์ž ์ฃผ: ์ด ๋ฌธ์ œ๋Š” ํ”„๋ฆฌ๋กœ๋“œ PHP 7.4์—์„œ)

Go๋ฅผ ์‚ฌ์šฉํ•˜๋Š” PHP๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์š”์ฒญ์—์„œ ์‚ด์•„๋‚จ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

cron ์ž‘์—…, CSV ํŒŒ์„œ, ๋Œ€๊ธฐ์—ด ์ฐจ๋‹จ๊ธฐ์™€ ๊ฐ™์ด ๋ช‡ ๋ถ„ ์ด์ƒ(์ตœ๋Œ€ ๋ช‡ ์‹œ๊ฐ„ ๋˜๋Š” ๋ฉฐ์น ) ์ง€์†๋˜๋Š” PHP ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ชจ๋‘ ๋™์ผํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์Œ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ํ•ญ์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผํ•˜๋ฏ€๋กœ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋กœ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ถ”๊ฐ€ ๋‹จ๊ณ„๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๊ท€์ค‘ํ•œ ๋ฐ€๋ฆฌ์ดˆ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ˆ˜๋ช…์ด ๊ธด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ง„๋‹จ์ด ์งœ์ฆ๋‚˜๋ฉฐ F5 ๋””๋ฒ„๊น…์ด ๋” ์ด์ƒ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

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

์ˆ˜๋ช…์ด ๊ธด PHP ์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ชจ๋ธ์„ ๊ฐ€์ ธ์™€์„œ HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ๋ณด๋‹ค ์‚ฌ์†Œํ•œ ์ž‘์—…์— ์ ์šฉํ•˜์—ฌ ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ๊ฒƒ์„ ๋กœ๋“œํ•  ํ•„์š”๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋จผ์ € HTTP ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๊ณ  ๋งค๋ฒˆ ์ฃฝ์ด์ง€ ์•Š๊ณ  ํ•˜๋‚˜์”ฉ PHP ์›Œ์ปค๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ˆœ์ˆ˜ํ•œ PHP(PHP-PM) ๋˜๋Š” C ํ™•์žฅ(Swoole)์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์„œ๋ฒ„๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋ฐฉ๋ฒ•์—๋Š” ๊ณ ์œ ํ•œ ์žฅ์ ์ด ์žˆ์ง€๋งŒ ๋‘ ์˜ต์…˜ ๋ชจ๋‘ ์šฐ๋ฆฌ์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋” ๋งŽ์€ ๊ฒƒ์„ ์›ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹จ์ˆœํ•œ ์›น ์„œ๋ฒ„ ์ด์ƒ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” PHP์˜ "์–ด๋ ค์šด ์‹œ์ž‘"๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋กœ๋ถ€ํ„ฐ ์šฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์„ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งž๊ฒŒ ์‰ฝ๊ฒŒ ์กฐ์ •ํ•˜๊ณ  ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Go๊ฐ€ ๋„์›€์ด ๋ ๊นŒ์š”? ์šฐ๋ฆฌ๋Š” ์–ธ์–ด๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์ž์ฒด์ ์ด๊ณ  ๋งค์šฐ ์šฐ์•„ํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋ชจ๋ธ(๋™์‹œ์„ฑ)๊ณผ HTTP ์ž‘์—…์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ฒœ ๊ฐœ์˜ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฒฐํ•ฉ์˜ ์–ด๋ ค์›€

๋จผ์ € ๋‘ ๊ฐœ ์ด์ƒ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์„œ๋กœ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ์ˆ˜ํ•œ ๋„์„œ๊ด€ Alex Palaestras, PHP์™€ Go ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค(Apache์˜ mod_php์™€ ์œ ์‚ฌ). ๊ทธ๋Ÿฌ๋‚˜์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์‚ฌ์šฉ์„ ์ œํ•œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์†Œ์ผ“/ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ง€๋‚œ ์ˆ˜์‹ญ ๋…„ ๋™์•ˆ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ž…์ฆ๋˜์—ˆ์œผ๋ฉฐ ์šด์˜ ์ฒด์ œ ์ˆ˜์ค€์—์„œ ์ž˜ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜๊ณผ ์ „์†ก ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋กœํ† ์ฝœ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ๋กœ ์ด ์œ ํ˜•์˜ ํ”„๋กœํ† ์ฝœ์€ ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋„ท์ŠคํŠธ๋ง ั ๊ณ ์ • ํฌ๊ธฐ ํŒจํ‚ท ํ—ค๋” (์ด ๊ฒฝ์šฐ 17๋ฐ”์ดํŠธ) ํŒจํ‚ท ์œ ํ˜•, ํฌ๊ธฐ ๋ฐ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ด์ง„ ๋งˆ์Šคํฌ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•œ PHP ์ธก์—์„œ ํŒฉ ๊ธฐ๋Šฅ, Go ์ธก๋ฉด์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ธ์ฝ”๋”ฉ/๋ฐ”์ด๋„ˆ๋ฆฌ.

ํ•˜๋‚˜์˜ ํ”„๋กœํ† ์ฝœ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•˜๊ณ  ํ˜ธ์ถœ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. PHP์—์„œ ์ง์ ‘ net/rpc go ์„œ๋น„์Šค. ๋‚˜์ค‘์— Go ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์— ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค๋ฅธ ์˜คํ”ˆ ์†Œ์Šค ์ œํ’ˆ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๋ฆฌ์ง€.

์—ฌ๋Ÿฌ PHP ์ž‘์—…์ž์— ์ž‘์—… ๋ถ„์‚ฐ

์ƒํ˜ธ ์ž‘์šฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•œ ํ›„ ์ž‘์—…์„ PHP ํ”„๋กœ์„ธ์Šค๋กœ ์ „์†กํ•˜๋Š” ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์ด ๋„์ฐฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•  ๋ฌด๋ฃŒ ์ž‘์—…์ž๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ž/ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ "์ข…๋ฃŒ"๋˜๋ฉด ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์ฒดํ•  ์ƒˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ž/ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ž ํ’€๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

RoadRunner: PHP๋Š” ์ฃฝ๋„๋ก ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Golang์ด ๋„์™€์ค๋‹ˆ๋‹ค.

ํ™œ์„ฑ ์ž‘์—…์ž ํ’€์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํผ๋ง๋œ ์ฑ„๋„, ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ "์ฃฝ์€" ์ž‘์—…์ž๋ฅผ ํ’€์—์„œ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—…์ž์˜ ์˜ค๋ฅ˜ ๋ฐ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์œผ๋กœ ์ œ์‹œ๋œ ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘๋™ํ•˜๋Š” PHP ์„œ๋ฒ„๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์›น ์„œ๋ฒ„๋กœ ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋“ค์–ด์˜ค๋Š” HTTP ์š”์ฒญ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” PHP ํ‘œ์ค€์„ ์„ ํƒํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๊ทธ๋ƒฅ ๋ณ€ํ™˜ Go to format์˜ net/http ์š”์ฒญ PSR-7์˜ค๋Š˜๋‚  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋Œ€๋ถ€๋ถ„์˜ PHP ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

PSR-7์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ธฐ ๋•Œ๋ฌธ์—(๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๊ณ  ๋งํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์Œ) ๊ฐœ๋ฐœ์ž๋Š” ์›์น™์ ์œผ๋กœ ์š”์ฒญ์„ ๊ธ€๋กœ๋ฒŒ ์—”ํ„ฐํ‹ฐ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ˆ˜๋ช…์ด ๊ธด PHP ํ”„๋กœ์„ธ์Šค์˜ ๊ฐœ๋…๊ณผ ์ž˜ ๋งž์Šต๋‹ˆ๋‹ค. ์•„์ง ์ด๋ฆ„์ด ์ง€์ •๋˜์ง€ ์•Š์€ ์ตœ์ข… ๊ตฌํ˜„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

RoadRunner: PHP๋Š” ์ฃฝ๋„๋ก ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Golang์ด ๋„์™€์ค๋‹ˆ๋‹ค.

๋กœ๋“œ๋Ÿฌ๋„ˆ ์†Œ๊ฐœ - ๊ณ ์„ฑ๋Šฅ PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„

์šฐ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ์ž‘์—…์€ API ๋ฐฑ์—”๋“œ์˜€๋Š”๋ฐ, ์ด๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ฒŒ ํญ๋ฐœํ•ฉ๋‹ˆ๋‹ค(ํ‰์†Œ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ž์ฃผ). ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ nginx๋กœ ์ถฉ๋ถ„ํ–ˆ์ง€๋งŒ, ์˜ˆ์ƒ๋˜๋Š” ๋ถ€ํ•˜ ์ฆ๊ฐ€์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด๊ฒŒ ์‹œ์Šคํ…œ ๊ท ํ˜•์„ ๋งž์ถœ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •๊ธฐ์ ์œผ๋กœ 502 ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด 2018๋…„ ์ดˆ์— ์ฒซ ๋ฒˆ์งธ PHP/Go ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฆ‰์‹œ ๋†€๋ผ์šด ํšจ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” 502 ์˜ค๋ฅ˜๋ฅผ ์™„์ „ํžˆ ์—†์•ด์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„ ์ˆ˜๋ฅผ XNUMX/XNUMX๋กœ ์ค„์—ฌ ๋งŽ์€ ๋น„์šฉ์„ ์ ˆ์•ฝํ•˜๊ณ  ์—”์ง€๋‹ˆ์–ด์™€ ์ œํ’ˆ ๊ด€๋ฆฌ์ž์˜ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ฌํ•ด ์ค‘๋ฐ˜๊นŒ์ง€ ์†”๋ฃจ์…˜์„ ๊ฐœ์„ ํ•˜๊ณ  MIT ๋ผ์ด์„ผ์Šค๋กœ GitHub์— ๊ฒŒ์‹œํ•˜๊ณ  ์ด๋ฆ„์„ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ ๋Ÿฌ๋„ˆ, ๋”ฐ๋ผ์„œ ๋†€๋ผ์šด ์†๋„์™€ ํšจ์œจ์„ฑ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

RoadRunner๊ฐ€ ๊ฐœ๋ฐœ ์Šคํƒ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹ ์ฒญ ๋กœ๋“œ ๋Ÿฌ๋„ˆ Go ์ธก์—์„œ ๋ฏธ๋“ค์›จ์–ด net/http๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์ด PHP์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— JWT ํ™•์ธ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  Prometheus์—์„œ ์ „์—ญ์ ์œผ๋กœ WebSocket ๋ฐ ์ง‘๊ณ„ ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด์žฅ๋œ RPC ๋•๋ถ„์— ํ™•์žฅ ๋ž˜ํผ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ PHP์šฉ Go ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ API๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ RoadRunner๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋น„ HTTP ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ์—๋Š” PHP์—์„œ ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. AWS ๋žŒ๋‹ค, ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๊ธฐ์—ด ์ฐจ๋‹จ๊ธฐ ์ƒ์„ฑ ๋ฐ ์ถ”๊ฐ€ gRPC ์šฐ๋ฆฌ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—.

PHP ๋ฐ Go ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋„์›€์œผ๋กœ ์†”๋ฃจ์…˜์˜ ์•ˆ์ •์„ฑ์„ ๊ฐœ์„ ํ•˜๊ณ  ์ผ๋ถ€ ํ…Œ์ŠคํŠธ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์„ ์ตœ๋Œ€ 40๋ฐฐ๊นŒ์ง€ ํ–ฅ์ƒํ–ˆ์œผ๋ฉฐ ๋””๋ฒ„๊น… ๋„๊ตฌ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  Symfony ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ํ†ตํ•ฉ์„ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ HTTPS, HTTP/2, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ PSR-17.

๊ฒฐ๋ก 

์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹PHP๊ฐ€ ๋Š๋ฆฌ๊ณ  ๋‹ค๋ฃจ๊ธฐ ํž˜๋“  ์–ธ์–ด๋กœ ์›Œ๋“œํ”„๋ ˆ์Šค์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ๋งŒ ์ ํ•ฉํ•œ ๊ตฌ์‹ ๊ฐœ๋…์— ์‚ฌ๋กœ์žกํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ๋žŒ๋“ค์€ ์‹ฌ์ง€์–ด PHP์— ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ถฉ๋ถ„ํžˆ ์ปค์ง€๋ฉด ๋” "์„ฑ์ˆ™ํ•œ" ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๊ณ  ์ˆ˜๋…„ ๋™์•ˆ ์ถ•์ ๋œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•ด ๋Œ€๋‹ตํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ๋งŒ์ด PHP์— ๋Œ€ํ•œ ์ œํ•œ์„ ์„ค์ •ํ–ˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ํ‰์ƒ์„ ํ•œ ์–ธ์–ด์—์„œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ „ํ™˜ํ•˜๊ฑฐ๋‚˜ ํ•„์š”์— ๋งž๋Š” ์–ธ์–ด๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์–ธ์–ด๋ฅผ ๋„๊ตฌ๋กœ ์ƒ๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PHP์™€ ๊ฐ™์€ ์–ธ์–ด์˜ ๊ฒฐํ•จ์ด ์‹ค์ œ๋กœ ์„ฑ๊ณต์˜ ์ด์œ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Go์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ํ•œ ์–ธ์–ด๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๊ฐ•๋ ฅํ•œ ์ œํ’ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐ€์ง€ Go ๋ฐ PHP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•œ ๊ฒฐ๊ณผ ์šฐ๋ฆฌ๋Š” Go ๋ฐ PHP๋ฅผ ์ข‹์•„ํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ์œ„ํ•ด ํ•˜๋‚˜๋ฅผ ํฌ์ƒํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์šฐ๋ฆฌ๋Š” ์ด ์ด์ค‘ ์Šคํƒ์—์„œ ๋” ๋งŽ์€ ๊ฐ€์น˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

UPD: RoadRunner์˜ ์ œ์ž‘์ž์ด์ž ์›๋ณธ ๊ธฐ์‚ฌ์˜ ๊ณต๋™ ์ €์ž๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ผ€์‹œ์Šค

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€