

# API Gateway의 REST API 모의 통합
<a name="how-to-mock-integration"></a>

Amazon API Gateway는 API 메서드에 대한 모의 통합을 지원합니다. 이 기능을 통해 API 개발자는 통합 백엔드가 없어도 API Gateway에서 직접 API 응답을 생성할 수 있습니다. API 개발자라면 이 기능을 사용하여 프로젝트 개발이 완료되기 전에 API로 작업해야 하는 종속 팀에 대한 차단을 해제할 수 있습니다. 또한 이 기능을 활용하여 API의 개요와 탐색 기능을 제공하는 API에 대해 시작 페이지를 프로비저닝할 수 있습니다. 이러한 시작 페이지의 예는 [자습서: 예제를 가져와 REST API 생성](api-gateway-create-api-from-example.md)에서 설명한 예제 API의 루트 리소스에 대한 GET 메서드의 통합 요청 및 응답을 참조하세요.

API 개발자는 API Gateway가 모의 통합 요청에 응답하는 방법을 결정합니다. 이를 위해, 메서드의 통합 요청 및 통합 응답을 구성하여 정해진 상태 코드와 응답을 연결합니다. 모의 통합이 포함된 메서드가 `200` 응답을 반환하려면 다음을 반환하도록 통합 요청 본문 매핑 템플릿을 구성해야 합니다.

```
{"statusCode": 200}
```

예를 들어 다음의 본문 매핑 템플릿이 포함되도록 `200` 통합 응답을 구성하세요.

```
{
    "statusCode": 200,
    "message": "Go ahead without me."
}
```

 마찬가지로 메서드가 예를 들어 `500` 오류 응답을 반환하려면 다음을 반환하도록 통합 요청 본문 매핑 템플릿을 설정해야 합니다.

```
{"statusCode": 500}
```

예를 들어 다음의 매핑 템플릿을 사용하여 `500` 통합 응답을 설정하세요.

```
{
    "statusCode": 500,
    "message": "The invoked method is not supported on the API resource."
}
```

또는 통합 요청 매핑 템플릿을 정의하지 않고 모의 통합의 메서드가 기본 통합 응답을 반환하도록 할 수도 있습니다. 기본 통합 응답은 정의되지 않은 **HTTP status regex(HTTP 상태 regex)**가 포함된 응답입니다. 적절한 패스스루 동작이 설정되어야 합니다.

**참고**  
모의 통합은 대규모 응답 템플릿을 지원하지 않습니다. 사용 사례에 필요한 경우 대신 Lambda 통합 사용을 고려해야 합니다.

통합 요청 매핑 템플릿을 사용하여 애플리케이션 로직을 삽입하면 특정 조건에 따라 반환할 모의 통합 응답을 결정할 수 있습니다. 예를 들어 수신되는 요청에서 `scope` 쿼리 파라미터를 사용하여 성공 응답을 반환할지 오류 응답을 반환할지 결정할 수 있습니다.

```
{
  #if( $input.params('scope') == "internal" )
    "statusCode": 200
  #else
    "statusCode": 500
  #end
}
```

이런 방법으로 모의 통합의 메서드는 오류 응답을 포함한 다른 유형의 호출은 거부하면서 내부 호출을 통과시킵니다.



이 단원에서는 API Gateway 콘솔을 사용하여 API 메서드에 대한 모의 통합을 활성화하는 방법에 대해 설명합니다.

**Topics**
+ [API Gateway 콘솔을 사용하여 모의 통합 활성화](how-to-mock-integration-console.md)

# API Gateway 콘솔을 사용하여 모의 통합 활성화
<a name="how-to-mock-integration-console"></a>

API Gateway에 사용 가능한 메서드가 있어야 합니다. [자습서: HTTP 비 프록시 통합을 통해 REST API 생성](api-gateway-create-api-step-by-step.md)의 지침을 따르세요.

