

# Amazon API Gateway 중요 정보
<a name="api-gateway-known-issues"></a>

다음 섹션에서는 API Gateway 사용에 영향을 줄 수 있는 참고 사항에 대해 자세히 설명합니다.

**Topics**
+ [Amazon API Gateway의 HTTP API 중요 정보](#api-gateway-known-issues-http-apis)
+ [Amazon API Gateway의 HTTP 및 WebSocket API 중요 정보](#api-gateway-known-issues-http-and-websocket-apis)
+ [Amazon API Gateway의 REST 및 WebSocket API 중요 정보](#api-gateway-known-issues-rest-and-websocket-apis)
+ [Amazon API Gateway의 WebSocket API 중요 정보](#api-gateway-known-issues-websocket-apis)
+ [Amazon API Gateway의 REST API 중요 정보](#api-gateway-known-issues-rest-apis)

## Amazon API Gateway의 HTTP API 중요 정보
<a name="api-gateway-known-issues-http-apis"></a>
+ HTTP API는 들어오는 `X-Forwarded-*` 헤더를 표준 `Forwarded` 헤더로 변환하고 송신 IP, 호스트 및 프로토콜을 추가합니다.
+ API Gateway는 페이로드가 없고 콘텐츠 길이가 0인 경우 콘텐츠 유형 헤더를 요청에 추가합니다.

## Amazon API Gateway의 HTTP 및 WebSocket API 중요 정보
<a name="api-gateway-known-issues-http-and-websocket-apis"></a>
+ Amazon API Gateway는 HTTP 및 WebSocket API에 Signature Version 4A를 공식적으로 지원하지 않습니다.

## Amazon API Gateway의 REST 및 WebSocket API 중요 정보
<a name="api-gateway-known-issues-rest-and-websocket-apis"></a>
+ API Gateway는 REST 및 WebSocket API에서 사용자 지정 도메인 이름 공유를 지원하지 않습니다.
+ 단계 이름에는 영숫자, 하이픈, 밑줄만 사용할 수 있습니다. 최대 길이는 128자입니다.
+ `/ping` 및 `/sping` 경로가 서비스 상태 확인을 위해 예약되어 있습니다. 사용자 지정 도메인이 있는 API 루트 수준의 리소스에서 이를 사용하면 정상적인 결과가 나오지 않습니다.
+ API Gateway는 현재 로그 이벤트를 1,024바이트로 제한합니다. 요청 및 응답 본문과 같이 1,024바이트가 넘는 로그 이벤트는 CloudWatch Logs에 제출되기 전에 API Gateway에서 잘립니다.
+ CloudWatch 지표는 현재 차원 이름 및 값을 유효한 XML 문자 255자로 제한합니다. (자세한 내용은 [CloudWatch 사용 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)를 참조하세요.) 차원 값은 API 이름, 레이블(스테이지) 이름 및 리소스 이름을 포함하여 사용자가 정의한 이름의 함수입니다. 이 이름을 선택할 때는 CloudWatch 지표 제한을 초과하지 않도록 주의하세요.
+ 매핑 템플릿의 최대 크기는 300KB입니다.

## Amazon API Gateway의 WebSocket API 중요 정보
<a name="api-gateway-known-issues-websocket-apis"></a>
+ API Gateway는 최대 128KB의 메시지 페이로드를 지원하며 최대 프레임 크기는 32KB입니다. 메시지가 32KB를 초과하면 32KB 이하의 여러 프레임으로 분할해야 합니다. 이보다 더 큰 메시지가 수신되면 코드 1009와 함께 연결이 해제됩니다.

## Amazon API Gateway의 REST API 중요 정보
<a name="api-gateway-known-issues-rest-apis"></a>
+ 임의의 요청 URL 쿼리 문자열에 대해서는 일반 텍스트 파이프 문자(`|`) 및 중괄호 문자(`{` 또는 `}`)가 지원되지 않으며 URL 인코딩되어야 합니다.
+ 임의의 요청 URL 쿼리 문자열에 대해서는 세미콜론 문자(`;`)가 지원되지 않으며 세미콜론 문자를 사용할 경우 데이터가 분할됩니다.
+ REST API는 URL 인코딩 요청 파라미터를 백엔드 통합에 전달하기 전에 디코딩합니다. UTF-8 요청 파라미터의 경우 REST API는 파라미터를 디코딩한 다음 이를 유니코드로 백엔드 통합에 전달합니다. REST API는 백엔드 통합에 전달하기 전에 백분율 문자(`%`)를 URL 인코딩합니다.
+ API Gateway 콘솔을 사용하여 API를 테스트할 때 자체 서명된 인증서를 백엔드에 제시하거나, 인증서 체인에서 중간 인증서가 누락되었거나, 기타 확인되지 않은 인증서 관련 예외가 백엔드에서 발생하는 경우 "알 수 없는 엔드포인트 오류" 응답을 받을 수 있습니다.
+ 프라이빗 통합이 포함된 API [https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) 또는 [https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) 엔터티의 경우, [https://docs.aws.amazon.com/apigateway/latest/api/API_VpcLink.html](https://docs.aws.amazon.com/apigateway/latest/api/API_VpcLink.html)의 하드 코딩된 참조를 모두 제거한 후 삭제해야 합니다. 그러지 않으면 현수 통합이 되고, `Resource` 또는 `Method` 엔터티가 삭제되어도 VPC 링크가 여전히 사용 중이라고 하는 오류를 수신하게 됩니다. 이 동작은 프라이빗 통합이 단계 변수를 통해 `VpcLink`를 참조할 때는 적용되지 않습니다.
+ 다음 백엔드에서는 API Gateway와 호환되는 방식으로 SSL 클라이언트 인증을 지원하지 않을 수 있습니다.
  + [NGINX](https://nginx.org/en/)
  +  [Heroku](https://www.heroku.com/)
+ API Gateway는 대부분의 [OpenAPI 2.0 사양](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md) 및 [OpenAPI 3.0 사양](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.1.md)을 지원하며, 다음은 예외입니다.
  + 경로 세그먼트에는 영숫자, 밑줄, 하이픈, 점, 쉼표, 콜론, 중괄호만 사용할 수 있습니다. 경로 파라미터는 별도의 경로 세그먼트여야 합니다. 예를 들어 "resource/\$1path\$1parameter\$1name\$1"은 유효하지만, "resource\$1path\$1parameter\$1name\$1"은 유효하지 않습니다.
  + 모델 이름에는 영숫자만 사용할 수 있습니다.
  + 파라미터 입력에는 다음과 같은 속성만 지원됩니다.`name` ,`in` ,`required` ,`type` ,`description` 다른 속성은 무시됩니다.
  + `securitySchemes` 유형을 사용할 경우 `apiKey`여야 합니다. 하지만 OAuth 2 및 HTTP 기본 인증은 [Lambda 권한 부여자](apigateway-use-lambda-authorizer.md)를 통해 지원되고, OpenAPI 구성은 [공급자 확장 기능](api-gateway-swagger-extensions-authorizer.md)을 통해 가능합니다.
  + `deprecated` 필드는 지원되지 않으며 내보낸 API에서 제거됩니다.
  + API Gateway 모델은 OpenAPI가 사용하는 JSON 대신 [JSON 스키마 draft 4](https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-04)를 사용하여 정의합니다.
  + 스키마 객체에서 `discriminator` 파라미터는 지원되지 않습니다.
  + `example` 태그는 지원되지 않습니다.
  + `nullable` 필드는 지원되지 않습니다.
  + `exclusiveMinimum`은 API Gateway에서 지원되지 않습니다.
  + `maxItems` 및 `minItems` 태그는 [단순 요청 확인](api-gateway-method-request-validation.md)에 포함되지 않습니다. 이 문제를 해결하려면 확인을 수행하기 전에 가져온 후 업데이트합니다.
  + OpenAPI 3.0의 경우 동일한 스키마 내의 정의에 대한 `$ref`를 사용하는 `oneOf`, `anyOf` 또는 `allOf`가 있을 수 없습니다. 스키마를 직접 입력하거나 별도의 API Gateway 모델 리소스를 정의할 수 있습니다. 자세한 내용은 [더 복잡한 모델 생성](models-mappings-models.md#api-gateway-request-validation-model-more-complex) 섹션을 참조하세요.
  + `oneOf`는 OpenAPI 2.0 또는 SDK 생성에서 지원되지 않습니다.
  + `readOnly` 필드는 지원되지 않습니다.
  + `$ref`는 다른 파일을 참조하는 데 사용할 수 없습니다.
  + OpenAPI 문서 루트에서는 `"500": {"$ref": "#/responses/UnexpectedError"}` 형식의 응답 정의를 사용할 수 없습니다. 이 문제를 해결하려면 참조를 인라인 스키마로 바꿉니다.
  + `Int32` 또는 `Int64` 유형의 숫자는 지원되지 않습니다. 예를 들면 다음과 같습니다.

    ```
    "elementId": {
        "description": "Working Element Id",
        "format": "int32",
        "type": "number"
    }
    ```
  + 10진수 형식 유형(`"format": "decimal"`)은 스키마 정의에서 지원되지 않습니다.
  + 메서드 응답에서 스키마 정의는 객체 유형이어야 하며 기본 유형일 수 없습니다. 예를 들어 `"schema": { "type": "string"}`은 지원되지 않습니다. 그러나 다음 객체 유형을 사용하여 이 문제를 해결할 수 있습니다.

    ```
    "schema": {
         "$ref": "#/definitions/StringResponse"
                }
    
     "definitions": {
        "StringResponse": {
          "type": "string"
        }
      }
    ```
  + API Gateway는 OpenAPI 사양에 정의된 루트 수준 보안을 사용하지 않습니다. 따라서 보안은 적절하게 적용될 수 있는 운영 수준에서 정의되어야 합니다.
  + `default` 키워드는 지원되지 않습니다.
+ API Gateway는 Lambda 통합 또는 HTTP 통합으로 메서드를 처리할 때 다음과 같은 제한 및 제약을 적용합니다.
  + 헤더 이름과 쿼리 파라미터는 대/소문자를 구분하여 처리합니다.
  + 다음 표에는 통합 엔드포인트로 헤더를 전송하거나 통합 엔드포인트에서 이를 다시 전송하는 경우, 끊기거나 다시 매핑되거나 수정될 수 있는 헤더가 나열됩니다. 이 표에서
    + `Remapped`은 헤더 이름이 `<string>`에서 `X-Amzn-Remapped-<string>`으로 변경됨을 의미합니다.

      `Remapped Overwritten`은 헤더 이름이 `<string>`에서 `X-Amzn-Remapped-<string>`으로 변경됨을 의미합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/api-gateway-known-issues.html)

    \$1 [서명 버전 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) 서명이 포함되어 있거나 `AWS_IAM` 권한 부여가 사용되는 경우 `Authorization` 헤더는 삭제됩니다.
+ API Gateway에서 생성된 API의 Android SDK는 `java.net.HttpURLConnection` 클래스를 사용합니다. Android 4.4 이전을 실행하는 장치에서 이 클래스는 `WWW-Authenticate` 헤더를 `X-Amzn-Remapped-WWW-Authenticate`에 다시 매핑하여 나온 401 응답에 대해 처리되지 않은 예외를 발생시킵니다.
+  API Gateway에서 생성한 Java, Android 및 API의 iOS SDK와 달리, API Gateway에서 생성한 API의 JavaScript SDK는 500 수준 오류에 대한 재시도를 지원하지 않습니다.
+  메서드의 테스트 호출은 `application/json`의 기본 콘텐츠 유형을 사용하며 다른 콘텐츠 유형의 사양을 무시합니다.
+ `X-HTTP-Method-Override` 헤더를 전달하여 API에 요청을 보낼 때 API Gateway는 메서드를 재정의합니다. 따라서 헤더를 백엔드에 전달하려면 헤더를 통합 요청에 추가해야 합니다.
+  요청의 `Accept` 헤더에 여러 미디어 유형이 포함되어 있는 경우 API Gateway에서는 첫 번째 `Accept` 미디어 유형만 인식합니다. `Accept` 미디어 유형의 순서를 제어할 수 없고 이진 콘텐츠의 미디어 유형이 목록의 맨 앞에 있지 않은 경우 API의 `Accept` 목록에서 첫 번째 `binaryMediaTypes` 미디어 유형을 추가할 수 있습니다. 그러면 API Gateway에서 콘텐츠를 이진 유형으로 반환합니다. 예를 들어 브라우저에서 `<img>` 요소를 사용하여 JPEG 파일을 보내려는 경우 브라우저에서 요청에 `Accept:image/webp,image/*,*/*;q=0.8`을 전송할 수 있습니다. `image/webp`를 `binaryMediaTypes` 목록에 추가하여 엔드포인트에서 JPEG 파일을 이진 유형으로 수신합니다.
+ `413 REQUEST_TOO_LARGE`에 대한 기본 게이트웨이 응답 사용자 지정은 현재 지원되지 않습니다.
+ API Gateway에는 모든 통합 응답에 대한 `Content-Type` 헤더가 포함되어 있습니다. 기본적으로 콘텐츠 유형은 `application/json`입니다.