클라이언트 측 변이를 통해 수행되지 않은 외부 데이터베이스 업데이트를 AWS AppSync 구독자에게 알리려면 어떻게 해야 하나요?

5분 분량
0

클라이언트 측 변이를 통해 수행되지 않는 외부 데이터베이스 변경이 이루어지면 실시간으로 앱 클라이언트를 업데이트해야합니다. AWS AppSync를 사용하여 구독자에게 이러한 변경 사항을 알리려면 어떻게 해야 합니까?

간략한 설명

로컬 확인자를 사용하여 데이터 소스를 호출하지 않고 실시간으로 외부 데이터베이스 변경 사항을 구독자에게 알립니다. 예를 들어 로컬 확인자는 항공사 앱과 같이 정기적으로 정보를 업데이트하는 앱에 유용합니다.

Resolution(해결 방법) 섹션의 단계를 완료하여 예제 GraphQL API를 생성하세요. GraphQL API는 Amazon DynamoDB 테이블 데이터 소스에 데이터가 기록될 때 구독자를 실시간으로 업데이트합니다.

해결 방법

마법사를 사용하여 GraphQL API 생성

AWS AppSync 안내 스키마 마법사를 사용하여 새 GraphQL API를 생성합니다. 자세한 내용은 GraphQL API 설계를 참조하십시오.

1.    AWS AppSync 콘솔을 엽니다.

2.    [API 생성]을 선택합니다.

3.    [Getting Started(시작하기)] 페이지의 [Customize your API or import from Amazon DynamoDB(API 사용자 지정 또는 Amazon DynamoDB에서 가져오기)]에서 [Create with wizard(마법사로 생성)]를 선택한 다음 [Start(시작)]를 선택합니다.

4.    Create a model(모델 생성) 페이지에서 다음을 수행합니다.
Name the model(모델 이름 지정)에서 모델 이름을 입력합니다. 이 예에서는 Book이 이름입니다.
Configure model fields(모델 필드 구성)에서 앱의 데이터 형식을 정의합니다. 이 예제 설정의 경우 기본 필드 이름(idtitle)과 유형을 유지합니다.
(선택 사항) Configure model table (optional)(모델 테이블 구성(선택 사항))을 확장하여 인덱스를 추가합니다.
[생성(Create)</t1>]을 선택합니다.

5.    Create resources(리소스 생성) 페이지에서 API 이름을 입력합니다. 그런 다음 Create(생성)를 선택합니다. AWS AppSync는 API를 생성하고 API의 Queries(쿼리) 페이지를 엽니다.

**### 테스트 구독 생성

1.    AWS AppSync 콘솔을 엽니다.

2.    API의 Queries(쿼리) 페이지로 이동한 다음 복제 브라우저 탭 또는 창을 엽니다.

3.    복제 브라우저 탭 또는 창에서 쿼리 편집기의 내용을 지우고 다음 쿼리를 입력합니다.

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

위의 쿼리는 CreateBook 변형에 대한 subscription(구독)을 생성합니다.

4.    재생 버튼(Execute Query(쿼리 실행))을 선택합니다. 복제 브라우저 탭 또는 창이 createBook 변형을 구독합니다.

5.    원래 브라우저 탭 또는 창에서 재생 버튼(Execute Query(쿼리 실행))을 선택한 다음 createBook을 선택하여 변형을 실행합니다. 결과는 원본 및 복제(구독) 브라우저 탭 또는 창 모두에 표시됩니다.

6.    구독이 표시되면 복제 브라우저 탭 또는 창을 닫습니다.

None 유형 데이터 소스 생성

None 데이터 원본 유형은 요청 매핑 템플릿응답 매핑 템플릿으로 직접 전달합니다.

1.    원래 브라우저 탭 또는 창에서 AWS AppSync 콘솔을 엽니다.

2.    왼쪽 탐색 창에서 Data Sources(데이터 소스)를 선택합니다.

3.    Create Data Source(데이터 소스 생성)를 선택합니다.

4.    New Data Source(새 데이터 소스) 페이지의 Create new Data Source(새 데이터 소스 생성)에서 다음 단계를 완료합니다.
Data source name(데이터 소스 이름)에 이름을 입력합니다. 예를 들어 real_time_data입니다.
Data source type(데이터 소스 유형)에서 None(없음)을 선택합니다.

5.    Create(생성)을 선택합니다.

자세한 내용은 데이터 원본 연결을 참조하세요.

스키마에 변형 추가

관리자가 사용하거나 스키마를 업데이트할 때 시작할 두 번째 변형을 생성합니다.

데이터베이스 업데이트를 None(없음) 유형 데이터 소스로 전달하는 변형을 통해 스키마를 업데이트합니다.

1.    AWS AppSync 콘솔을 엽니다.

2.    좌측 탐색 창에서 [스키마]를 선택합니다.

