

# 자습서: HTTP 비 프록시 통합을 통해 REST API 생성
<a name="api-gateway-create-api-step-by-step"></a>

 이 자습서에서는 Amazon API Gateway 콘솔을 사용하여 API를 완전히 새로 생성합니다. 콘솔을 API 설계 스튜디오로 간주해 이를 사용하여 API 기능의 범위를 정하고, 동작을 시험하고, API를 구축하고, 단계별로 API를 배포합니다.

**Topics**
+ [HTTP 사용자 지정 통합을 사용하여 API 만들기](#api-gateway-create-resource-and-methods)
+ [(선택 사항) 요청 파라미터 매핑](#api-gateway-create-resources-and-methods-next-steps)

## HTTP 사용자 지정 통합을 사용하여 API 만들기
<a name="api-gateway-create-resource-and-methods"></a>

 이 단원에서는 리소스 생성, 리소스에서 메서드 노출, 원하는 API 동작을 위한 메서드 구성, API 테스트 및 배포 등을 단계별로 살펴봅니다.

이 단계에서는 빈 API를 생성합니다. 다음 단계에서는 비프록시 HTTP 통합을 사용하여 API를 `http://petstore-demo-endpoint.execute-api.com/petstore/pets` 엔드포인트에 연결하는 리소스와 메서드를 생성합니다.

**API를 생성하려면**

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

1. API Gateway를 처음 사용하는 경우, 서비스의 기능을 소개하는 페이지가 나타납니다. **REST API**에서 **빌드**를 선택합니다. **예제 API 생성** 팝업이 나타나면 **확인**을 선택합니다.

   API Gateway를 처음 사용하는 것이 아닌 경우 **API 생성**을 선택합니다. **REST API**에서 **빌드**를 선택합니다.

1.  **API 이름**에서 **HTTPNonProxyAPI**을 입력합니다.

1. (선택 사항) **설명**에 설명을 입력합니다.

1. **API 엔드포인트 유형** 설정을 **지역**으로 유지합니다.

1. **IP 주소 유형**에서 **IPv4**를 선택합니다.

1. **API 생성**을 선택합니다.

**리소스** 트리에 메서드 없는 루트 리소스(`/`)가 표시됩니다. 이 연습에서는 PetStore 웹 사이트(http://petstore-demo-endpoint.execute-api.com/petstore/pets)의 HTTP 사용자 지정 통합을 사용하여 API를 구축합니다. 설명을 돕기 위해, 루트의 하위 항목으로 `/pets` 리소스를 생성하고, 이 리소스의 GET 메서드를 클라이언트에 공개하여 PetStore 웹사이트에서 판매 중인 Pets 품목의 목록을 가져오겠습니다.

**/pets 리소스를 생성하려면**

1. **리소스 생성**을 선택합니다.

1. **프록시 리소스**는 꺼진 상태로 둡니다.

1. **리소스 경로**를 `/`로 유지합니다.

1. **리소스 이름**에 **pets**을 입력합니다.

1. **오리진 간 리소스 공유(CORS)**를 꺼진 상태로 둡니다.

1. **리소스 생성**을 선택합니다.

이 단계에서는 **/pets** 리소스의 `GET` 메서드를 생성합니다. `GET` 메서드는 `http://petstore-demo-endpoint.execute-api.com/petstore/pets` 웹 사이트와 통합되어 있습니다. API 메서드의 다른 옵션에는 다음이 포함됩니다.
+ **POST**는 주로 하위 리소스를 생성하는 데 사용됩니다.
+ **PUT**은 주로 기존 리소스를 업데이트하는 데 사용되며, 권장되지는 않지만 하위 리소스를 생성하는 데에도 사용될 수 있습니다.
+ **DELETE**는 리소스를 삭제하는 데 사용됩니다.
+ **PATCH**는 리소스를 업데이트하는 데 사용됩니다.
+ **HEAD**는 주로 시나리오를 테스트하는 데 사용됩니다. GET와 동일하지만 리소스 표현을 반환하지 않습니다.
+ **OPTIONS**는 호출자가 타겟 서비스에 사용 가능한 통신 옵션에 대한 정보를 가져오는 데 사용할 수 있습니다.

 통합 요청의 **HTTP 메서드(HTTP method)**에 백엔드에서 지원하는 항목을 선택해야 합니다. `HTTP` 또는 `Mock integration`의 경우, 메서드 요청과 통합 요청이 동일한 HTTP 동사를 사용하는 것이 합리적입니다. 다른 통합 유형 및 메서드 요청의 경우, 통합 요청과 다른 HTTP 동사를 사용할 가능성이 높습니다. 예를 들어 Lambda 함수를 호출하기 위해 통합 요청은 `POST`를 이용해 함수를 호출해야 하는 반면, 메서드 요청은 Lambda 함수의 로직에 따라 임의의 HTTP 동사를 사용할 수 있습니다.

****/pets** 리소스에 `GET` 메서드를 생성하려면**

1. **/pets** 리소스를 선택합니다.

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

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

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

1. **HTTP 프록시 통합**을 꺼진 상태로 둡니다.

1. **HTTP 메서드**에서 **GET**을 선택합니다.

1. **엔드포인트 URL**에 **http://petstore-demo-endpoint.execute-api.com/petstore/pets**를 입력합니다.

   PetStore 웹사이트 페이지에서 반려 동물 유형별로(예: ‘Dog’ 또는 ‘Cat’) `Pet` 항목의 목록을 가져올 수 있습니다.

1. **콘텐츠 처리**에서 **패스스루**를 선택합니다.

1. **URL 쿼리 문자열 파라미터**를 선택합니다.

   PetStore 웹사이트는 `type` 및 `page` 쿼리 문자열 파라미터를 사용해 이러한 입력을 수락합니다. 메서드 요청에 쿼리 문자열 파라미터를 추가하고 이를 연동 요청의 해당 쿼리 문자열 파라미터에 매핑합니다.

1. 쿼리 문자열 파라미터를 추가하려면 다음을 따라합니다:

   1. **쿼리 문자열 추가(Add query string)**를 선택합니다.

   1. **이름**에 **type**을 입력합니다.

   1. **필수** 상태로 유지하고 **캐싱**을 해제합니다.

   이전 단계를 반복하여 이름이 **page**인 추가 쿼리 문자열을 생성합니다.

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

이제 클라이언트는 요청을 제출할 때 반려 동물 유형과 페이지 번호를 쿼리 문자열 파라미터로 제공할 수 있습니다. 이러한 입력 파라미터를 통합의 쿼리 문자열 파라미터에 매핑하여 백엔드에서 PetStore 웹사이트에 입력 값을 전달해야 합니다.

**입력 파라미터를 통합 요청에 매핑하려면**

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

1. **URL 쿼리 문자열 파라미터**를 선택하고 다음을 수행합니다.

   1. **쿼리 문자열 파라미터 추가**를 선택합니다.

   1. **이름**에 **type**를 입력합니다.

   1. **다음에서 매핑됨**에 **method.request.querystring.type**을 입력합니다.

   1. **캐싱**을 꺼진 상태로 둡니다.

   1. **쿼리 문자열 파라미터 추가**를 선택합니다.

   1. **이름**에 **page**를 입력합니다.

   1. **다음에서 매핑됨**에 **method.request.querystring.page**을 입력합니다.

   1. **캐싱**을 꺼진 상태로 둡니다.

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

**API를 테스트하려면**

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

1. **쿼리 문자열**에 **type=Dog&page=2**를 입력합니다.

1. **테스트**를 선택합니다.

    그 결과는 다음과 비슷합니다.

      
![\[pets 메서드 결과에 GET 호출 테스트\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/api-gateway-create-api-step-by-step-test-invoke-get-on-pets-result-new-console.png)

    테스트에 성공했으므로, API를 배포해 공개적으로 사용 가능하도록 할 수 있습니다.

1. **Deploy API(API 배포)**를 선택합니다.

1. **스테이지**에서 **새 스테이지**를 선택합니다.

1. **단계 이름**에 **Prod**를 입력합니다.

1. (선택 사항) **설명**에 설명을 입력합니다.

1. **배포(Deploy)**를 선택합니다.

1.  (선택 사항) **스테이지 세부 정보**의 **URL 호출**에서 복사 아이콘을 선택하여 API의 호출 URL을 복사합니다. 이 URL을 [Postman](https://www.postman.com) 및 [cURL](https://curl.se/)과 같은 도구에서 사용하여 API를 테스트할 수 있습니다.

 SDK를 이용해 클라이언트를 생성하면 SDK가 공개한 메서드를 호출하여 요청을 보낼 수 있습니다. 구현 세부 정보는 선택한 [AWS SDK](https://aws.amazon.com/developer/tools/)를 참조하세요.

**참고**  
 API가 변경되면 API를 다시 배포하여 새 기능 또는 업데이트된 기능을 사용할 수 있도록 한 후 요청 URL을 다시 호출해야 합니다.

## (선택 사항) 요청 파라미터 매핑
<a name="api-gateway-create-resources-and-methods-next-steps"></a>

### API Gateway API에 대한 요청 파라미터 매핑
<a name="getting-started-mappings"></a>

 이 자습서에서는 항목 ID를 지정하고, 이를 통합 요청 URL의 `{petId}` 경로 파라미터에 매핑하고, 요청을 HTTP 엔드포인트로 보내기 위해 API의 메서드 요청에서 `{id}`의 경로 파라미터를 생성하는 방법을 보여줍니다.

**참고**  
 대문자 대신 소문자를 입력하거나 그 반대로 입력하면 연습 뒷부분에서 오류가 발생할 수 있습니다.

#### 1단계: 리소스 생성
<a name="getting-started-mappings-add-resources"></a>

이 단계에서는 경로 파라미터 \$1petid\$1를 사용하여 리소스를 생성합니다.

**\$1petId\$1 리소스를 생성하려면**

1. **/pets** 리소스를 선택한 다음 **리소스 생성**을 선택합니다.

1. **프록시 리소스**는 꺼진 상태로 둡니다.

1. **리소스 경로**에서 **/pets/**를 선택합니다.

1. **리소스 이름**에 **\$1petId\$1**을 입력합니다.

    **/pets/\$1petId\$1**가 표시되도록 `petId`에 중괄호(`{ }`)를 사용합니다.

1. **오리진 간 리소스 공유(CORS)**를 꺼진 상태로 둡니다.

1. **리소스 생성**을 선택합니다.

#### 2단계: 메서드 생성 및 테스트
<a name="getting-started-mappings-set-methods"></a>

 이 단계에서는 `{petId}` 경로 파라미터를 사용하여 `GET` 메서드를 생성합니다.

**GET 메서드를 설정하려면**

1. **/\$1petId\$1** 리소스를 선택한 다음 **메서드 생성**을 선택합니다.

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

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

1. **HTTP 프록시 통합**을 꺼진 상태로 둡니다.

1. **HTTP 메서드**에서 **GET**을 선택합니다.

1. **엔드포인트 URL**에 **http://petstore-demo-endpoint.execute-api.com/petstore/pets/\$1id\$1**를 입력합니다.

1. **콘텐츠 처리**에서 **패스스루**를 선택합니다.

1. **기본 제한 시간**을 켜진 상태로 둡니다.

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

이제 방금 생성한 `{petId}` 경로 파라미터를 통합 요청의 HTTP 엔드포인트 URL에 있는 `{id}` 경로 파라미터에 매핑합니다. HTTP 엔드포인트 URL은 **http://petstore-demo-endpoint.execute-api.com/petstore/pets/\$1id\$1**였습니다.

**`{petId}` 경로 파라미터를 매핑하려면**

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

1. **URL 경로 파라미터**를 선택합니다.

1.  API Gateway는 **petId**라는 이름의 통합 요청에 대한 경로 파라미터를 생성하지만 이 경로 파라미터는 백엔드 통합으로 설정한 HTTP 엔드포인트 URL에는 유효하지 않습니다. HTTP 엔드포인트는 경로 파라미터로 `{id}`를 사용합니다. **이름**에서 **petId**를 삭제하고 **id**를 입력합니다.

   그렇게 하면 `petId`의 메서드 요청 경로 파리미터가 `id`의 통합 요청 경로 파라미터로 매핑됩니다.

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

이제 메서드를 테스트합니다.

** 메서드를 테스트하는 방법**

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

1. **petId**의 **경로**에 **4**를 입력합니다.

1. **테스트**를 선택합니다.

   올바르게 수행했다면 **응답 본문**에 다음이 표시됩니다.

   ```
   {
     "id": 4,
     "type": "bird",
     "price": 999.99
   }
   ```

#### 3단계: API 배포
<a name="getting-started-mappings-deploy"></a>

이 단계에서는 API를 API Gateway 콘솔 외부에서 호출을 시작할 수 있도록 배포합니다.

**API를 배포하려면**

1. **Deploy API(API 배포)**를 선택합니다.

1. **스테이지**에서 **Prod**를 선택합니다.

1. (선택 사항) **설명**에 설명을 입력합니다.

1. [**Deploy**]를 선택합니다.

#### 4단계: API 테스트
<a name="getting-started-mappings-test"></a>

이 단계에서는 API Gateway 콘솔 외부로 이동하고 API를 사용하여 HTTP 엔드포인트에 액세스합니다.

1. 기본 탐색 창에서 **스테이지**를 선택합니다.

1. **스테이지 세부 정보**에서 복사 아이콘을 선택하여 API의 호출 URL을 복사합니다.

   다음과 같아야 합니다.

   ```
   https://my-api-id.execute-api.region-id.amazonaws.com/prod
   ```

1. 이 URL을 새 브라우저 탭의 주소 표시줄에 입력하고 URL에 `/pets/4`를 추가한 다음 요청을 제출합니다.

1. 브라우저에서 다음을 반환합니다.

   ```
   {
     "id": 4,
     "type": "bird",
     "price": 999.99
   }
   ```

#### 다음 단계
<a name="api-gateway-create-resources-and-methods-next-steps"></a>

요청 검사를 켜거나, 데이터를 변환하거나, 사용자 지정 게이트웨이 응답을 생성하여 API를 추가로 사용자 지정할 수 있습니다.

API를 사용자 지정하는 더 많은 방법은 다음 자습서를 참조하세요.
+ 요청 검증에 대한 자세한 내용은 [API Gateway의 기본 요청 확인 설정](api-gateway-request-validation-set-up.md)를 참조하세요.
+ 요청 및 응답 페이로드를 변환하는 방법에 대한 자세한 내용은 [자습서: AWS 서비스에 대한 통합의 통합 요청 및 응답 수정](set-up-data-transformations-in-api-gateway.md) 섹션을 참조하세요.
+ 사용자 지정 게이트웨이 응답을 생성하는 방법에 대한 자세한 내용은 [API Gateway 콘솔을 사용하여 REST API에 대한 게이트웨이 응답 설정](set-up-gateway-response-using-the-console.md) 섹션을 참조하세요.