이 가이드에서는 App Engine에서 세션을 처리하는 방법을 보여줍니다.
대부분의 앱은 인증 및 사용자 환경설정에 대한 세션 처리가 필요합니다. PHP에는 이 함수를 수행하기 위해 메모리 기반 구현이 함께 제공됩니다. 하지만 한 인스턴스에 기록된 세션이 다른 인스턴스와 다를 수 있으므로 여러 인스턴스에서 제공될 수 있는 앱에는 이 구현이 적절하지 않습니다.
목표
- 앱을 작성합니다.
- 로컬에서 앱을 실행합니다.
- App Engine에 앱을 배포합니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
- 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 Firestore 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 Firestore API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 새 Google Cloud 프로젝트를 사용하도록 gcloud CLI를 구성합니다.
# Configure gcloud for your project gcloud config set project PROJECT_ID
PROJECT_ID
를 이전에 만들었거나 선택한 Google Cloud 프로젝트 ID로 바꿉니다.
프로젝트 설정
터미널 창에서 원하는 디렉터리로 이동하여
sessions
라는 이름의 새 디렉터리를 만듭니다. 이 가이드의 모든 코드는sessions
디렉터리 내에 있습니다.sessions
디렉터리로 변경합니다.cd sessions
종속 항목 설치
composer require google/cloud-firestore
이 가이드를 마치면 마지막 파일 구조는 다음과 유사합니다.
sessions
├── app.yaml
└── composer.json
├── index.php
앱 작성
터미널 창에서 다음 콘텐츠가 포함된
index.php
파일을 만듭니다.
이 앱은 모든 사용자에게 다양한 언어로 인사말을 표시합니다. 재사용자는 항상 같은 언어로 인사합니다.
앱에서 사용자 환경설정을 저장하려면 세션에서 현재 사용자에 대한 정보를 저장할 수 있는 방법이 필요합니다. 이 샘플 앱은 Firestore를 사용하여 세션 데이터를 저장합니다.
Firestore session handler
를 이용하여 PHP용 Firestore 세션을 사용할 수 있습니다.
다음 다이어그램은 Firestore에서 App Engine 앱의 세션을 처리하는 방법을 보여줍니다.
session_set_save_handler
를 설정한 후 모든 요청에는 세션에 액세스하는 데 사용할 수 있는 $_SESSION
전역 변수가 포함됩니다. 세션 데이터는 Firestore에 저장됩니다.
로컬에서 실행
기본 제공 PHP 웹 서버를 시작합니다.
php -S localhost:8080
웹브라우저에서 앱을 확인합니다.
Cloud Shell
Cloud Shell 툴바에서 웹 미리보기 를 클릭하고 포트 8080에서 미리보기를 선택합니다.
로컬 머신
브라우저에서
http://localhost:8080
으로 이동합니다.'Hello World', 'Hallo Welt', 'Hola mundo', 'Salut le Monde' 또는 'Ciao Mondo'의 다섯 가지 인사말 중 하나가 표시됩니다. 페이지를 다른 브라우저나 시크릿 모드로 열면 언어가 변경됩니다. Google Cloud 콘솔에서 세션 데이터를 보고 수정할 수 있습니다.
HTTP 서버를 중지하려면 터미널 창에서
Control+C
를 누르세요.
App Engine에서 배포 및 실행
App Engine 표준 환경을 사용하면 많은 양의 데이터를 사용해 작업하고 과도한 부하가 발생하는 애플리케이션을 쉽게 빌드하고 배포하며 안정적으로 실행할 수 있습니다.
이 튜토리얼에서는 App Engine 표준 환경을 사용하여 서버를 배포합니다.
터미널 창에서
app.yaml
파일을 만들고 다음을 복사합니다.App Engine에 앱을 배포합니다.
gcloud app deploy
라이브 앱을 보려면 다음 URL을 입력합니다.
https://PROJECT_ID.REGION_ID.r.appspot.com
다음을 바꿉니다.
PROJECT_ID
: Google Cloud 프로젝트 IDREGION_ID
: App Engine이 앱에 할당하는 코드
이제 App Engine 인스턴스에서 실행되는 웹 서버에서 인사말을 전달합니다.
세션 삭제
PHP는 php.ini
구성에 따라 오래되고 만료된 세션을 삭제하는 가비지 컬렉션(GC) 세션을 수행합니다. Firestore 세션 핸들러는 기본적으로 세션을 삭제하지 않지만 세션 핸들러를 만들 때 gcLimit
옵션을 전달하여 삭제하도록 구성할 수 있습니다.
세션은 확률 기반 GC 세션을 사용하여 삭제되거나 session_gc
함수를 명시적으로 호출할 때 삭제됩니다.
앱 디버깅
App Engine 앱에 연결할 수 없는 경우 다음을 확인하세요.
gcloud
배포 명령어가 성공적으로 완료되었고 오류를 출력하지 않았는지 확인합니다. 오류가 있는 경우(예:message=Build failed
) 수정하고 App Engine 앱 배포를 다시 실행합니다.Google Cloud Console에서 로그 탐색기 페이지로 이동합니다.
최근에 선택한 리소스 드롭다운 목록에서 App Engine 애플리케이션을 클릭한 다음 전체 module_id를 클릭합니다. 앱을 방문했을 때의 요청 목록이 표시됩니다. 요청 목록이 표시되지 않는 경우 드롭다운 목록에서 전체 module_id를 선택했는지 확인합니다. Google Cloud 콘솔에 오류 메시지가 표시되면 앱 코드가 웹 앱 작성 섹션의 코드와 일치하는지 확인합니다.
Firestore API가 사용 설정되어 있는지 확인합니다.
삭제
프로젝트 삭제
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
App Engine 인스턴스 삭제
- In the Google Cloud console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- 앱 버전을 삭제하려면 삭제를 클릭합니다.