이 가이드에서는 App Engine에서 세션을 처리하는 방법을 보여줍니다.
대부분의 앱은 인증 및 사용자 환경설정에 대한 세션 처리가 필요합니다.
Gorilla 웹 도구 sessions
패키지에는 이 함수를 수행하기 위해 파일 시스템 기반 구현이 함께 제공됩니다. 하지만 한 인스턴스에 기록된 세션이 다른 인스턴스와 다를 수 있으므로 여러 인스턴스에서 제공될 수 있는 앱에는 이 구현이 적절하지 않습니다. gorilla/sessions
패키지에는 쿠키 기반 구현도 함께 제공됩니다. 그러나 이를 구현하기 위해 쿠키를 암호화하고 클라이언트에 세션 ID 뿐만 아니라 전체 세션을 저장해야 하며, 일부 앱에 비해 너무 큰 경우가 있습니다.
목표
- 앱을 작성합니다.
- 로컬에서 앱을 실행합니다.
- 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
-
gcloud
구성요소를 업데이트합니다.gcloud components update
- 개발 환경을 준비합니다.
프로젝트 설정
터미널 창에서 샘플 앱 저장소를 로컬 머신에 클론합니다.
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
샘플 코드가 있는 디렉터리로 변경합니다.
cd golang-samples/getting-started/sessions
웹 앱 이해하기
이 앱은 모든 사용자에게 다양한 언어로 인사말을 표시합니다. 재사용자에게는 항상 같은 언어로 인사말을 표시합니다.
앱에서 사용자 환경설정을 저장하려면 세션에서 현재 사용자에 대한 정보를 저장할 수 있는 방법이 필요합니다. 이 샘플 앱은 Firestore를 사용하여 세션 데이터를 저장합니다.
gorilla/sessions
와 호환되는 세션 저장소인 firestoregorilla
를 사용할 수 있습니다.
앱은 종속 항목을 가져오고
sessions.Store
및 HTML 템플릿을 저장할app
유형을 정의하고 인사말 목록을 정의하면서 시작합니다.그런 후 앱은 새
app
인스턴스를 만드는main
함수를 정의하고 색인 핸들러를 등록하고 HTTP 서버를 시작합니다.newApp
함수는firestoregorilla.New
함수로sessions.Store
를 초기화하여app
인스턴스를 만듭니다.색인 핸들러는 사용자의 세션을 가져오며, 필요한 경우 세션을 생성합니다. 새 세션에는 임의의 언어와 조회수 0이 할당됩니다. 그런 다음 조회수가 1씩 증가하고 세션이 저장되며 HTML 템플릿이 응답을 작성합니다.
다음 다이어그램은 Firestore에서 App Engine 앱의 세션을 처리하는 방법을 보여줍니다.
세션 삭제
firestoregorilla
는 오래되었거나 만료된 세션을 삭제하지 않습니다. Google Cloud 콘솔에서 세션 데이터를 삭제하거나 자동 삭제 전략을 구현할 수 있습니다. Memcache 또는 Redis와 같은 세션의 스토리지 솔루션을 사용하면 만료된 세션이 자동으로 삭제됩니다.
로컬에서 실행
터미널 창에서
sessions
바이너리를 빌드합니다.go build
HTTP 서버를 시작합니다.
./sessions
웹 브라우저에서 앱을 확인합니다.
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 표준 환경 구성이 포함되어 있습니다.
App Engine에 앱을 배포합니다.
gcloud app deploy
브라우저에 다음 URL을 입력합니다.
https://PROJECT_ID.REGION_ID.r.appspot.com
다음을 바꿉니다.
PROJECT_ID
: Google Cloud 프로젝트 IDREGION_ID
: App Engine이 앱에 할당하는 코드
이제 App Engine 인스턴스에서 실행되는 웹 서버에서 인사말을 전달합니다.
앱 디버깅
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.
- 앱 버전을 삭제하려면 삭제를 클릭합니다.
다음 단계
- Cloud Run 함수 튜토리얼 사용해 보기
- App Engine 자세히 알아보기
- 완전 관리형 환경 또는 자체 Google Kubernetes Engine 클러스터에서 스테이트리스(Stateless) 컨테이너를 실행할 수 있는 Cloud Run 사용해 보기