PHP는 왜 비동기가 필요한가?
Source: Dev.to
“The most dangerous phrase in the language is ‘We’ve always done it this way.’” — Grace Hopper
Introduction
PHP는 아직 언어 수준에서 동시 실행을 지원하지 않는 마지막 주요 언어 중 하나입니다. Python은 asyncio, JavaScript는 이벤트 루프를 기반으로 네이티브하게 동작하며, Go는 goroutine, Kotlin은 coroutine을 제공합니다. 대부분의 실제 애플리케이션이 I/O 대기(IO‑bound) 시간에 대부분을 소비함에도 불구하고 PHP는 여전히 “하나의 요청 — 하나의 프로세스” 패러다임에 머물러 있습니다.
Current implementations
PHP에서 비동기는 현재 Swoole, AMPHP, ReactPHP와 같은 확장 모듈을 통해 구현됩니다. 각 확장은 서로 호환되지 않는 API, 자체 데이터베이스 드라이버, HTTP 클라이언트 및 서버를 갖는 독자적인 생태계를 형성합니다.
Problems
- 코드 중복 – 각 확장은 MySQL, PostgreSQL, Redis 등 시스템에 대한 드라이버를 새로 작성해야 합니다.
- 비호환성 – Swoole용으로 작성된 라이브러리는 AMPHP에서 작동하지 않으며 그 반대도 마찬가지입니다.
- 제한 사항 – 확장은 핵심에 접근할 수 없기 때문에 표준 PHP 함수(
file_get_contents,fread,curl_exec)를 논블로킹으로 만들 수 없습니다. - 진입 장벽 – 개발자는 익숙한 도구 대신 별도의 생태계를 배워야 합니다.
TrueAsync – PHP를 위한 진정한 async/await, 코루틴, 논블로킹 I/O.