1. API 리소스를 선택하고 **메서드 생성**을 선택합니다.

   메서드를 생성하려면 다음을 수행합니다.

   1. **메서드 유형**에서 메서드를 선택합니다.

   1. **통합 유형**에서 **Mock**을 선택합니다.

   1. **메서드 생성**을 선택합니다.

   1. **메서드 요청** 탭의 **메서드 요청 설정**에서 **편집**을 선택합니다.

   1. **URL 쿼리 문자열 파라미터**를 선택합니다. **쿼리 문자열 추가**를 선택하고 **이름**에 **scope**를 입력합니다. 쿼리 파라미터에 따라 호출자가 내부 호출자인지 아닌지 결정됩니다.

   1. **저장**을 선택합니다.

1. **메서드 응답** 탭에서 **응답 생성**을 선택하고 다음을 수행합니다.

   1. **HTTP 상태**에 **500**을 입력합니다.

   1. **저장**을 선택합니다.

1. **통합 요청** 탭의 **통합 요청 설정**에서 **편집**을 선택합니다.

1. **매핑 템플릿**을 선택한 후 다음을 수행합니다.

   1. **매핑 템플릿 추가(Add mapping template)**를 선택합니다.

   1. **콘텐츠 유형**에 **application/json**을 입력합니다.

   1. **템플릿 본문**에 다음을 입력합니다.

      ```
      {
        #if( $input.params('scope') == "internal" )
          "statusCode": 200
        #else
          "statusCode": 500
        #end
      }
      ```

   1. **저장**을 선택합니다.

1. **통합 응답** 탭의 **기본값 - 응답**에서 **편집**을 선택합니다.

1. **매핑 템플릿**을 선택한 후 다음을 수행합니다.

   1. **콘텐츠 유형**에 **application/json**을 입력합니다.

   1. **템플릿 본문**에 다음을 입력합니다.

      ```
      {
          "statusCode": 200,
          "message": "Go ahead without me"
      }
      ```

   1. **저장**을 선택합니다.

1. **응답 생성**을 선택합니다.

   500 응답을 생성하려면 다음을 수행합니다.

   1. **HTTP 상태 regex**에 **5\$1d\$12\$1**를 입력합니다.

   1. **메서드 응답 상태**에서 **500**을 선택합니다.

   1. **저장**을 선택합니다.

   1. **5\$1d\$12\$1 - 응답**에서 **편집**을 선택합니다.

   1. **매핑 템플릿**을 선택한 다음 **매핑 템플릿 추가**를 선택합니다.

   1. **콘텐츠 유형**에 **application/json**을 입력합니다.

   1. **템플릿 본문**에 다음을 입력합니다.

      ```
      {
          "statusCode": 500,
          "message": "The invoked method is not supported on the API resource."
      }
      ```

   1. **저장**을 선택합니다.

1.  **테스트** 탭을 선택합니다. 탭을 표시하려면 오른쪽 화살표 버튼을 선택해야 할 수도 있습니다. Mock 통합을 테스트하려면 다음을 수행합니다.

   1. **쿼리 문자열**에 `scope=internal`을 입력합니다. **테스트**를 선택합니다. 테스트 결과에 다음이 표시됩니다.

      ```
      Request: /?scope=internal
      Status: 200
      Latency: 26 ms
      Response Body
      
      {
        "statusCode": 200,
        "message": "Go ahead without me"
      }
      
      Response Headers
      
      {"Content-Type":"application/json"}
      ```

   1. `scope=public`에 `Query strings`을 입력하거나 비워 둡니다. **테스트**를 선택합니다. 테스트 결과에 다음이 표시됩니다.

      ```
      Request: /
      Status: 500
      Latency: 16 ms
      Response Body
      
      {
        "statusCode": 500,
        "message": "The invoked method is not supported on the API resource."
      }
      
      Response Headers
      
      {"Content-Type":"application/json"}
      ```

먼저 메서드 응답에 헤더를 추가한 다음 통합 응답에서 헤더 매핑을 설정하면 모의 통합 응답에서 헤더를 반환할 수도 있습니다. 이는 사실 API Gateway 콘솔이 CORS 필수 헤더를 반환하여 CORS 지원을 활성화하는 방법입니다.