이 페이지에서는 PHP 런타임을 1세대에서 2세대로 마이그레이션하는 방법을 안내합니다. 지원되는 최신 PHP 버전을 사용하도록 2세대 앱을 업그레이드하는 방법은 기존 애플리케이션 업그레이드를 참조하세요.
PHP 5는 2024년 1월 30일에 지원 종료되었습니다. 기존 PHP 5 애플리케이션을 계속 실행하고 트래픽을 받을 수 있습니다. 그러나 App Engine에서 지원 종료 날짜 이후에 런타임을 사용하는 애플리케이션의 재배포를 차단할 수 있습니다. 이 페이지의 안내에 따라 PHP 런타임을 지원되는 최신 런타임으로 마이그레이션하는 것이 좋습니다.
지원되는 2세대 PHP 런타임으로 마이그레이션하면 최신 언어 기능을 사용하고 관용적인 코드로 이동성이 향상된 앱을 빌드할 수 있습니다.
PHP 5.5와 2세대 PHP 런타임 간의 호환성 문제
공식 PHP 문서는 서로 다른 PHP 버전에서의 이전에 대한 정보를 제공합니다.
- PHP 5.5.x에서 PHP 5.6.x로 마이그레이션
- PHP 5.6.x에서 PHP 7.0.x로 마이그레이션
- PHP 7.0.x에서 PHP 7.1.x로 마이그레이션
- PHP 7.1.x에서 PHP 7.2.x로 마이그레이션
- PHP 7.2.x에서 PHP 7.3.x로 마이그레이션
- PHP 7.3에서 PHP 7.4.x로 마이그레이션
- PHP 7.4.x에서 PHP 8.0.x로 마이그레이션
- PHP 8.0.x에서 PHP 8.1.x로 마이그레이션
PHP 5.5와 2세대 PHP 런타임 간의 주요 차이점
다음은 App Engine 표준 환경에서 PHP 5.5와 2세대 PHP 런타임 간의 차이점을 요약한 내용입니다.
메모리 사용량 차이
2세대 런타임은 1세대 런타임에 비해 메모리 사용량 기준이 더 높습니다. 이는 여러 다른 기본 이미지 버전, 두 세대 간의 메모리 사용량 계산 방법의 차이와 같은 여러 요인 때문에 발생합니다.
2세대 런타임은 애플리케이션 프로세스가 사용하는 항목의 합계 및 메모리에 동적으로 캐시된 애플리케이션 파일 수에 따라 인스턴스 메모리 사용량을 계산합니다. 메모리 사용량이 높은 애플리케이션에서 메모리 한도 초과로 인한 인스턴스 종료가 발생하지 않도록 방지하려면 메모리가 많은 더 큰 인스턴스 클래스로 업그레이드하세요.
CPU 사용량 차이
2세대 런타임은 인스턴스 콜드 스타트 시 CPU 사용량 기준이 더 높을 수 있습니다. 그 결과 애플리케이션의 확장 구성에 따라 애플리케이션이 CPU 사용률을 기준으로 확장되도록 구성된 경우 예상한 것보다 높은 인스턴스 수와 같은 의도치 않은 부작용이 발생할 수 있습니다. 이러한 문제를 방지하기 위해서는 애플리케이션 확장 구성을 검토 및 테스트해서 인스턴스 수를 적정 수준으로 유지해야 합니다.
요청 헤더 차이
1세대 런타임에서는 밑줄이 사용된 요청 헤더(예: X-Test-Foo_bar
)를 애플리케이션에 전달할 수 있습니다. 2세대 런타임에는 호스트 아키텍처에 Nginx가 도입되었습니다. 이러한 변경사항으로 인해 2세대 런타임은 밑줄(_
)이 있는 헤더를 자동으로 삭제하도록 구성됩니다. 애플리케이션 문제를 방지하기 위해서는 애플리케이션 요청 헤더에 밑줄을 사용하지 않아야 합니다.
app.yaml
파일 마이그레이션
애플리케이션에서 모든 라우팅을 처리하는 프런트 컨트롤러를 배치해야 합니다. 자세한 내용은 애플리케이션 시작을 참조하세요.
2세대 PHP 런타임에서는 script
핸들러 요소를 맞춤설정할 수 없습니다. 모든 트래픽은 entrypoint 명령어를 통해 제공되므로 유일한 유효 값은 auto
입니다. 모든 비정적 URL 핸들러에 script: auto
가 포함되어야 성공적으로 배포됩니다.
app.yaml
구성 파일의 일부 요소 동작이 수정되었습니다.
요소 | 유형 변경 | 설명 |
---|---|---|
entrypoint | 추가됨 | 선택사항. 이 필드를 사용하여 앱 시작 시 실행할 명령어를 지정합니다. |
threadsafe | 지원 중단됨 | 모든 애플리케이션이 스레드 안전으로 간주됩니다. 즉, 인스턴스 한 개가 동시에 여러 요청을 처리할 수 있습니다. |
api_version | 지원 중단됨 | 이전에는 필수 항목이었지만 2세대 PHP 런타임에서는 필요하지 않습니다. |
application_readable | 지원 중단됨 | |
builtins | 지원 중단됨 | |
libraries | 지원 중단됨 | composer.json 메타데이터 파일을 사용하여 임의의 타사 종속 항목을 설치할 수 있습니다. |
handlers | 수정됨 |
|
지원 중단된 필드를 사용하면 앱 배포 시 오류가 발생합니다.
자세한 내용은 app.yaml
참조 문서를 확인하세요.
런타임 제한 감소
2세대 PHP 런타임은 PHP 5.5 런타임에 비해 제한이 적습니다.
- 타사 종속 항목을 설치합니다.
- 런타임에 전체 파일 시스템이 포함됩니다.
- 인스턴스가 실행되는 동안 요청 범위를 벗어나는 백그라운드 스레드 또는 프로세스를 만듭니다.
- 앱을 다른 Google Cloud 서비스와 통합하려면 PHP용 Google Cloud 클라이언트 라이브러리를 사용합니다. 자세한 내용은 Google Cloud 클라이언트 라이브러리 설치 페이지를 참조하세요.
자세한 내용은 PHP 런타임 환경을 참조하세요.
App Engine PHP SDK에서 마이그레이션
런타임을 보다 쉽고 간단하게 마이그레이션할 수 있도록 App Engine 표준 환경에서 Memcache와 같은 2세대 PHP 런타임의 다양한 기존 번들 서비스와 API에 액세스할 수 있습니다. 2세대 PHP 앱은 App Engine SDK를 통해 번들 서비스 API를 호출하고 PHP 5 런타임과 동일한 기능 대부분에 액세스할 수 있습니다. PHP 5에서 사용할 수 있는 모든 기존 번들 서비스에 대해 2세대 PHP에 상응하는 서비스가 있지는 않습니다. 2세대 PHP 런타임에 사용할 수 있는 기존 번들 서비스 API의 전체 목록은 기존 번들 서비스 API 참조 문서를 참조하세요.
기존 번들 서비스와 비슷한 기능을 제공하는 Google Cloud 제품을 사용할 수도 있습니다. 이러한 Google Cloud 제품은 관용적인 Google Cloud CLI 클라이언트 라이브러리를 제공합니다. Google Cloud에서 검색과 같이 별도의 제품으로 제공되지 않는 기존 번들 서비스의 경우 타사 제공업체 또는 다른 해결 방법을 사용할 수 있습니다. 번들되지 않은 서비스로 마이그레이션하는 방법에 대한 자세한 내용은 번들 서비스에서 마이그레이션을 참조하세요.
로컬에서 애플리케이션 실행
애플리케이션을 테스트하고 로컬에서 실행하려면 다음 안내를 따르세요.
App Engine 표준 환경에서 사용할 수 있는 2세대 PHP 런타임에 해당하는 PHP 버전을 로컬에 설치합니다.
웹 서버를 설치하고 이 서버를 사용하여 앱을 로컬에서 제공합니다.
예를 들어 다음 명령어를 실행하여 HTTP 서버를 시작합니다.
php -S localhost:8080
그런 다음 웹브라우저(http://localhost:8080)에서 애플리케이션을 확인합니다.