3.    스키마 편집기의 Mutation { 유형에서 다음 명령을 추가하여 외부 업데이트를 위한 새 변형 유형을 생성합니다.

createBookExt(input: CreateBookInput!): Book

4.    스키마 편집기의 Subscription { 유형에서 다음 줄을 찾습니다.

onCreateBook(id: ID, title: String): Book
        @aws_subscribe(mutations: ["createBook"])

5.    변형 목록에 **"createBookExt"**를 추가합니다.

onCreateBook(id: ID, title: String): Book
        @aws_subscribe(mutations: ["createBook", "createBookExt"])

6.    Save Schema(스키마 저장)를 선택합니다.

자세한 내용은 Designing your schema(스키마 설계)를 참조하세요.

변형에 확인자 연결

1.    AWS AppSync 콘솔을 엽니다.

2.    API의 Schema(스키마) 페이지에 있는 Resolvers(확인자)에서 Mutation(변형)까지 스크롤합니다. 또는 Filter types(필터 유형)에서 Mutation(변형)을 입력합니다.

3.    createBookExt(...): Book 옆의 Resolver(확인자)에서 Attach(첨부)를 선택합니다.

4.    Create new Resolver(새 확인자 생성) 페이지의 Data source name(데이터 소스 이름)에서 생성한 None(없음) 유형 데이터 소스의 이름을 선택합니다. 예를 들어 real_time_data입니다.

5.    Configure the request mapping template(요청 매핑 템플릿 구성)에서 request(요청) 함수를 찾습니다.

export function request(ctx) {
    return {};
}

6.    ctx.args를 반환하도록 함수를 수정합니다.

export function request(ctx) {
    return ctx.args;
}

7.    Create(생성)을 선택합니다.

자세한 내용은 Configuring resolvers (VTL)(확인자 구성(VTL))을 참조하세요.

새 테스트 구독 생성

1.    AWS AppSync 콘솔을 엽니다.

2.    왼쪽 탐색 창에서 빌드를 선택합니다.

3.    API의 Queries(쿼리) 페이지에서 복제 브라우저 탭 또는 창을 엽니다.

4.    복제 브라우저 탭 또는 창에서 쿼리 편집기의 내용을 지우고 다음 쿼리를 입력합니다.

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

5.    재생 버튼(Execute Query(쿼리 실행))을 선택합니다. 복제 브라우저 탭 또는 창은 이제 createBookcreateBookExt 변형 모두에 구독됩니다.

새 테스트 변형 생성

1.    원래 브라우저 탭 또는 창에서 API의 Queries(쿼리) 페이지에서 쿼리 편집기의 콘텐츠를 지웁니다. 그리고 다음 쿼리를 입력하세요.

mutation createBook($createbookinput: CreateBookInput!) {
  createBook(input: $createbookinput) {
    id
    title
  }
}

편집기 하단의 Query Variables(쿼리 변수) 섹션에서 내용을 지우고 다음 쿼리를 입력합니다.

{
  "createbookinput": {
    "title": "My New Book"
  }
}

위 쿼리는 createBook 변형을 사용하여 새 Book을 만듭니다.

2.    재생 버튼(Execute Query(쿼리 실행))을 선택합니다.

3.    복제(구독) 브라우저 탭 또는 창에서 구독자가 업데이트를 실시간으로 수신하는지 확인합니다.

(선택 사항) 예제 사용 사례 참조

클라이언트 앱을 빌드하고 이러한 개념을 적용할 때 가격과 비행시간을 제공하는 항공사 앱을 빌드하는 다음 예제를 사용할 수 있습니다.

다음 단계는 DynamoDB 테이블에서 항공편 세부 정보가 변경될 때 구독한 클라이언트에게 알리는 방법을 보여줍니다.

1.    DynamoDB 스트림을 트리거로 사용하는 AWS Lambda 함수를 생성합니다. DynamoDB 테이블이 업데이트되면 Lambda 함수를 호출합니다. 자세한 내용은 Amazon DynamoDB에서 AWS Lambda 사용을 참조하세요.

2.    Lambda 함수 코드에 적절한 업데이트를 필터링하고 AWS AppSync에 대한 변형 호출을 수행하는 로직을 포함합니다. 그러면 AWS AppSync가 구독을 통해 구독자에게 알립니다. 자세한 내용은 자습서: AWS Lambda 확인자를 참조하세요.

3.    AWS AppSync에서 로컬 확인자를 사용하여 새 변형 필드(예: publishPrice라는 이름)를 추가합니다.

4.    구독 필드(예: onPriceUpdate라는 이름)에서 해당 변형을 구독합니다.

예제 스키마

type flightDetails {
  id: ID!
  src: String!
  destn: String!
  price : Int
}

type Mutation {
   # A local resolver targeting a None data source that publishes the message to subscribed clients.
  publishPrice(price: Int): flightDetails
}

type Subscription {
  # Notified whenever *publishPrice* is called.
  onPriceUpdate: Message
    @aws_subscribe(mutations: ["publishPrice"])
}

type Query { ... }

자세한 내용은 스키마 설계를 참조하세요.

5.    DynamoDB 스트림을 활성화로 사용하는 다른 AWS Lambda 함수를 생성합니다. 이 함수에서 publishPrice 변형을 호출합니다. publishPrice 변형에는 로컬 확인자가 있으므로 데이터가 DynamoDB에 다시 기록되지 않습니다. 이러한 방식으로 AWS AppSync를 PubSub 브로커로 사용할 수 있습니다.

자세한 내용과 다른 예제 사용 사례는 자습서: 로컬 확인자를 참조하세요.


관련 정보

확인자 자습서(VTL)

쿼리 및 변형 실행

확인자 매핑 템플릿 참조(VTL)**