커스텀 오류 응답 개요

전역 외부 애플리케이션 부하 분산기를 사용하면 HTTP 오류 상태 코드(4xx5xx)가 생성될 때 자체 오류 응답을 맞춤설정할 수 있습니다. 부하 분산기와 백엔드 인스턴스 모두에서 생성된 오류의 오류 응답을 맞춤설정할 수 있습니다. Google Cloud Armor에서 트래픽이 거부될 때 생성되는 오류 응답 코드에 대한 오류 응답을 맞춤설정할 수도 있습니다.

다음은 자체 회사 브랜드 및 로고, 관련 페이지 링크, 맞춤설정된 메시지를 통해 외부에 공개되는 소비자 애플리케이션의 오류 응답을 구성할 수 있는 커스텀 오류 페이지의 예시입니다.

커스텀 HTTP 오류 응답 페이지
커스텀 HTTP 오류 응답 페이지

커스텀 오류 응답 정책을 사용하여 여러 HTTP 오류 상태 코드, URL 도메인, URL 경로, HTTP 요청 헤더 및 매개변수 필드에 서로 다른 오류 응답을 구성할 수 있습니다.

커스텀 오류 응답을 반환하면 다음과 같은 이점을 제공하여 사용자 환경을 개선할 수 있습니다.

  • 일관된 브랜딩 경험 제공
  • 컨텍스트와 관련성 있는 정보를 제공하여 사용성 및 사용자 환경 향상
  • 다운타임 및 클라이언트 측 오류의 부정적인 영향 완화
  • 네트워크 보안 강화

커스텀 오류 응답 정책을 구성하지 않으면 그림 2와 같이 브랜드 없는 일반적인 오류 객체가 제공됩니다.

일반 HTTP 오류 응답 페이지
일반 HTTP 오류 응답 페이지

사용 사례

커스텀 오류 응답 기능은 많은 사용 사례를 다룹니다. 이 섹션에서는 몇 가지 개략적인 예시를 설명합니다.

자체 유지보수 페이지 정의

백엔드가 비정상이거나 유지보수 모드일 때 회사 브랜딩 및 정보가 포함된 오류 페이지를 반환할 수 있습니다. 고객센터 전화번호나 사용자가 웹사이트 액세스를 다시 시도해야 하는 경우와 같은 유용한 정보가 포함된 문맥적 오류 페이지를 빌드할 수 있습니다. 호스트 이름 및 HTTP 오류 코드와 같은 오류 조건 일치에 따라 오류 페이지를 맞춤설정할 수 있습니다.

자체 기본 오류 페이지 정의

특정 오류 코드에 따라 맞춤설정된 오류 응답을 설정할 수 있습니다. 예를 들어 401 (Unauthorized) HTTP 응답 코드에 '로그인 또는 등록' 메시지가 포함된 오류 페이지를 설정할 수 있습니다. 다른 모든 4xx 시리즈 및 5xx 시리즈 HTTP 오류 코드에 대한 회사 브랜딩 및 기타 관련 정보가 포함된 기본 오류 페이지를 설정할 수도 있습니다.

보안 규칙의 오류 응답 정의

Google Cloud Armor 보안 정책에 의해 트래픽이 거부될 때 생성되는 오류 응답 코드에 대한 커스텀 오류 페이지를 반환할 수 있습니다. Google Cloud Armor 보안 규칙에 입력한 것과 동일한 4xx 시리즈 또는 5xx 시리즈 HTTP 오류 코드로 오류 페이지를 구성해야 합니다.

다운타임의 영향 완화

해당하는 경우 200 (OK) HTTP 상태 코드를 반환하도록 오류 응답을 구성하고 정적 웹페이지를 제공하여 다운타임 중 오류 페이지 대신 사용자에게 보다 유용한 컨텍스트 정보를 제공할 수 있습니다.

클라이언트 요청 유형에 따라 오류 응답 맞춤설정

HTTP 요청 헤더 및 매개변수(예: Content-Type 헤더)를 기준으로 오류 응답을 맞춤설정할 수 있습니다. 원래 요청을 오류 서비스로 라우팅할 때 라우팅은 Content-Type 헤더를 고려하여 웹페이지(브라우저에서의 요청의 경우) 또는 JSON(웹 API에서의 요청의 경우)을 제공할 수 있습니다.

커스텀 오류 응답 정책 작동 방식

