

# API Gateway 콘솔을 사용하여 REST API에 대한 게이트웨이 응답 설정
<a name="set-up-gateway-response-using-the-console"></a>

다음 예시에서는 API Gateway 콘솔을 사용하여 REST API에 대한 게이트웨이 응답을 설정하는 방법을 보여줍니다.

**API Gateway 콘솔을 사용하여 게이트웨이 응답을 사용자 지정하려면**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. REST API를 선택합니다.

1. 기본 탐색 창에서 **게이트웨이 응답**을 선택합니다.

1. 응답 유형을 선택한 다음 **편집**을 선택합니다. 이 연습에서는 **누락된 인증 토큰**을 예로 들겠습니다.

1. API Gateway가 생성한 **상태 코드**를 변경하여, 사용자 API의 요구 사항에 부합하는 다른 상태 코드를 반환할 수 있습니다. 이 예에서 사용자 지정은 상태 코드를 기본값(`403`)에서 `404`로 변경합니다. 클라이언트가 지원되지 않거나 잘못되어 찾을 수 없는 리소스를 호출할 경우 이 오류 메시지가 발생하기 때문입니다.

1. 사용자 지정 헤더를 반환하려면 **응답 헤더**에서 **헤더 추가**를 선택합니다. 설명을 위해 다음 사용자 지정 헤더를 추가하겠습니다.

   ```
   Access-Control-Allow-Origin:'a.b.c'
   x-request-id:method.request.header.x-amzn-RequestId
   x-request-path:method.request.path.petId
   x-request-query:method.request.querystring.q
   ```

   앞서 본 헤더 매핑에서 정적 도메인 이름(`'a.b.c'`)은 `Allow-Control-Allow-Origin` 헤더에 매핑되어 API에 대한 CORS 액세스를 허용합니다. `x-amzn-RequestId`의 입력 요청 헤더는 응답의 `request-id`에 매핑됩니다. 수신되는 요청의 `petId` 경로 변수는 응답의 `request-path` 헤더에 매핑됩니다. 원래 요청의 `q` 쿼리 파라미터는 응답의 `request-query` 헤더에 매핑됩니다.

1. **응답 템플릿**에서 **콘텐츠 유형**은 `application/json`를 유지하고 **템플릿 본문** 편집기에 다음과 같은 본문 매핑 템플릿을 입력합니다.

   ```
   {
        "message":"$context.error.messageString",
        "type": "$context.error.responseType",
        "statusCode": "'404'",
        "stage": "$context.stage",
        "resourcePath": "$context.resourcePath",
        "stageVariables.a": "$stageVariables.a"
   }
   ```

   이 예는 게이트웨이 응답 본문의 속성에 `$context` 및 `$stageVariables` 속성을 매핑하는 방법을 보여줍니다.

1. **변경 사항 저장**을 선택합니다.

1. 새 단계 또는 기존 단계에 API를 배포합니다.

해당 API 메서드의 호출 URL이 `https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId}`라고 가정하고 다음 CURL 명령을 호출하여 게이트웨이 응답을 테스트합니다.

```
curl -v -H 'x-amzn-RequestId:123344566' https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/5/type?q=1
```

추가적인 쿼리 문자열 파라미터 `q=1`이 API와 호환되지 않기 때문에 지정된 게이트웨이 응답에서 오류가 반환됩니다. 다음과 비슷한 게이트웨이 응답이 표시됩니다.

```
> GET /custErr/pets/5?q=1 HTTP/1.1
Host: o81lxisefl.execute-api.us-east-1.amazonaws.com
User-Agent: curl/7.51.0
Accept: */*
 
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 334
Connection: keep-alive
Date: Tue, 02 May 2017 03:15:47 GMT
x-amzn-RequestId: 123344566
Access-Control-Allow-Origin: a.b.c
x-amzn-ErrorType: MissingAuthenticationTokenException
header-1: static
x-request-query: 1
x-request-path: 5
X-Cache: Error from cloudfront
Via: 1.1 441811a054e8d055b893175754efd0c3.cloudfront.net (CloudFront)
X-Amz-Cf-Id: nNDR-fX4csbRoAgtQJ16u0rTDz9FZWT-Mk93KgoxnfzDlTUh3flmzA==
 
{
     "message":"Missing Authentication Token",
     "type": MISSING_AUTHENTICATION_TOKEN,
     "statusCode": '404',
     "stage": custErr,
     "resourcePath": /pets/{petId},
     "stageVariables.a": a
}
```

앞의 예에서는 API 백엔드가 [Pet Store](http://petstore-demo-endpoint.execute-api.com/petstore/pets)이고 API에 단계 변수, `a`가 정의된 것으로 가정했습니다.