

# API Gateway에서 HTTP API에 대한 라우팅 생성
<a name="http-api-develop-routes"></a>

수신 API 요청을 백엔드 리소스로 직접 라우팅합니다. 라우팅은 HTTP 메서드와 리소스 경로(예: `GET /pets`) 등 두 부분으로 구성됩니다. 라우팅에 대한 특정 HTTP 메서드를 정의할 수 있습니다. 또는 `ANY` 메서드를 사용하여 리소스에 대해 정의하지 않은 모든 메서드와 일치시킬 수 있습니다. 다른 경로와 일치하지 않는 요청에 대해 catch-all 역할을 하는 `$default` 경로를 생성할 수 있습니다.

**참고**  
API Gateway는 URL 인코딩 요청 파라미터를 백엔드 통합에 전달하기 전에 디코딩합니다.

## 경로 변수 작업
<a name="http-api-routes-path-variables"></a>

HTTP API 라우팅에서 경로 변수를 사용할 수 있습니다.

예를 들어, `GET /pets/{petID}` 라우팅은 클라이언트가 `GET`에 제출하는 `https://api-id.execute-api.us-east-2.amazonaws.com/pets/6` 요청을 포착합니다.

*복잡한 경로 변수*는 라우팅의 모든 하위 리소스를 포착합니다. 복잡한 경로 변수를 생성하려면 변수 이름에 `+`를 추가합니다(예: `{proxy+}`). 복잡한 경로 변수는 리소스 경로의 끝에 있어야 합니다.

## 쿼리 문자열 파라미터 작업
<a name="http-api-routes-query-string-parameters"></a>

HTTP API에 대한 요청에 포함된 경우 API Gateway에서는 기본적으로 쿼리 문자열 파라미터를 백엔드 통합으로 보냅니다.

예를 들어, 클라이언트가 요청을 `https://api-id.execute-api.us-east-2.amazonaws.com/pets?id=4&type=dog`에 보내는 경우 쿼리 문자열 파라미터 `?id=4&type=dog`가 통합에 전송됩니다.

## `$default` 라우팅 작업
<a name="http-api-develop-routes.default"></a>

`$default` 라우팅은 API의 다른 라우팅과 명시적으로 일치하지 않는 요청을 포착합니다.

`$default` 라우팅이 요청을 받는 경우 API Gateway에서 전체 요청 경로를 통합에 보냅니다. 예를 들어 `$default` 라우팅만 있는 API를 생성하여 `ANY` HTTP 엔드포인트가 있는 `https://petstore-demo-endpoint.execute-api.com` 메서드에 통합할 수 있습니다. 요청을 `https://api-id.execute-api.us-east-2.amazonaws.com/store/checkout`에 보내는 경우 API Gateway에서 요청을 `https://petstore-demo-endpoint.execute-api.com/store/checkout`에 보냅니다.

HTTP 통합에 대한 자세한 내용은 [HTTP API에 대한 HTTP 프록시 통합 생성](http-api-develop-integrations-http.md) 단원을 참조하세요.

## API 요청 라우팅
<a name="http-api-develop-routes.evaluation"></a>

클라이언트가 API 요청을 보내는 경우 API Gateway에서 먼저 요청을 라우팅할 [스테이지](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-stages.html)를 결정합니다. 요청이 스테이지와 명시적으로 일치하는 경우 API Gateway는 요청을 해당 스테이지로 보냅니다. 요청과 완전히 일치하는 스테이지가 없는 경우 API Gateway는 요청을 `$default` 스테이지로 보냅니다. `$default` 스테이지가 없는 경우 API에서 `{"message":"Not Found"}`가 반환되며 CloudWatch 로그가 생성되지 않습니다.

스테이지를 선택한 후 API Gateway는 라우팅을 선택합니다. API Gateway는 다음 우선 순위를 사용하여 가장 일치하는 라우팅을 선택합니다.

1. 라우팅 및 메서드에 완전히 일치시킵니다.

1. 복잡한 경로 변수(`{proxy+}`)가 있는 라우팅 및 메서드에 일치시킵니다.

1. `$default` 라우팅

요청과 일치하는 라우팅이 없으면 API Gateway에서 `{"message":"Not Found"}`를 클라이언트로 반환합니다.

예를 들어 `$default` 단계가 있는 API와 다음 예제 라우팅을 고려합니다.

1. `GET /pets/dog/1`

1. `GET /pets/dog/{id}`

1. `GET /pets/{proxy+}`

1. `ANY /{proxy+}`

1. `$default`

   다음 표에는 API Gateway에서 요청을 예제 라우팅으로 라우팅하는 방법이 요약되어 있습니다.


| 요청 | 선택한 라우팅 | 설명 | 
| --- | --- | --- | 
|  `GET https://api-id.execute-api.region.amazonaws.com/pets/dog/1`  |  `GET /pets/dog/1`  |  요청이 이 정적 라우팅과 완전히 일치합니다.  | 
|  `GET https://api-id.execute-api.region.amazonaws.com/pets/dog/2`  |  `GET /pets/dog/{id}`  |  요청이 이 라우팅과 완전히 일치합니다.  | 
|  `GET https://api-id.execute-api.region.amazonaws.com/pets/cat/1`  |  `GET /pets/{proxy+}`  |  요청이 라우팅과 완전히 일치하지 않습니다. `GET` 메서드와 복잡한 경로 변수가 있는 라우팅은 이 요청을 포착합니다.  | 
| `POST https://api-id.execute-api.region.amazonaws.com/test/5` | `ANY /{proxy+}` |  `ANY` 메서드는 라우팅에 대해 정의하지 않은 모든 메서드와 일치합니다. 복잡한 경로 변수가 있는 라우팅은 `$default` 라우팅보다 우선 순위가 높습니다.  | 