커스텀 오류 응답 정책은 URL 맵 리소스의 세 가지 수준(부하 분산기 수준, URL 도메인 수준, URL 경로 수준)에서 정의할 수 있습니다.

  • 부하 분산기 수준. 정책은 부하 분산기에서 수신되는 모든 트래픽에 적용됩니다.

  • URL 도메인 수준. 정책은 특정 도메인 이름 또는 호스트 이름(예: www.example.com)으로 전달되는 트래픽에 적용됩니다.

  • URL 경로 수준. 정책은 특정 경로(예: www.example.com/images/*)로 전달되는 트래픽에 적용됩니다. 이 수준에서 HTTP 요청 헤더 및 매개변수와 함께 고급 일치 조건을 사용할 수도 있습니다(예: Content-Type:application/json).

다음 표에서는 부하 분산기 수준, URL 도메인 수준, URL 맵의 URL 경로 수준에서 적용된 커스텀 오류 응답 정책을 보여줍니다.

정책 수준 API 필드
부하 분산기 urlMaps.defaultCustomErrorResponsePolicy
URL 도메인 pathMatchers[].defaultCustomErrorResponsePolicy
URL 경로

pathMatchers[].pathRules[].customErrorResponsePolicy

pathMatchers[].routeRules[].customErrorResponsePolicy

URL 맵 리소스의 여러 수준에서 커스텀 오류 응답 정책을 구성하면 가장 낮은 수준의 URL 맵 수준에서 커스텀 오류 정책에 의해 지정된 오류 객체가 반환됩니다. URL 맵의 하위 수준에 정의된 오류 응답 정책은 더 구체적이며 URL 맵의 상위 수준에 정의된 오류 응답 정책보다 우선 적용됩니다.

예를 들어, 정책이 오류 조건과 일치하고 하위 수준(URL 도메인 또는 URL 경로)의 오류 코드에 대해 일치하는 정책이 정의되지 않은 경우에만 부하 분산기 수준의 커스텀 오류 응답 정책이 적용됩니다. 마찬가지로 URL 도메인 수준의 커스텀 오류 응답 정책은 정책이 오류 조건과 일치하고 하위 수준(URL 경로)의 오류 코드에 대해 일치하는 정책이 정의되지 않은 경우에만 적용됩니다. 이 구성에 대한 자세한 내용은 여러 도메인, 경로, 오류 응답 코드에 대해 세분화된 커스텀 오류 응답 정책 구성을 참조하세요.

HTTP 오류 응답 코드와 일치하도록 여러 오류 응답 규칙 지정

커스텀 오류 응답 정책 내의 어느 수준에서나 여러 오류 응답 규칙을 지정할 수 있습니다. 이러한 규칙은 특정 오류 코드 또는 오류 코드 범위와 HTTP 오류 응답을 일치시킬 수 있습니다. 오류 코드 범위에 대한 규칙과 특정 오류 코드에 대한 규칙을 지정하면 특정 오류 코드가 있는 규칙이 우선 적용됩니다.

예를 들어 401 (Unauthorized) 오류 코드에 대한 규칙을 구성하고 모든 4xx 시리즈 오류 코드에 대한 다른 규칙을 구성한다고 가정해 보겠습니다. 백엔드 서비스가 401 오류 코드를 반환하면 401 오류와 일치하는 규칙이 적용됩니다. 그러나 백엔드 서비스가 403 오류 코드를 반환하면 4xx 오류 규칙이 적용됩니다.

HTTP 응답 코드 재정의

오류 응답 규칙을 사용하면 부하 분산기에서 반환된 HTTP 응답 코드를 수정할 수 있습니다. 즉, 기본적으로 서버에서 생성된 응답 코드를 재정의하고 요청의 최종 응답 코드를 정의할 수 있습니다. 200 (OK), 4xx 시리즈, 응답 코드의 5xx 시리즈 또는 기타 3자리 응답 코드를 비롯한 모든 HTTP 응답 코드를 반환하도록 지정할 수 있습니다. 응답 코드 재정의에 관한 자세한 내용은 특정 호스트의 특정 오류 코드에 대한 오류 페이지 구성을 참조하세요.

재정의 응답 코드를 정의하면 부하 분산 로그에 새 필드 overrideResponseCodeServed로 캡처됩니다. 이 필드는 커스텀 오류 응답 정책에 의해 재정의 응답 코드가 적용된 요청에 대해서만 채워집니다.

httpRequest 필드에 로깅된 status 코드는 영향을 받지 않습니다. 서버에서 생성된 HTTP 응답 코드 또는 부하 분산기에서 반환하는 HTTP 응답을 캡처합니다. 이 상태 코드는 커스텀 오류 응답 정책에 의해 응답 코드가 수정된 경우 클라이언트에 제공된 실제 코드와 다를 수 있습니다.

커스텀 오류 응답 캐시

오류를 생성한 백엔드에 음성 캐싱 정책을 지정하여 커스텀 오류 응답을 캐시할 수 있습니다. 이렇게 하는 이유는 일반적인 오류나 리디렉션을 위해 캐싱을 세밀하게 제어해야 하기 때문입니다. 이렇게 하면 응답 지연 시간이 단축되므로 원본의 부하를 줄이고 최종 사용자 환경을 개선할 수 있습니다.

오류를 생성한 백엔드에 정의된 음성 캐싱 정책은 항상 오류 서비스의 오류 객체에 정의된 Cache-Control 메타데이터보다 우선 적용됩니다. 또한 부하 분산기에서 재정의 응답 코드를 반환하면 백엔드가 부하 분산기에 반환한 원래 응답 코드가 아닌 재정의 응답 코드의 값을 기반으로 음성 캐싱 정책이 적용됩니다. 오류가 아닌 코드(HTTP 200)가 재정의 응답 코드로 반환되면 부정적 캐싱 정책이 적용되지 않습니다.

오류 응답의 TTL(수명)이 만료되지 않은 경우 부하 분산기는 요청을 백엔드 서비스 또는 백엔드 버킷으로 라우팅하지 않고 캐시된 콘텐츠를 계속 제공합니다. 그러나 이 동작은 부하 분산기에 Cloud CDN이 사용 설정되어 있는지에 따라 다릅니다.

부하 분산기에 Cloud CDN이 사용 설정되어 있습니다.

이 섹션에서는 Cloud CDN이 사용 설정되어 있고 커스텀 오류 응답이 사용되는 경우 부하 분산기의 동작을 설명합니다.

  1. 부하 분산기에서 요청을 수신하면 Cloud CDN 캐시를 확인합니다. 부하 분산기가 사용자의 요청에 캐시된 응답을 찾으면 캐시된 응답을 사용자에게 반환합니다. 이 캐시된 응답은 사용자의 요청된 콘텐츠 또는 맞춤 오류 객체일 수 있습니다.

  2. 캐시 부적중이 발생하면 요청이 부하 분산기에서 처리되고 백엔드로 전송됩니다.

  3. 백엔드가 오류가 아닌 응답을 제공하면 해당 응답이 최종 사용자에게 반환됩니다. 그러나 클라이언트 요청에 오류(4xx 또는 5xx HTTP 응답 코드)가 발생하면 부하 분산기는 다음과 같이 지정한 오류 서비스에서 커스텀 오류 객체를 가져오려고 시도합니다.

    1. 부하 분산기는 모든 커스텀 오류 응답 정책을 확인하고 오류 상태 코드 및 기타 일치 조건에 해당하는 커스텀 오류 객체의 적절한 경로를 가져옵니다.

    2. 부하 분산기는 커스텀 오류 응답 정책에 지정한 오류 서비스로 커스텀 오류 객체 요청을 전달합니다. 오류 서비스라는 용어는 커스텀 오류 콘텐츠를 제공하는 백엔드 버킷 또는 백엔드 서비스를 나타냅니다.

    3. 부하 분산기는 요청을 한 클라이언트에 커스텀 오류 객체를 반환합니다. 또한 cdnPolicy.negativeCachingPolicy[].ttl에 지정된 시간 동안 오류 객체를 캐시하기 위해 객체를 Cloud CDN으로 전송합니다.

부하 분산기에서 Cloud CDN이 사용 중지됨

Cloud CDN이 사용 중지된 경우 백엔드 서비스가 아닌 백엔드 버킷을 오류 서비스로 사용하는 것이 좋습니다. Cloud CDN이 사용 중지된 경우 백엔드 서비스가 콘텐츠를 캐시할 수 없기 때문입니다. 하지만 백엔드 버킷에는 기본 제공되는 캐싱 기능이 있으며 Cloud CDN이 사용 중지된 경우에도 오류 응답을 캐시할 수 있습니다.

제한사항

  • 커스텀 오류 응답은 전역 외부 애플리케이션 부하 분산기에서만 지원됩니다. 리전 및 기존 모드는 지원되지 않습니다.

  • 오류 서비스에서 커스텀 오류 객체를 가져올 수 없는 경우(예: 콘텐츠 경로가 잘못 구성된 경우)에는 브랜드 없는 일반적인 오류 객체가 제공됩니다.

  • 커스텀 오류 응답 정책은 오류 서비스에서 보안 위험을 위해 반환하는 객체를 모니터링하거나 필터링하지 않습니다. 따라서 취약점을 제거하고 잠재적인 노출의 영향을 제한하는 데 세심한 주의를 기울여야 합니다.

  • 커스텀 오류 응답은 공개적으로 읽을 수 있는 Cloud Storage 버킷에서만 지원됩니다.

    Cloud Storage 버킷을 사용하는 동안 구성 오류가 발생하지 않도록 하려면 일반적인 Cloud Storage 권장사항을 검토하세요.

가격 책정

커스텀 오류 응답을 사용하는 데 추가 비용이 들지 않습니다. Google Cloud 부하 분산의 표준 가격이 적용됩니다. 자세한 내용은 가격 책정을 참조하세요.

다음 단계