구성 파일 정리

다음 문서는 App Engine 앱의 서비스와 관련 리소스를 구조화하는 방법을 설명합니다.

디렉터리 구조

App Engine 서비스의 각 버전은 app.yaml 구성 파일에 정의됩니다. 간단한 앱에서는 app.yaml 파일만 정의하면 배포할 수 있습니다. app.yaml 파일은 배포 설명자 역할을 하며 서비스의 특정 버전에 대한 확장 유형, CPU, 디스크, 메모리 리소스를 정의합니다. 서비스의 여러 버전을 배포하려면 같은 디렉터리에 각 버전의 구성을 나타내는 YAML 파일을 여러 개 만들면 됩니다.

로컬에서 개발하는 경우 앱의 루트에 서비스별 디렉터리를 별도로 만들 수 있습니다. 앱을 GitHub 등의 버전 관리 시스템(VCS)에 호스팅하는 경우에는 앱에 서비스마다 저장소의 별도 디렉터리를 사용하거나 별도 저장소를 사용하도록 구조화할 수도 있습니다. 각 디렉터리나 저장소는 단일 서비스를 나타내야 하며 해당 서비스의 app.yaml 파일 및 관련 소스 코드를 포함해야 합니다.

각 서비스의 app.yaml 파일에 고유한 이름을 지정할 수도 있습니다. 예를 들어 service1.yaml 또는 app.flexible.yaml과 같이 구성 파일에 서비스의 이름을 붙이거나 해당 서비스의 각 버전을 나타내는 고유한 이름을 사용할 수 있습니다.

그 외 선택적 구성 파일은 앱의 default 서비스의 루트 디렉터리 또는 저장소에 있어야 합니다. 선택적 구성 파일로는 dispatch.yaml, index.yaml, cron.yaml 등이 있으며 이러한 파일은 특정 서비스에 국한되지 않는 앱 전체 설정을 적용합니다.

다음 예에서는 3가지 서비스가 포함된 앱을 로컬에서 개발하는 경우의 앱 구조를 보여줍니다. 선택사항인 dispatch.yaml은 해당 앱의 루트 디렉터리에 추가되었습니다. 또한 루트에는 앱의 각 서비스에 대한 3개의 디렉터리가 있습니다. service1 하위 디렉터리에는 해당 서비스의 소스 및 구성 파일이 포함되어 있습니다. service3에는 YAML 구성 파일의 2가지 버전이 포함되어 있지만 service2service3 역시 각 서비스의 파일을 포함한 별도의 디렉터리에 있습니다.

YAML 서비스의 계층구조 그래프

단일 서비스 앱의 경우 default 서비스만 포함되며 모든 파일이 동일한 디렉터리(해당 앱의 루트)에 위치할 수 있습니다. 다음 예시에서는 선택적 dispatch.yaml 구성 파일 및 해당 서비스의 서로 다른 버전을 나타내는 2개의 구성 파일(service1.yamlservice2.yaml)을 포함하는 단일 서비스 앱에서 가능한 구조를 보여줍니다.

소규모 YAML 서비스의 계층구조 그래프

인스턴스 업타임에 대한 설계 고려사항

조기 종료나 빈번한 인스턴스 다시 시작을 초래하는 하드웨어 또는 소프트웨어 오류는 예고 없이 발생할 수 있으며 해결하는 데 상당한 시간이 걸릴 수 있습니다. 애플리케이션은 이러한 오류에 대처할 수 있어야 합니다.

인스턴스 재시작으로 인한 다운타임 방지에 효과적인 전략은 다음과 같습니다.

  • 인스턴스 재시작 또는 새 인스턴스 시작에 걸리는 시간을 줄입니다.
  • 계산이 장기간 실행되는 경우 해당 상태부터 다시 시작할 수 있도록 정기적으로 체크포인트를 만듭니다.
  • 인스턴스에 아무것도 저장되지 않도록 앱이 '스테이트리스(Stateless)'이어야 합니다.
  • 큐를 사용하여 태스크를 비동기적으로 실행합니다.
  • 인스턴스를 수동으로 확장하도록 구성한 경우에는 다음을 수행하세요.
    • 여러 인스턴스에서 부하 분산을 사용합니다.
    • 일반적인 트래픽을 처리하는 데 필요한 수보다 많은 인스턴스를 구성합니다.
    • 수동 확장 인스턴스를 사용할 수 없는 경우에는 캐시된 결과를 사용하는 대체 로직을 작성합니다.

인스턴스에 대한 자세한 내용은 인스턴스 관리 방법을 참조하세요.

default 서비스

모든 App Engine 애플리케이션에는 default 서비스가 포함되어 있습니다. 서비스를 추가로 만들어 앱에 배포하려면 먼저 앱의 최초 버전을 default 서비스에 배포해야 합니다.

app.yaml에서 service: default 설정을 사용하여 default 서비스를 지정할 수도 있습니다.

https://[PROJECT_ID].appspot.com과 같이 GCP 프로젝트를 사용하여 앱에 보낸 요청은 default 서비스로 전송됩니다. 다른 서비스 타겟팅에 대한 자세한 내용은 서비스 간 통신을 참조하세요.

선택적 구성 파일

다음 구성 파일은 개별 앱의 모든 서비스에 적용되는 선택 기능을 제어합니다. 각 선택 기능에 대한 자세한 내용은 다음 주제를 참조하세요.

데이터 및 파일 스토리지 고려사항

App Engine에서 Cloud Datastore, Cloud SQL, Cloud Storage와 같은 다른 GCP 서비스에 간편하게 액세스할 수 있습니다.

외부 또는 타사 데이터베이스가 사용자 언어로 지원되고 App Engine 인스턴스에서 액세스할 수 있으면 데이터베이스를 사용할 수 있습니다.

파일을 GCP 또는 외부에 저장하는 방법에 대한 자세한 내용은 데이터 및 파일 스토리지 이해를 참조하세요.

또한 정적 콘텐츠를 제공할 방법을 선택할 수 있습니다. 정적 콘텐츠를 App Engine의 앱에서 직접 제공하거나 Cloud Storage와 같은 GCP 옵션으로 호스팅하거나, 타사 콘텐츠 전송 네트워크(CDN)를 사용하는 방법이 있습니다. 정적 콘텐츠 제공에 대한 자세한 내용은 정적 파일 제공을 참조하세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Python 문서용 App Engine 가변형 환경