이 가이드에서는 Cloud Run에서 세션을 처리하는 방법을 설명합니다.
대부분의 앱은 인증 및 사용자 환경설정에 대한 세션 처리가 필요합니다. Jetty 프레임워크에는이 기능을 수행하기 위한 메모리 기반 구현이 포함되어 있습니다. 하지만 인스턴스 하나에 기록된 세션이 다른 인스턴스와 다를 수 있으므로 여러 인스턴스에서 제공될 수 있는 앱에는 이 구현이 적절하지 않습니다. 이 가이드에서는 Cloud Run에서 세션을 처리하는 방법을 설명합니다.
목표
- 앱을 작성합니다.
- 로컬에서 앱을 실행합니다.
- Cloud Run에 앱을 배포합니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Firestore API.
-
Google Cloud Console의 Cloud Shell에서 앱을 엽니다.
Cloud Shell을 사용하면 브라우저에서 직접 명령줄을 통해 클라우드 리소스에 액세스할 수 있습니다. 브라우저에서 Cloud Shell을 열고 계속을 클릭하여 샘플 코드를 다운로드하고 앱 디렉터리로 변경합니다.
- 새 Google Cloud 프로젝트를 사용하도록 Cloud Shell에서 gcloud CLI를 구성합니다.
# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
-
기본적으로 자바 11을 사용하도록 Maven을 업데이트합니다.
메시지가 표시되면 숫자를 입력하여 자바 11을 선택합니다. 이 버전에 나열된 경로를 기록해 둡니다.sudo update-alternatives --config java
- 이전 단계에서 복사한 경로를 환경 변수로 내보냅니다.
export JAVA_HOME=java-11-path
웹 앱
이 앱은 모든 사용자에게 다양한 언어로 인사말을 표시합니다. 재사용자는 항상 같은 언어로 인사합니다.
앱에서 사용자 환경설정을 저장하려면 세션에서 현재 사용자에 대한 정보를 저장할 수 있는 방법이 필요합니다. 이 샘플 앱은 WebFilter
를 사용하여 Firestore에서 세션 데이터를 검색 및 업데이트합니다.
다음 다이어그램은 Firestore가 Cloud Run 앱의 세션을 처리하는 방법을 보여줍니다.
HttpServletRequest
는 쿠키를 사용하여 로컬 세션의 고유 ID를 저장합니다. 이 ID는 세션 세부정보가 있는 Firestore의 문서에 해당합니다.
세션 삭제
Firestore는 이전 또는 만료된 세션을 삭제하지 않습니다. Google Cloud Console에서 세션 데이터를 삭제하거나 자동 삭제 전략을 구현할 수 있습니다. Memcache 또는 Redis와 같은 세션의 스토리지 솔루션을 사용하면 만료된 세션이 자동으로 삭제됩니다.
로컬에서 실행
HTTP 서버를 시작합니다.
mvn jetty:run
웹 브라우저에서 앱을 확인합니다.
Cloud Shell
Cloud Shell 툴바에서 웹 미리보기 를 클릭하고 포트 8080에서 미리보기를 선택합니다.
로컬 머신
브라우저에서
http://localhost:8080
으로 이동합니다.'Hello World', 'Hallo Welt', 'Hola mundo', 'Salut le Monde' 또는 'Ciao Mondo' 등 5가지 인사말 중 하나가 표시됩니다. 페이지를 다른 브라우저나 시크릿 모드에서 열면 언어가 변경됩니다. Google Cloud Console에서 세션 데이터를 보고 수정할 수 있습니다.
HTTP 서버를 중지하려면 터미널 창에서
Control+C
를 누르세요.
Cloud Run에서 배포 및 실행
Cloud Run을 사용하면 데이터 양이 많고 부하가 과도한 상황에서도 안정적으로 실행하는 앱을 빌드 및 배포할 수 있습니다.
터미널 창에서 Jib Maven 플러그인을 사용하여 코드 이미지를 Google Container Registry(GCR)에 빌드하고 배포합니다.
mvn clean package jib:build
Cloud Run에 앱을 배포합니다.
gcloud beta run deploy session-handling --image gcr.io/MY_PROJECT/session-handling
--platform managed --region us-central1 --memory 512MMY_PROJECT
를 개발자가 만든 Cloud 프로젝트의 ID로 바꿉니다. 이 명령어로 반환한 URL에 방문하여 페이지 로드 간에 세션 데이터가 유지되는 방법을 확인합니다.
앱 디버깅
Cloud Run 앱에 연결할 수 없는 경우 다음 사항을 확인하세요.
gcloud
배포 명령어가 성공적으로 완료되었고 오류를 출력하지 않았는지 확인합니다. 오류가 있으면(예:message=Build failed
) 오류를 수정하고 Cloud Run 앱 배포를 다시 시도합니다.Cloud Console에서 로그 탐색기 페이지로 이동합니다.
최근에 선택한 리소스 드롭다운 목록에서 Cloud Run 애플리케이션을 클릭한 후 전체 module_id를 클릭합니다. 앱을 방문했을 때의 요청 목록이 표시됩니다. 요청 목록이 표시되지 않는 경우 드롭다운 목록에서 전체 module_id를 선택했는지 확인합니다. Cloud Console에 오류 메시지가 표시되면 앱 코드가 웹 앱 작성 섹션의 코드와 일치하는지 확인합니다.
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.
Cloud Run 인스턴스 삭제
Cloud Run에서 서비스를 삭제합니다.
- Cloud Console에서 Cloud Run의 서비스 페이지로 이동합니다.
- 삭제하려는 서비스를 선택합니다.
- 삭제 delete를 클릭하여 서비스를 삭제합니다.
다음 단계
- 더 많은 Cloud Functions 가이드 시도하기
- 완전 관리형 환경 또는 자체 Google Kubernetes Engine 클러스터에서 스테이트리스(Stateless) 컨테이너를 실행할 수 있는 Cloud Run 사용해 보기