php-node - Node.js내에서 PHP HTTP 요청을 처리하는 핸들러
(github.com/platformatic)-
Node.js 애플리케이션 내에서 PHP 애플리케이션을 동일 프로세스에서 실행하여, 네트워크 연결 없이 Node.js와 PHP 간 통신을 가능하게 하는 모듈
- 양방향 통신, 하이브리드 아키텍처, 레거시 PHP 자산 활용 및 마이그레이션 등이 쉬워짐
- 이를 통해 WordPress를 Next.js 프론트엔드와 통합하는 등 다양한 하이브리드 웹앱 아키텍처를 구현할 수 있음
- 비동기 방식(handleRequest) 과 동기 방식(handleRequestSync) 모두 지원(동기 방식은 Node.js 스레드 블로킹)
- x64 Linux, x64/arm64 macOS 환경을 우선 지원하며, 일부 PHP 관련 시스템 라이브러리 설치 필요
- Request/Response/Headers 등 HTTP 객체를 Node.js에서 직접 생성/조작하여 PHP 애플리케이션과 자연스럽게 연동 가능함
- 사용방법
// `Php` 인스턴스 생성 후 `handleRequest()`로 PHP 요청 처리 // `Request`, `Response` 객체를 활용해 직접 HTTP 요청/응답 데이터를 다룸 import { Php, Request } from '@platformatic/php-node' const php = new Php() const request = new Request({ url: 'http://example.com/foo/bar', headers: { 'X-Test': ['Hello, from Node.js!'] } }) const response = await php.handleRequest(request) console.log(response.body.toString())
- 활용 예
- PHP 기반 CMS(WordPress 등)를 Node.js(Next.js 등) 프론트엔드와 통합하거나, 레거시 PHP 앱을 점진적으로 Node.js로 마이그레이션
- 두 환경 간 네트워크 오버헤드 없이 메모리 내 통신 구현 및 API 게이트웨이, SSR, 커스텀 백엔드 연동 등에 적합
- API들
-
Php 클래스
-
new Php(config)
: docroot 등 설정 포함 가능 -
php.handleRequest(request)
: 비동기 요청 처리(Promise 반환) -
php.handleRequestSync(request)
: 동기 처리(스레드 블로킹)
-
-
Request 클래스
- HTTP method, url, headers, body 지정 가능
- 각 속성 직접 접근 가능(예:
request.method
,request.body
)
-
Response 클래스
- status, headers, body, log 등 속성 보유
- 수동 생성 가능(테스트, 에러 처리에 활용)
-
Headers 클래스
- set, add, get, getAll, has, delete 등 다양한 HTTP 헤더 관리 메서드 지원
- entries, keys, values, forEach 등 반복자 API로 헤더 일괄 처리 가능
-
Php 클래스
그리 매력적인 옵션은 아니네요...
PHP가 기본적으로 먹는 메모리 크기도 꽤 큰 편이고, 초기화 비용도 꽤 비싼 편이라 적절한 관리가 꼭 필요한데,
node랑 같은 프로세스 안에서, 특히 지금 구현과 같이 네이티브 모듈에 PHP를 통째로 담아둔 구조에선 부담이 많이 커 보이네요.
저라면 그냥 php-fpm은 별도의 프로세스로 두고,
차라리 fastcgi 클라이언트를 js로 작성해 처리할 것 같습니다.
이 라이브러리가 AWS Lambda의 Node.js 런타임과 잘 호환될까요?
만약 호환된다면, 궁극적으로는 PHP를 AWS Lambda에 서버리스로 구동할 수도 있을 것 같아요