

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# RDS 내부 검사를 통한 GraphQL API 빌드
<a name="rds-introspection"></a>

AWS AppSync의 내부 검사 유틸리티는 데이터베이스 테이블에서 모델을 검색하고 GraphQL 유형을 제안할 수 있습니다. AWS AppSync 콘솔의 API 생성 마법사는 Aurora MySQL 또는 PostgreSQL 데이터베이스에서 API를 즉시 생성할 수 있습니다. 데이터를 읽고 쓸 수 있는 유형과 JavaScript 해석기를 자동으로 생성합니다.

AWS AppSync 는 Amazon RDS Data API를 통해 Amazon Aurora 데이터베이스와 직접 통합합니다. Amazon RDS Data API는 영구 데이터베이스 연결이 필요한 대신 SQL 문 실행을 위해에 AWS AppSync 연결하는 보안 HTTP 엔드포인트를 제공합니다. 이를 사용하여 Aurora에서 MySQL 및 PostgreSQL 워크로드를 위한 관계형 데이터베이스 API를 생성할 수 있습니다.

를 사용하여 관계형 데이터베이스용 API를 빌드하면 다음과 같은 몇 가지 이점 AWS AppSync 이 있습니다.
+ 데이터베이스는 액세스 포인트를 데이터베이스 자체에서 분리하므로 클라이언트에 직접 노출되지 않습니다.
+ 다양한 애플리케이션의 요구 사항에 맞게 특별히 구축된 API를 구축할 수 있으므로 프런트엔드에서 사용자 지정 비즈니스 로직이 필요하지 않습니다. 이는 Backend-For-Frontend(BFF) 패턴과 일치합니다.
+ 다양한 권한 부여 모드를 사용하여 AWS AppSync 계층에서 권한 부여 및 액세스 제어를 구현하여 액세스를 제어할 수 있습니다. 웹 서버 호스팅 또는 프록시 연결과 같이 데이터베이스에 연결하는 데 추가 컴퓨팅 리소스가 필요하지 않습니다.
+ 구독을 통해 실시간 기능을 추가할 수 있으며, AppSync를 통해 이루어진 데이터 변경은 연결된 클라이언트에 자동으로 푸시됩니다.
+ 클라이언트는 443과 같은 일반 포트를 사용하여 HTTPS를 통해 API에 연결할 수 있습니다.

AWS AppSync 를 사용하면 기존 관계형 데이터베이스에서 APIs 쉽게 빌드할 수 있습니다. 내부 검사 유틸리티는 데이터베이스 테이블에서 모델을 검색하고 GraphQL 유형을 제안할 수 있습니다. AWS AppSync 콘솔의 *API 생성* 마법사는 Aurora MySQL 또는 PostgreSQL 데이터베이스에서 API를 즉시 생성할 수 있습니다. 데이터를 읽고 쓸 수 있는 유형과 JavaScript 해석기를 자동으로 생성합니다.

