요청 처리 방법

리전 ID

REGION_ID는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 기존 앱은 App Engine URL에 REGION_ID.r을 포함하는 것이 선택사항이지만 신규 앱은 모두 곧 필수가 될 예정입니다.

원활한 전환을 위해 리전 ID를 사용하도록 App Engine을 천천히 업데이트하고 있습니다. 아직 Google Cloud 프로젝트가 업데이트되지 않은 경우에는 앱의 리전 ID가 표시되지 않습니다. 기존 앱에서 ID는 선택사항이므로 기존 앱에서 리전 ID를 사용할 수 있게 되더라도 URL을 업데이트하거나 다른 변경을 수행할 필요가 없습니다.

리전 ID에 대해 자세히 알아보세요.

이 문서는 App Engine 애플리케이션이 요청을 수신하고 응답을 전송하는 방법을 설명합니다. 자세한 내용은 요청 헤더 참조를 참조하세요.

애플리케이션이 서비스를 사용하는 경우, 요청을 특정 서비스 또는 서비스의 특정 버전으로 지정할 수 있습니다. 서비스 주소 지정에 대한 자세한 내용은 요청 라우팅 방법을 참조하세요.

요청 처리

애플리케이션은 웹 서버를 시작하고 요청을 처리하는 작업을 담당합니다. 개발 언어용으로 제공되는 모든 웹 프레임워크를 사용할 수 있습니다.

애플리케이션 서버 구성에 따라 동시 요청 처리 방법이 결정됩니다. Eclipse Jetty 9 런타임은 이미 동시 실행에 맞게 구성되어 있지만, 자바 8 런타임을 사용하는 경우 동시 실행 구성은 애플리케이션 또는 프레임워크에서 결정됩니다.

App Engine이 애플리케이션의 웹 요청을 수신하면 애플리케이션의배포 설명자(web.xml 디렉터리 내 WEB-INF/)의 설명대로 URL에 해당하는 서블릿을 호출합니다. 그런 다음 Java servlet API 버전 3.1을 사용하여 서블릿에 요청 데이터를 제공하고 응답 데이터를 받습니다.

다음 예의 서블릿 클래스는 사용자 브라우저에 간단한 메시지를 표시합니다.

import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/plain");
        resp.getWriter().println("Hello, world");
    }
}

할당량 및 한도

App Engine은 트래픽 증가에 따라 애플리케이션에 자동으로 리소스를 할당합니다. 그러나 여기에는 다음과 같은 제한사항이 적용됩니다.

  • App Engine은 애플리케이션이 요청에 응답하는 시간이 1초 미만인, 지연 시간이 짧은 애플리케이션을 위해 자동 확장 용량을 예약합니다. 요청이 많을 때 요청당 1초 이상으로 지연 시간이 길고 처리량이 많은 애플리케이션에는 실버, 골드, 플래티넘 지원이 필요합니다. 이러한 수준의 지원을 신청한 고객은 지원팀 담당자에게 처리량 한도를 상향 요청할 수 있습니다.

  • CPU 사용량이 많은 애플리케이션의 경우, 동일 서버의 다른 애플리케이션과 효율적으로 리소스를 공유하기 위해 지연 시간이 추가로 발생할 수 있습니다. 정적 파일에 대한 요청은 지연 시간 한도에서 제외됩니다.

애플리케이션에 수신되는 각 요청은 요청 한도에 반영됩니다. 요청에 대한 응답으로 전송되는 데이터는 발신 대역폭(청구 가능) 한도에 반영됩니다.

HTTP 및 HTTPS(보안) 요청은 모두 요청, 수신 대역폭(청구 가능), 발신 대역폭(청구 가능) 한도에 반영됩니다. Cloud Console의 할당량 세부정보 페이지도 정보 제공 목적으로 보안 요청, 보안 수신 대역폭, 보안 발신 대역폭을 별도의 값으로 보고합니다. HTTPS 요청만 이러한 값에 반영됩니다. 자세한 내용은 할당량 페이지를 참조하세요.

다음은 요청 핸들러 사용에 적용되는 한도입니다.

요청 한도

  • 요청 헤더에 최대 15KB까지 허용됩니다.
  • 요청의 총 크기는 32MB로 제한됩니다.
  • 모든 HTTP/2 요청은 애플리케이션 서버로 전달될 때 HTTP/1.1 요청으로 변환됩니다.
  • SSL 연결은 부하 분산기에서 종료됩니다. 부하 분산기의 트래픽은 암호화된 채널을 통해 인스턴스로 전송된 후 HTTP를 통해 애플리케이션 서버로 전달됩니다. X-Forwarded-Proto 헤더를 통해 원본 요청이 HTTP 또는 HTTPS였는지 알 수 있습니다.

응답 한도

  • 응답은 64k 블록으로 버퍼링됩니다.
  • 응답 크기는 무제한입니다.
  • 응답 시간 제한은 1시간입니다.

지원되지 않는 HTTP 요청

다음 기능은 App Engine 가변형 환경에서 지원되지 않습니다.

  • 백엔드 서비스로 가는 HTTP/2 트래픽
  • 인스턴스에 직접 액세스하는 HTTP 요청

요청 헤더

수신되는 HTTP 요청에는 클라이언트가 전송한 HTTP 헤더가 포함되어 있습니다. 보안을 위해 일부 헤더는 애플리케이션에 도달하기 전 중간 프록시에 의해 삭제 또는 수정됩니다.

자세한 내용은 요청 헤더 참조를 확인하세요.

HTTPS 연결 강제 적용

보안상의 이유로 모든 애플리케이션은 클라이언트가 https를 통해 연결하도록 권장해야 합니다. 브라우저에서 특정 페이지 또는 전체 도메인에 대해 http보다 https를 우선 사용하도록 지시하려면 응답에 Strict-Transport-Security 헤더를 설정합니다. 예를 들면 다음과 같습니다.

Strict-Transport-Security: max-age=31536000; includeSubDomains

대부분의 앱 프레임워크 및 웹 서버는 코드에서 생성된 응답용 헤더를 설정하기 위한 지원을 제공합니다. Spring Boot의 Strict-Transport-Security 헤더에 관한 자세한 내용은 HTTP Strict Transport Security(HSTS)를 참조하세요.