BLOG

AWS AppSync 에서 Complex Objects를 위한 Android GraphQL 구독과 지원
작성일: 2018-03-30

 

AWS App SyncAWS Amplify은 지난 몇 개월에 걸쳐서 여러 번 출시되었습니다. AWS App Sync를 사용하면 기존 Amazon DynamoDB테이블에 실시간 또는 오프라인 기능을 쉽게 적용할 수 있습니다. 또한 검색 및 탐색 기능을 포함한 모바일 및 웹 애플리케이션에 완전한 GraphQL 기능을 제공할 수도 있습니다. 이러한 기능을 사용하면 새로운 방식으로 애플리케이션에 데이터를 추가하여 비즈니스를 위한 혁신적인 기능을 구축할 수 있습니다. AWS Amplify기능을 사용하여 이러한 응용 프로그램에 등록 및 로그인 기능을 빠르게 추가하고 (소셜 미디어 공급자 로그인 포함)사용자를 강력한 분석 및 푸시 알림으로 참여시킬 수 있습니다.

 

지난 2월, AWS AppSync는 오프라인 지원 및 동기화 기능을 포함한 Android의 GrapQL에 대한 초기 지원을 제공했습니다. 현재 우리는 AWS App Sync Android SDK를 위한 GrapQL 구독과 복잡한 개체 지원을 제공하고 있습니다. 이러한 기능을 사용하면 Amazon Dynamo DB, Amazon  Elasticsearch Service및 AWS Lambda와 같은 데이터 소스에서 클라이언트 애플리케이션으로 데이터를 스트리밍 하는 실시간 애플리케이션을 구축할 수 있습니다. 복잡한 개체 지원 기능을 사용하면 Amazon S3개체 스토리지와 GraphQL을 함께 사용하여 여러 디바이스 간에, 또는 여러 사용자 간에 이미지, 비디오 및 기타 콘텐츠를 동기화할 수 있습니다.

 

또한, AWS Amplify를 사용하여 React JavaScript 애플리케이션의 복잡한 개체를 사용하는 방법을 보여 주는 포괄적인 샘플 애플리케이션을 출시할 예정입니다. 샘플 애플리케이션은 비공개 사진 저장 애플리케이션을 구축하는 방법을 보여 줍니다. 사용자가 로그인한 후 이 애플리케이션을 사용하여 비공개 S3 버킷에 사진을 저장하거나 가져올 수 있습니다. 여러 사용자가 애플리케이션에 로그인할 수 있지만, 이 애플리케이션은 사용자가 소유한 데이터만 볼 수 있도록 AWS App Sync의 세분화된 권한 부여 기능을 사용하여 액세스를 제한하는 방법을 보여 줍니다. 이 샘플에서는 GraphQL을 사용하는 Dynamo DB인덱스 쿼리와 로컬 resolver를 사용하여 데이터를 변환하는 기능과 같은 다른 기능들도 보여 줍니다.

 

Android subscriptions
GraphQL 구독은 모바일 및 웹 응용 프로그램을 향상시키는 강력한 방법입니다. 또한 일괄 처리되거나 페이지가 매겨진 기록을 통해 클라이언트로 전송할 데이터를 선택할 수 있으며 쿼리를 통해 웹 소켓 채널을 통하여 실시간으로 기록할 수도 있습니다. Android SDK에서는 개체를 조정할 필요 없이 자동으로 쿼리, 오프라인 변형 및 실시간 업데이트를 영구적인 저장소에 병합합니다.

 

이번 출시로, 안드로이드 클라이언트 애플리케이션 구축을 위한 AWS App Sync튜토리얼이 새로운 구독과 복잡한 개체 지원으로 업데이트되었습니다. 샘플 GraphQL 스키마는 리소스 생성 흐름을 사용하며, AWS AppSync는 GraphQL 입력 유형구독 지침을 포함한 스키마에서 Amazon DynamoDB 테이블을 자동으로 생성합니다.

 

Android (iOS와 유사)는 코드 생성을 사용하여 GraphQL 성명서를 철저히 입력된 개체로 변환합니다.Gradle을 통해 프로젝트에 SDK를 추가한 후에는 애플리케이션에서 사용할 쿼리, 변형 또는 구독이 있는*.graphql 파일을 포함하십시오. 예를 들어, 새 게시물에 대한 실시간 통지를 받으려면 다음과 같은 구독 내용을 사용해야 합니다.

 

subscription OnCreatePost {

  onCreatePost {

    id

    author

    title

    content

    url

  }

}

 

