# php-node - Node.js내에서 PHP HTTP 요청을 처리하는 핸들러

> Clean Markdown view of GeekNews topic #21201. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=21201](https://news.hada.io/topic?id=21201)
- GeekNews Markdown: [https://news.hada.io/topic/21201.md](https://news.hada.io/topic/21201.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-05-31T09:51:01+09:00
- Updated: 2025-05-31T09:51:01+09:00
- Original source: [github.com/platformatic](https://github.com/platformatic/php-node)
- Points: 5
- Comments: 3

## Summary

**Node.js** 애플리케이션에서 **PHP**를 동일 프로세스에서 직접 실행하여 두 언어 간 **양방향 통신과 하이브리드 아키텍처** 구현을 지원합니다. HTTP 객체를 Node.js 내에서 직접 생성 및 조작하면서 **레거시 PHP 기반 CMS와 Next.js 등 프론트엔드 통합**을 메모리 내에서 효율적으로 수행할 수 있습니다. 현재 **x64 Linux, x64/arm64 macOS**를 우선 지원하며, **비동기 및 동기 API** 선택으로 다양한 마이그레이션 및 커스텀 통합 시나리오에 적합합니다.

## Topic Body

- **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 애플리케이션과 자연스럽게 연동 가능함  
- 사용방법   
  ```js  
  // `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로 헤더 일괄 처리 가능

## Comments



### Comment 39589

- Author: nemorize
- Created: 2025-05-31T21:12:55+09:00
- Points: 1

그리 매력적인 옵션은 아니네요...  
  
PHP가 기본적으로 먹는 메모리 크기도 꽤 큰 편이고, 초기화 비용도 꽤 비싼 편이라 적절한 관리가 꼭 필요한데,  
node랑 같은 프로세스 안에서, 특히 지금 구현과 같이 네이티브 모듈에 PHP를 통째로 담아둔 구조에선 부담이 많이 커 보이네요.  
  
저라면 그냥 php-fpm은 별도의 프로세스로 두고,  
차라리 fastcgi 클라이언트를 js로 작성해 처리할 것 같습니다.

### Comment 39579

- Author: letaem77a
- Created: 2025-05-31T11:47:51+09:00
- Points: 1

이 라이브러리가 AWS Lambda의 Node.js 런타임과 잘 호환될까요?   
  
만약 호환된다면, 궁극적으로는 PHP를 AWS Lambda에 서버리스로 구동할 수도 있을 것 같아요

### Comment 39581

- Author: savvykang
- Created: 2025-05-31T12:14:19+09:00
- Points: 2
- Parent comment: 39579
- Depth: 1

Nodejs와 병행해서 쓸 이유가 없다면 람다에 PHP 런타임을 배포하셔도 됩니다 https://bref.sh
