리전 ID
REGION_ID
는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r
이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.
리전 ID에 대해 자세히 알아보세요.
PHP 버전 7.4 또는 8.1을 사용하여 App Engine에서 앱을 빌드하는 방법을 알아봅니다. 사용자는 샘플 앱을 통해 자신이 좋아하는 책의 제목, 저자, 설명, 출판 날짜, 이미지를 웹페이지에 게시할 수 있습니다. 샘플 앱은 텍스트 데이터를 Cloud SQL 데이터베이스에 저장하고 이미지를 Cloud Storage 버킷에 저장합니다.
가이드 구조
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Cloud Build API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Cloud Build API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- PHP 종속 항목 관리 도구인 Composer를 설치합니다. Linux 및 Mac OS X 시스템에서 전역적으로 Composer를 설치해야 합니다.
샘플 앱 다운로드
GitHub에서 코드를 살펴봅니다.
앱을 다운로드하거나 클론합니다.
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
또는 zip 파일로 샘플을 다운로드하고 압축을 풉니다.
getting-started
디렉터리로 이동합니다.cd php-docs-samples/appengine/standard/getting-started
composer.json으로 종속 항목 지정
이 앱은 프론트 컨트롤러를 사용하여 요청을 라우팅합니다. 이 가이드의 샘플 코드는 Slim Framework를 사용하지만 원하는 웹 프레임워크를 자유롭게 사용할 수 있습니다.
composer.json
파일을 열어 모든 직접 종속 항목을 살펴봅니다.종속 항목을 설치하고
composer.lock
파일을 생성하려면 다음 명령어를 실행합니다.composer install
composer.lock
파일을 사용하면 앱이 여러 빌드 및 환경에서 사용하는 동일한 버전의 패키지를 검색하는 데 도움이 됩니다.
앱 초기화 및 프론트 컨트롤러 정의
index.php
파일은 앱을 초기화하고 모든 요청을 ./src/controllers.php
파일에 정의된 컨트롤러에 전달합니다.
요청 처리에 대한 자세한 내용은 애플리케이션 시작 및 요청 처리를 참조하세요.
Google Cloud 서비스와 통합
App Engine을 사용하려면 데이터 스토리지로 사용할 외부 시스템과 앱을 통합해야 합니다. 샘플 앱은 Cloud SQL에 텍스트 데이터를 저장하고 Cloud Storage에 이미지를 저장합니다.
Google Cloud Storage의 모든 옵션은 스토리지 옵션 선택 페이지를 참조하세요.
Cloud SQL 사용
샘플 앱에서 사용자는 책을 웹페이지에 게시합니다. Cloud SQL 데이터베이스를 사용하여 책의 제목, 저자, 발행일, 설명을 저장합니다.
앱의 데이터베이스에 콘텐츠를 추가하기 전에 Cloud SQL 인스턴스를 만들어야 합니다.
Cloud SQL 인스턴스 만들기
gcloud CLI를 사용하여 Cloud SQL 인스턴스를 만듭니다.
gcloud sql instances create INSTANCE_NAME --tier=MACHINE_TYPE --region=REGION
예를 들어 인스턴스의 이름을 bookshelf
로 하고 미국 중부 지역에서 db-n1-standard-2
머신 유형을 사용하고 싶은 경우 다음을 실행합니다.
gcloud sql instances create bookshelf --tier=db-n1-standard-2 --region=us-central1
MySQL 루트 사용자 설정
gcloud CLI를 사용하여 Cloud SQL 인스턴스의 루트 사용자 비밀번호를 설정할 수 있습니다.
gcloud sql users set-password USER --host=HOST --instance=INSTANCE_NAME --password=PASSWORD
예를 들어 Cloud SQL 인스턴스 bookshelf
의 루트 사용자 비밀번호를 passw0rd!
로 설정하려면 다음을 실행합니다.
gcloud sql users set-password root --host=% --instance=bookshelf --password=passw0rd!
Cloud SQL 인스턴스에 데이터베이스 설정
책의 저자, 제목, 발행일, 설명을 저장하려면 다음과 같이 MySQL 데이터베이스를 만듭니다.
gcloud sql databases create DATABASE_NAME --instance=INSTANCE_NAME
예를 들어 Cloud SQL 인스턴스 bookshelf
에 book-data
라는 데이터베이스를 만들려면 다음을 사용합니다.
gcloud sql databases create book-data --instance=bookshelf
Cloud SQL 데이터베이스에 연결
샘플 앱은 PHP의 PDO를 사용하여 MySQL 데이터베이스와 상호작용합니다.
이러한 매개변수는 이 튜토리얼의 아래에 나오는 앱 구성에서 환경 변수로 지정됩니다.
단일 행 쿼리
사용자가 책을 클릭하면 앱이 데이터베이스를 쿼리하고 책의 제목, 저자, 출판 날짜, 설명이 포함된 단일 행을 반환합니다.
Cloud Storage 사용하기
샘플 앱은 Cloud Storage를 사용하여 사용자가 업로드한 바이너리 파일인 이미지를 저장합니다.
Cloud Storage 버킷 만들기
Cloud Storage는 버킷을 사용하여 데이터에 대한 액세스를 구성하고 제어합니다.
gcloud CLI를 사용하여 Cloud Storage 버킷을 만듭니다.
gsutil mb -l BUCKET_REGION gs://BUCKET_NAME/
예를 들어 us-central1
리전에 picture-storage
라는 버킷을 만들려면 다음을 실행합니다.
gsutil mb -l us-central1 gs://picture-storage/
성공하면 다음과 같은 출력이 표시됩니다.
Creating gs://BUCKET_NAME/
실패하면 다음과 같은 출력이 표시될 수 있습니다.
ServiceException: 409 Bucket BUCKET_NAME already exists
다른 버킷 이름으로 다시 시도하세요.
Cloud Storage 버킷에 프로젝트 연결
Cloud Storage를 사용하려면 Cloud Storage 라이브러리를 지정해야 합니다.
이미지 저장
이제 Cloud Storage 버킷을 만들고 연결을 설정했으므로 이미지를 저장할 수 있습니다. 이미지에 대한 액세스를 제어하는 사전 정의된 액세스 제어 목록(ACL)을 사용하여 이미지를 업로드할 수 있습니다.
이 샘플 앱에서 업로드된 이미지에는 사전 정의된 ACL public-read
가 있습니다. Cloud Storage 객체의 mediaLink
속성을 통해 공개 URL에 액세스할 수 있습니다. HTML 이미지 태그에서 이 URL을 사용할 수 있습니다.
비공개 Cloud Storage 객체를 읽는 방법에 대한 내용은 객체 다운로드 페이지를 참조하세요.
이미지 삭제
사용자가 앱에서 책을 삭제하면 이 코드는 Cloud Storage 버킷에서 이미지를 삭제합니다.
앱 구성
애플리케이션의 런타임, 환경 변수, 기타 설정을 지정하는 app.yaml 파일을 사용하여 App Engine에서 실행할 애플리케이션을 구성할 수 있습니다.
최소한의 구성 요구 사항이 있는 앱의 경우 app.yaml
파일을 한 줄로 만들 수 있습니다.
PHP 8.1
runtime: php81
PHP 7.4
runtime: php74
app.yaml
구성 파일에 추가 구성 옵션 및 애플리케이션별 환경 변수를 추가할 수 있습니다.
환경 변수 추가
app.yaml
파일을 통해 앱에 환경 설정이 제공됩니다. 이 가이드에 사용된 Bookshelf 예시에서 올바른 Cloud SQL 인스턴스 및 Cloud Storage 버킷에 연결하는 방법을 알기 위해서는 환경 변수로 제공되는 구성이 필요합니다.
앱을 배포하려면 app.yaml
구성 파일을 수정해야 합니다.
GOOGLE_STORAGE_BUCKET
변수를 Cloud Storage 버킷의 이름으로 설정합니다.CLOUDSQL_CONNECTION_NAME
변수를 app-name:region:instance-name으로 설정합니다. 다음gcloud
명령어를 사용하여 필요한 세부정보를 검색할 수 있습니다.gcloud sql instances describe INSTANCE
Cloud SQL 2세대 인스턴스의 경우
CLOUDSQL_CONNECTION_NAME
은 다음 형식과 같습니다.your_project_name:your_region:your_instance
작성한 데이터베이스의 이름이
bookshelf
가 아닌 경우 주석 처리를 삭제하고CLOUD_SQL_DATABASE_NAME
변수를 설정합니다. 이 예시에서 te 데이터베이스는book-data
라는 이름을 사용하여 작성되었습니다.app.yaml
파일을 살펴봅니다. 내용은 다음과 비슷합니다.
PHP 8.1
runtime: php81
env_variables:
GOOGLE_STORAGE_BUCKET: picture-storage
CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
CLOUDSQL_USER: root
CLOUDSQL_PASSWORD: passw0rd!
CLOUDSQL_DATABASE_NAME: book-data
PHP 7.4
runtime: php74
env_variables:
GOOGLE_STORAGE_BUCKET: picture-storage
CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
CLOUDSQL_USER: root
CLOUDSQL_PASSWORD: passw0rd!
CLOUDSQL_DATABASE_NAME: book-data
애플리케이션 배포
애플리케이션을 배포하려면
getting-started
디렉터리로 가서 다음 명령어를 실행합니다.gcloud app deploy
위치를 묻는 메시지가 나타나면 앱 사용자와 가까운 위치를 선택합니다. App Engine은 리전을 기준으로 합니다. 즉, 앱을 실행하는 인프라가 특정 지리적 영역에 위치합니다. 예를 들어, 이 가이드에서는
us-central1
리전을 사용하여 스토리지 리소스를 배포했습니다. 지연 시간을 줄이고 성능을 개선하려면 동일한 리전에 앱을 배포하세요.일반적으로 사용자와 가까운 위치를 선택하는 것이 좋지만 리소스와 가까운 곳에 애플리케이션을 배포하는 것이 좋습니다. 사용 가능한 App Engine 위치와 리소스 위치에 대해 읽어보세요.
애플리케이션을 봅니다.
gcloud app browse
삭제
Google Cloud 프로젝트를 삭제하여 프로젝트 내에서 사용되는 리소스에 대한 결제를 중지합니다.
프로젝트를 삭제하려면 다음 명령어를 사용합니다.
gcloud projects delete PROJECT_ID
프로젝트가 삭제되었는지 확인하려면 프로젝트를 나열합니다.
gcloud projects list
다음 단계
- 사용자 인증 방법에 대해 알아보기
- 애플리케이션 로그 읽기 및 쓰기에서 애플리케이션 로그를 쓰고 시스템 로그를 해석하는 방법에 대해 자세히 알아보세요.
- Cloud Tasks를 사용하여 요청 후 백그라운드에서 비동기적으로 작업을 수행하는 방법 알아보기
- 요청 처리 및 요청 라우팅에 대해 알아보기
- PHP 7/8 런타임 환경을 참조하여 App Engine의 작동 방식 자세히 알아보기