Android Studio프로젝트가 구축되면 이전에는*.graphql 파일에 정의한 친숙한 명명 법으로 생성된  OnCreatePostSubscription 유형에 액세스 할 수 있습니다. 예를 들어, 아래와 같이 애플리케이션에 대한 구독을 생성할 수 있습니다.

 

OnCreatePostSubscription subscription = OnCreatePostSubscription.builder().build();

subscriptionWatcher = ClientFactory.getInstance(this).subscribe(subscription);

subscriptionWatcher.execute(subCallback);

더 자세한 내용은 AWS AppSync Developer Guide를 참고하세요.

 

Complex Object 사용한 AWS Amplify

새로운 샘플 프로젝트에서는 React 애플리케이션에서 사용자 사진을 저장하고 검색하기 위한 GraphQL 애플리케이션을 구축하는 방법을 보여 줍니다. 다음과 같은 몇 가지 기능을 보여 주어 많은 요청이 있어서 이 기능을 출시했습니다.

 

* AWS Amplify를 통해 AWS AppSync와 함께 Amazon Cognito를 사용하여 인증
* GraphQL을 사용하여 DynamoDB 기록에 대한 사용자별 보안 권한 부여
* GraphQL 변형이나 쿼리로부터 DynamoDB포인터를 사용하여 AmazonS3에 이미지를 저장하기 위해 AWSAppSync의 복합 개체 사용

* 사용자가 장치에 로그인할 때 장치 간 동기화

 

클라이언트 애플리케이션은 AWSAppSync와 함께 AWS Amplify를 사용할 경우의 여러가지 유연성 수준을 보여 줄 수 있습니다. Amazon Cognito사용자 풀을 사용하기 위하여 GraphQL API를 구성할 수 있지만 AmazonS3에서는 Signature Version 4 서명에 AWS IAM자격 증명을 해야 합니다. Amplify를 사용하면 Auth (인증)모듈에서 다음과 같은 두 자격 증명에 모두 액세스 하여 AWS AppSync JavaScript 클라이언트 설계사에 전달할 수 있습니다.

 

[Js]

const client = new AWSAppSyncClient({

  url: AppSync.graphqlEndpoint,

  region: AppSync.region,

  auth: {

    type: AppSync.authenticationType,

    jwtToken: async () => (await Auth.currentSession()).getAccessToken().getJwtToken(),

  },

  complexObjectsCredentials: () => Auth.currentCredentials(),

});

 

그런 다음 클라이언트 어플리케이션은 필요에 따라 Graph.QL을 조회 및 변형할 수 있습니다. 스키마가 S3 Object유형으로 구성된 경우 Dynamo DB 기록과 S3 버켓 사이에 S3Link가 생성됩니다. 샘플은 로컬 resolver를 사용하기도 합니다. 모든 기록을 보여주는 다음의 listPictures 쿼리가 실행이 되면, 다음 목록 그림 쿼리를 사용했을 때 파일 필드가 AmazonS3의 App Sync유틸리티를 사용하여 적절한 GraphQL 응답으로 변환됩니다.

 

query {

  listPictures{

    items {

      id

      name

      visibility

      owner

      createdAt

      file {

        bucket

        region

        key

      }

    }

  }

}

 

React 애플리케이션이 이 쿼리를 사용하여 GraphQL 요청을 AWS AppSync에 전송하는 경우 JWT 토큰은 권한 부여 헤더에 있는 AWS Amplify에 의해서만 전달되어 서비스에 의해 유효성이 확인됩니다. 그런 다음 resolver 템플릿은 테이블이 레코드와 일치하는 것만 반환하는 각 레코드에 대해 특성의 사용자 이름을 비교하는 쿼리를 실행합니다.

 

{

  “version”: “2017-02-28”,

  “operation”: “Query”,

  “query”: {

    “expression”: “#owner = :owner”,

    “expressionNames”: {

      “#owner”: “owner”,

    },

    “expressionValues”: {

      “:owner”: {“S”: “${context.identity.claims.username}”},

    },

  },

  “index”: “owner-index”,

}

 

지금 시작하세요!

이러한 새로운 기능을 통해 구축할 수 있는 애플리케이션의 종류들을 알게 되어 매우 기쁘게 생각합니다. 샘플 어플리케이션에 대한 문제 추적기에 대한 피드백을 남겨 주세요. 또한 AWS AppSync개발자 가이드와 온라인으로 제공되는 일부 샘플 앱에서 시작하는 설명서를 참조하세요. 궁금한 사항이 있으면 AWSAppSync 포럼에서 문의하시면 됩니다!

 

원문 URL: https://aws.amazon.com/ko/blogs/mobile/android-graphql-subscriptions-and-support-for-complex-objects-in-aws-appsync/

** 메가존 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.