AWS AppSync 는 해석기에서 SQL 문 작성을 간소화하는 통합 JavaScript 유틸리티를 제공합니다. 동적 값이 있는 정적 문에 AWS AppSync의 `sql` 태그 템플릿을 사용하거나 `rds` 모듈 유틸리티를 사용하여 프로그래밍 방식으로 문을 빌드할 수 있습니다. 자세한 내용은 [RDS용 해석기 함수 참조](https://docs.aws.amazon.com//appsync/latest/devguide/resolver-reference-rds-js.html) 데이터 소스 및 [내장 모듈](https://docs.aws.amazon.com//appsync/latest/devguide/built-in-modules-js.html#built-in-rds-modules) 섹션을 참조하십시오.

## 내부 검사 기능 사용(콘솔)
<a name="using-introspection-console"></a>

자세한 자습서 및 시작하기 안내서는 [자습서: 데이터 API를 사용하는 Aurora PostgreSQL Serverless](https://docs.aws.amazon.com//appsync/latest/devguide/aurora-serverless-tutorial-js.html) 섹션을 참조하십시오.

 AWS AppSync 콘솔을 사용하면 몇 분 만에 데이터 API로 구성된 기존 Aurora 데이터베이스에서 AWS AppSync GraphQL API를 생성할 수 있습니다. 그러면 데이터베이스 구성을 기반으로 운영 스키마가 빠르게 생성됩니다. API를 있는 그대로 사용하거나 API를 기반으로 기능을 추가할 수 있습니다.

1. 에 로그인 AWS Management Console 하고 [AppSync 콘솔](https://console.aws.amazon.com/appsync/)을 엽니다.

   1. **대시보드**에서 **API 생성**을 선택합니다.

1. **API 옵션**에서 **GraphQL API**를 선택하고 **Amazon Aurora 클러스터로 시작**을 누른 다음 **다음**을 선택합니다.

   1. **API 이름**을 입력합니다. 이는 콘솔에서 API의 식별자로 사용됩니다.

   1. **연락처 세부 정보**에는 API 관리자를 식별할 연락처를 입력하면 됩니다. 이 필드는 선택 사항입니다.

   1. **프라이빗 API 구성**에서 프라이빗 API 기능을 활성화할 수 있습니다. 프라이빗 API는 구성된 VPC 엔드포인트(VPCE)에서만 액세스할 수 있습니다. 자세한 내용은 [프라이빗 API](https://docs.aws.amazon.com//appsync/latest/devguide/using-private-apis.html)를 참조하세요.

      이 예에서는 이 기능을 활성화하지 않는 것이 좋습니다. 입력 내용을 검토한 후 **다음**을 선택합니다.

1. **데이터베이스** 페이지에서 **데이터베이스 선택**을 선택합니다.

   1. 클러스터에서 데이터베이스를 선택해야 합니다. 첫 번째 단계는 클러스터가 있는 **리전**을 선택하는 것입니다.

   1. 드롭다운 목록에서 **Aurora 클러스터**를 선택합니다. 리소스를 사용하기 전에 해당 데이터 API를 생성하고 [활성화](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/data-api.html#data-api.enabling)해야 합니다.

   1. 다음으로 데이터베이스에 대한 보안 인증을 서비스에 추가해야 합니다. 이 작업은 주로를 사용하여 수행됩니다 AWS Secrets Manager. 암호가 존재하는 **리전**을 선택합니다. 암호 정보를 검색하는 방법에 대한 자세한 내용은 [보안 암호 찾기](https://docs.aws.amazon.com//secretsmanager/latest/userguide/manage_search-secret.html) 또는 [보안 암호 검색](https://docs.aws.amazon.com//secretsmanager/latest/userguide/retrieving-secrets.html)을 참조하십시오.

   1. 드롭다운 목록에서 암호를 추가합니다. 단, 사용자에게 데이터베이스에 대한 [읽기 권한](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-console)이 있어야 합니다.

1. **가져오기**를 선택합니다.

   AWS AppSync 는 데이터베이스 내부 검사, 테이블, 열, 기본 키 및 인덱스 검색을 시작합니다. 검색된 테이블이 GraphQL API에서 지원될 수 있는지 확인합니다. 새 행 생성을 지원하려면 테이블에 여러 열을 사용할 수 있는 기본 키가 필요합니다.는 테이블 열을 AWS AppSync 매핑하여 다음과 같이 필드를 입력합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/appsync/latest/devguide/rds-introspection.html)

1. 테이블 검색이 완료되면 **데이터베이스** 섹션에 사용자 정보가 채워집니다. 새 **데이터베이스 테이블** 섹션에서 테이블의 데이터가 이미 채워져 스키마의 유형으로 변환되었을 수 있습니다. 필수 데이터 중 일부가 보이지 않는 경우 **테이블 추가**를 선택하고 나타나는 모달에서 해당 유형의 확인란을 클릭한 다음 **추가**를 선택하여 해당 데이터를 확인할 수 있습니다.

   **데이터베이스 테이블** 섹션에서 유형을 제거하려면 제거하려는 유형 옆의 확인란을 클릭한 다음 **제거**를 선택합니다. 제거된 유형은 나중에 다시 추가하려는 경우 **테이블 추가** 모달에 배치됩니다.

   는 테이블 이름을 유형 이름으로 AWS AppSync 사용하지만 이름을 바꿀 수 있습니다. 예를 들어 *영화*와 같은 복수 테이블 이름을 영화 유형 이름으로 변경할 수 있습니다**. **데이터베이스 테이블** 섹션에서 유형의 이름을 바꾸려면 이름을 바꾸려는 유형의 확인란을 클릭한 다음 **유형 이름** 열에서 *연필* 아이콘을 클릭합니다.

   선택에 따라 스키마의 내용을 미리 보려면 **스키마 미리 보기**를 선택합니다. 이 스키마는 비워 둘 수 없으므로 한 개 이상의 테이블을 유형으로 변환해야 합니다. 또한 이 스키마의 크기는 1MB를 초과할 수 없습니다.

   1. **서비스 역할**에서 이 가져오기를 위한 새 서비스 역할을 만들지 아니면 기존 역할을 사용할지를 선택합니다.

1. **다음**을 선택합니다.

1. 그런 다음 읽기 전용 API(쿼리만 해당)를 만들지 아니면 데이터 읽기 및 쓰기를 위한 API(쿼리 및 변형 해당)를 만들지 선택합니다. 후자는 변형에 의해 트리거되는 실시간 구독도 지원합니다.

1. **다음**을 선택합니다.

1. 선택 사항을 검토한 다음 **API 생성**을 선택합니다. AWS AppSync 는 API를 생성하고 해석기를 쿼리와 변형에 연결합니다. 생성된 API는 완벽하게 작동하며 필요에 따라 확장할 수 있습니다.

## 내부 검사 기능 사용(API)
<a name="using-introspection-api"></a>

`StartDataSourceIntrospection` 내부 검사 API를 사용하여 데이터베이스에서 프로그래밍 방식으로 모델을 검색할 수 있습니다. 명령에 대한 자세한 내용은 [https://docs.aws.amazon.com//appsync/latest/APIReference/API_StartDataSourceIntrospection.html](https://docs.aws.amazon.com//appsync/latest/APIReference/API_StartDataSourceIntrospection.html) API 사용 섹션을 참조하십시오.

를 사용하려면 Aurora 클러스터 Amazon 리소스 이름(ARN), 데이터베이스 이름 및 AWS Secrets Manager 보안 암호 ARN을 `StartDataSourceIntrospection`제공합니다. 이 명령은 내부 검사 프로세스를 시작합니다. `GetDataSourceIntrospection` 명령을 사용하여 결과를 검색할 수 있습니다. 검색된 모델의 스토리지 정의 언어(SDL) 문자열을 명령으로 반환할지 여부를 지정할 수 있습니다. 이는 검색된 모델에서 직접 SDL 스키마 정의를 생성하는 데 유용합니다.

 예를 들어, 단순 `Todos` 테이블에 다음과 같은 데이터 정의 언어(DDL) 문이 있는 경우

```
create table if not exists public.todos  
(  
id serial constraint todos_pk primary key,  
description text,  
due timestamp,  
"createdAt" timestamp default now()  
);
```

내부 검사는 다음과 같이 시작합니다.

```
aws appsync start-data-source-introspection \ 
  --rds-data-api-config resourceArn=<cluster-arn>,secretArn=<secret-arn>,databaseName=database
```

그런 다음 `GetDataSourceIntrospection` 명령을 사용하여 결과를 검색합니다.

```
aws appsync get-data-source-introspection \
  --introspection-id a1234567-8910-abcd-efgh-identifier \
  --include-models-sdl
```

그 결과 다음 결과를 반환합니다.

```
{
    "introspectionId": "a1234567-8910-abcd-efgh-identifier",
    "introspectionStatus": "SUCCESS",
    "introspectionStatusDetail": null,
    "introspectionResult": {
        "models": [
            {
                "name": "todos",
                "fields": [
                    {
                        "name": "description",
                        "type": {
                            "kind": "Scalar",
                            "name": "String",
                            "type": null,
                            "values": null
                        },
                        "length": 0
                    },
                    {
                        "name": "due",
                        "type": {
                            "kind": "Scalar",
                            "name": "AWSDateTime",
                            "type": null,
                            "values": null
                        },
                        "length": 0
                    },
                    {
                        "name": "id",
                        "type": {
                            "kind": "NonNull",
                            "name": null,
                            "type": {
                                "kind": "Scalar",
                                "name": "Int",
                                "type": null,
                                "values": null
                            },
                            "values": null
                        },
                        "length": 0
                    },
                    {
                        "name": "createdAt",
                        "type": {
                            "kind": "Scalar",
                            "name": "AWSDateTime",
                            "type": null,
                            "values": null
                        },
                        "length": 0
                    }
                ],
                "primaryKey": {
                    "name": "PRIMARY_KEY",
                    "fields": [
                        "id"
                    ]
                },
                "indexes": [],
                "sdl": "type todos\n{\ndescription: String\n\ndue: AWSDateTime\n\nid: Int!\n\ncreatedAt: AW
SDateTime\n}\n"
            }
        ],
        "nextToken": null
    }
}
```