쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

DynamoDB JavaScript 해석기를 사용하여 간단한 사후 애플리케이션 생성

포커스 모드
DynamoDB JavaScript 해석기를 사용하여 간단한 사후 애플리케이션 생성 - AWS AppSync GraphQL

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

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

이 자습서에서는 Amazon DynamoDB 테이블을 로 가져오 AWS AppSync 고 연결하여 자체 애플리케이션에서 활용할 수 있는 JavaScript 파이프라인 해석기를 사용하여 완전한 기능을 갖춘 GraphQL API를 빌드합니다.

AWS AppSync 콘솔을 사용하여 Amazon DynamoDB 리소스를 프로비저닝하고, 해석기를 생성하고, 데이터 소스에 연결합니다. 또한 GraphQL 명령문을 통해 Amazon DynamoDB 데이터베이스를 읽고 쓸 수 있으며 실시간 데이터를 구독할 수 있습니다.

GraphQL 명령문을 Amazon DynamoDB 작업으로 변환하고 응답을 다시 GraphQL로 변환하기 위해서는 특정 단계를 완료해야 합니다. 이 자습서에서는 여러 가지 실제 시나리오와 데이터 액세스 패턴을 통해 구성 프로세스를 설명합니다.

GraphQL API 생성

에서 GraphQL API를 생성하려면 AWS AppSync

  1. AppSync 콘솔을 열고 API 생성을 선택합니다.

  2. 처음부터 디자인을 선택하고 다음을 선택합니다.

  3. API PostTutorialAPI의 이름을 지정한 후 다음을 선택합니다. 나머지 옵션은 기본값으로 설정한 채 검토 페이지로 건너뛰고 Create를 선택합니다.

AWS AppSync 콘솔에서 새 GraphQL API를 생성합니다. 기본적으로 API 키 인증 모드를 사용합니다. 콘솔에서 GraphQL API의 나머지 부분을 설정하고 이 자습서의 나머지 부분에서 이 API에 대한 쿼리를 실행할 수 있습니다.

기본 Post API 정의

GraphQL API가 있으므로 게시 데이터의 기본적인 생성, 검색 및 삭제를 허용하는 기본 스키마를 설정할 수 있습니다.

스키마에 데이터를 추가하려면

  1. API에서 스키마 탭을 선택합니다.

  2. Post 객체를 추가하고 가져오기 위한 Post 유형과 작업 addPost를 정의하는 스키마를 만들 것입니다. 스키마 창에서 파일 콘텐츠를 다음 코드로 바꿉니다.

    schema { query: Query mutation: Mutation } type Query { getPost(id: ID): Post } type Mutation { addPost( id: ID! author: String! title: String! content: String! url: String! ): Post! } type Post { id: ID! author: String title: String content: String url: String ups: Int! downs: Int! version: Int! }
  3. 스키마 저장(Save Schema)을 선택합니다.

Amazon DynamoDB 테이블 설정

AWS AppSync 콘솔은 Amazon DynamoDB 테이블에 자체 AWS 리소스를 저장하는 데 필요한 리소스를 프로비저닝하는 데 도움이 될 수 있습니다. 이 단계에서는 Amazon DynamoDB 테이블을 생성하여 게시물을 저장합니다. 또한 나중에 사용할 보조 인덱스도 설정합니다.

Amazon DynamoDB 테이블을 생성하려면

  1. 스키마 페이지에서 리소스 생성을 선택합니다.

  2. 기존 유형 사용을 선택하고 Post 유형을 선택합니다.

  3. 보조 인덱스 섹션에서 인덱스 추가를 선택합니다.

  4. 인덱스 이름을 author-index로 지정합니다.

  5. Primary keyauthor로 설정하고 Sort 키를 None으로 설정합니다.

  6. GraphQL 자동 생성을 비활성화합니다. 이 예에서는 해석기를 직접 생성합니다.

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

이제 PostTable이라는 새 데이터 소스가 생겼습니다. 사이드 탭의 데이터 소스를 방문하면 이를 확인할 수 있습니다. 이 데이터 소스를 사용하여 쿼리와 뮤테이션을 Amazon DynamoDB 테이블에 연결합니다.

addPost 해석기 설정(Amazon DynamoDB PutItem)

이제 AWS AppSync 가 Amazon DynamoDB 테이블을 인식했으므로 해석기를 정의하여 개별 쿼리 및 변형에 연결할 수 있습니다. 생성한 첫 번째 해석기는 JavaScript를 사용하는 addPost 파이프라인 해석기로, 이 해석기를 사용하면 Amazon DynamoDB 테이블에 게시물을 작성할 수 있습니다. 파이프라인 해석기에는 다음 구성 요소가 있습니다.

  • 해석기를 연결할 GraphQL 스키마의 위치. 이 경우 createPost 형식의 Mutation 필드에서 해석기를 설정합니다. 이 해석기는 호출자가 뮤테이션 { addPost(...){...} }를 호출하면 간접적으로 호출됩니다.

  • 이 해석기에 사용할 데이터 원본. 이 경우 앞서 정의한 DynamoDB 데이터 소스를 사용하려고 합니다. 따라서 post-table-for-tutorial DynamoDB 테이블에 항목을 추가할 수 있습니다.

  • 요청 핸들러. 요청 핸들러는 호출자의 수신 요청을 처리하고 DynamoDB에 대해 AWS AppSync 가 수행할 지침으로 변환하는 함수입니다.

  • 응답 핸들러. 응답 핸들러의 작업은 DynamoDB의 응답을 처리하여 GraphQL에 필요한 것으로 변환하는 것입니다. 이러한 템플릿은 DynamoDB의 데이터 모양과 GraphQL의 Post 형식이 다른 경우 유용하지만 이 경우 모양이 서로 동일하기 때문에 데이터를 그냥 전달하면 됩니다.

해석기를 설정하려면

  1. API에서 스키마 탭을 선택합니다.

  2. 해석기 창에서 Mutation 유형 아래의 addPost 필드를 찾은 다음 연결을 선택합니다.

  3. 데이터 소스를 선택한 다음 생성을 선택합니다.

  4. 코드 편집기에서 코드를 다음 코드 조각으로 바꿉니다.

    import { util } from '@aws-appsync/utils' import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { const item = { ...ctx.arguments, ups: 1, downs: 0, version: 1 } const key = { id: ctx.args.id ?? util.autoId() } return ddb.put({ key, item }) } export function response(ctx) { return ctx.result }
  5. 저장(Save)을 선택합니다.

참고

이 코드에서는 DynamoDB 요청을 쉽게 생성할 수 있는 DynamoDB 모듈 유틸리티를 사용합니다.

AWS AppSync 는 새 게시물의 ID를 생성하는 데 util.autoId()사용되는 라는 자동 ID 생성을 위한 유틸리티와 함께 제공됩니다. ID를 지정하지 않으면 유틸리티에서 ID를 자동으로 생성합니다.

const key = { id: ctx.args.id ?? util.autoId() }

JavaScript에 사용할 수 있는 유틸리티에 대한 자세한 내용은 해석기 및 함수를 위한 JavaScript 런타임 기능을 참조하세요.

게시물 추가를 위한 API 직접 호출

해석기가 구성되었으므로는 들어오는 addPost 변형을 Amazon DynamoDB PutItem 작업으로 변환할 AWS AppSync 수 있습니다. 이제 변형을 실행해 테이블에 데이터를 입력할 수 있습니다.

작업을 실행하려면

  1. API에서 쿼리 탭을 선택합니다.

  2. 쿼리 창에 다음 뮤테이션을 추가합니다.

    mutation addPost { addPost( id: 123, author: "AUTHORNAME" title: "Our first post!" content: "This is our first post." url: "https://aws.amazon.com/appsync/" ) { id author title content url ups downs version } }
  3. 실행(주황색 재생 버튼)을 선택한 다음 addPost를 선택합니다. 새로 생성한 게시물의 결과가 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "addPost": { "id": "123", "author": "AUTHORNAME", "title": "Our first post!", "content": "This is our first post.", "url": "https://aws.amazon.com/appsync/", "ups": 1, "downs": 0, "version": 1 } } }

다음 설명은 어떤 일이 발생했는지 보여줍니다.

  1. AWS AppSync 가 addPost 변형 요청을 받았습니다.

  2. AWS AppSync 는 해석기의 요청 핸들러를 실행합니다. ddb.put 함수는 다음과 같은 PutItem 요청을 생성합니다.

    { operation: 'PutItem', key: { id: { S: '123' } }, attributeValues: { downs: { N: 0 }, author: { S: 'AUTHORNAME' }, ups: { N: 1 }, title: { S: 'Our first post!' }, version: { N: 1 }, content: { S: 'This is our first post.' }, url: { S: 'https://aws.amazon.com/appsync/' } } }
  3. AWS AppSync 는이 값을 사용하여 Amazon DynamoDB PutItem 요청을 생성하고 실행합니다.

  4. AWS AppSync 는 PutItem 요청 결과를 가져와 GraphQL 유형으로 다시 변환했습니다.

    { "id" : "123", "author": "AUTHORNAME", "title": "Our first post!", "content": "This is our first post.", "url": "https://aws.amazon.com/appsync/", "ups" : 1, "downs" : 0, "version" : 1 }
  5. 응답 핸들러는 결과를 즉시 반환합니다(return ctx.result).

  6. 최종 결과는 GraphQL 응답에서 확인할 수 있습니다.

getPost 해석기 설정(Amazon DynamoDB GetItem)

이제 Amazon DynamoDB 테이블에 데이터를 추가할 수 있으므로 DynamoDB 테이블에서 데이터를 검색할 수 있도록 쿼리를 설정해야 합니다. 이렇게 하기 위해 다른 해석기를 설정합니다.

해석기를 추가하려면

  1. API에서 스키마 탭을 선택합니다.

  2. 오른쪽의 해석기 창에서 Query 유형 아래의 getPost 필드를 찾은 다음 연결을 선택합니다.

  3. 데이터 소스를 선택한 다음 생성을 선택합니다.

  4. 코드 편집기에서 코드를 다음 코드 조각으로 바꿉니다.

    import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { return ddb.get({ key: { id: ctx.args.id } }) } export const response = (ctx) => ctx.result
  5. 해석기를 저장합니다.

참고

이 해석기에서는 응답 핸들러에 화살표 함수 표현식을 사용합니다.

게시물 가져오기를 위한 API 직접 호출

이제 해석기가 설정되었으므로 수신 getPost 쿼리를 Amazon DynamoDB GetItem 작업으로 변환하는 방법을 AWS AppSync 알고 있습니다. 이제 앞에서 생성한 게시물을 검색하는 쿼리를 실행할 수 있습니다.

쿼리를 실행하려면

  1. API에서 쿼리 탭을 선택합니다.

  2. 쿼리 창에서 다음 코드를 추가하고 게시물을 만든 후 복사한 ID를 사용합니다.

    query getPost { getPost(id: "123") { id author title content url ups downs version } }
  3. 실행(주황색 재생 버튼)을 선택한 다음 getPost를 선택합니다. 새로 생성한 게시물의 결과가 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다.

  4. Amazon DynamoDB에서 가져온 게시물이 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "getPost": { "id": "123", "author": "AUTHORNAME", "title": "Our first post!", "content": "This is our first post.", "url": "https://aws.amazon.com/appsync/", "ups": 1, "downs": 0, "version": 1 } } }

또는 다음 예를 사용합니다.

query getPost { getPost(id: "123") { id author title } }

getPost 쿼리에 id, author, title만 필요한 경우, 요청 함수를 변경하여 프로젝션 표현식을 사용하여 DynamoDB 테이블에서 원하는 속성만 지정하면 DynamoDB에서 AWS AppSync로 불필요한 데이터 전송을 방지할 수 있습니다. 예를 들어 요청 함수는 아래 코드 조각과 비슷할 수 있습니다.

import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { return ddb.get({ key: { id: ctx.args.id }, projection: ['author', 'id', 'title'], }) } export const response = (ctx) => ctx.result

getPost와 함께 selectionSetList를 사용하여 expression을 나타낼 수도 있습니다.

import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { const projection = ctx.info.selectionSetList.map((field) => field.replace('/', '.')) return ddb.get({ key: { id: ctx.args.id }, projection }) } export const response = (ctx) => ctx.result

updatePost 뮤테이션 생성(Amazon DynamoDB UpdateItem)

이제 Amazon DynamoDB에서 Post 객체를 생성하고 검색할 수 있습니다. 다음으로, 객체 업데이트를 위한 새 변형을 설정합니다. 모든 필드를 지정해야 하는 addPost 뮤테이션에 비해 이 뮤테이션을 사용하면 변경하려는 필드만 지정할 수 있습니다. 또한 수정하려는 버전을 지정할 수 있는 새 expectedVersion 인수도 도입되었습니다. 객체의 최신 버전을 수정하고 있는지 확인하는 조건을 설정해야 합니다. 이 작업은 UpdateItem Amazon DynamoDB operation.sc를 사용하여 수행합니다.

해석기를 업데이트하려면

  1. API에서 스키마 탭을 선택합니다.

  2. 스키마 창에서 다음과 같이 Mutation 형식을 수정하여 새로운 updatePost 변형을 추가할 수 있습니다.

    type Mutation { updatePost( id: ID!, author: String, title: String, content: String, url: String, expectedVersion: Int! ): Post addPost( id: ID author: String! title: String! content: String! url: String! ): Post! }
  3. 스키마 저장(Save Schema)을 선택합니다.

  4. 오른쪽의 해석기 창에서 Mutation 유형에 새로 생성된 updatePost 필드를 찾은 다음 연결을 선택합니다. 아래 코드 조각을 사용하여 새 해석기를 만듭니다.

    import { util } from '@aws-appsync/utils'; import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const { id, expectedVersion, ...rest } = ctx.args; const values = Object.entries(rest).reduce((obj, [key, value]) => { obj[key] = value ?? ddb.operations.remove(); return obj; }, {}); return ddb.update({ key: { id }, condition: { version: { eq: expectedVersion } }, update: { ...values, version: ddb.operations.increment(1) }, }); } export function response(ctx) { const { error, result } = ctx; if (error) { util.appendError(error.message, error.type); } return result;
  5. 변경한 내용을 모두 저장합니다.

이 해석기는 ddb.update를 사용하여 Amazon DynamoDB UpdateItem 요청을 생성합니다. 전체 항목을 쓰는 대신 특정 속성을 업데이트하도록 Amazon DynamoDB에 요청합니다. Amazon DynamoDB 업데이트 표현식을 사용하여 요청합니다.

ddb.update 함수는 키와 업데이트 객체를 인수로 사용합니다. 그런 다음 들어오는 인수의 값을 확인합니다. 값이 null로 설정되면 DynamoDB remove 작업을 사용하여 DynamoDB 항목에서 값을 제거해야 한다는 신호를 보냅니다.

또한 새로운 condition 섹션이 있습니다. 조건 표현식을 사용하면 작업이 수행되기 전에 Amazon DynamoDB에 이미 있는 객체의 상태를 기반으로 요청이 성공해야 하는지 여부를 AWS AppSync 및 Amazon DynamoDB에 알 수 있습니다. 이 경우에는 Amazon DynamoDB에 현재 있는 항목의 version 필드가 expectedVersion 인수와 정확하게 일치하는 경우에만 UpdateItem 요청에 성공하면 됩니다. 항목이 업데이트되면 version의 값을 증가시키겠습니다. 작업 기능 increment를 사용하면 이 작업을 쉽게 수행할 수 있습니다.

조건 표현식에 대한 자세한 내용은 조건 표현식 설명서를 참조하세요.

UpdateItem 요청에 대한 자세한 내용은 UpdateItem 설명서 및 DynamoDB 모듈 설명서를 참조하세요.

업데이트 표현식을 작성하는 방법에 대한 자세한 내용은 DynamoDB UpdateExpressions 문서를 참조하십시오.

게시물 업데이트를 위한 API 직접 호출

새 해석기를 사용해 Post 객체를 업데이트해 보겠습니다.

객체를 업데이트하려면

  1. API에서 쿼리 탭을 선택합니다.

  2. 쿼리 창에 다음 뮤테이션을 추가합니다. 또한 앞서 적어둔 값을 갖도록 id 인수를 업데이트해야 합니다.

    mutation updatePost { updatePost( id:123 title: "An empty story" content: null expectedVersion: 1 ) { id author title content url ups downs version } }
  3. 실행(주황색 재생 버튼)을 선택한 다음 updatePost를 선택합니다.

  4. Amazon DynamoDB에서 업데이트된 게시물이 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "updatePost": { "id": "123", "author": "A new author", "title": "An empty story", "content": null, "url": "https://aws.amazon.com/appsync/", "ups": 1, "downs": 0, "version": 2 } } }

이 요청에서는 AWS AppSync 및 Amazon DynamoDB에 titlecontent 필드만 업데이트하도록 요청했습니다. version 필드를 증분하는 것을 제외하고 다른 모든 필드는 그대로 둡니다. title 속성을 새 값으로 설정하고 게시물에서 content 속성을 제거했습니다. author, url, upsdowns 필드는 그대로 남아 있습니다. 뮤테이션 요청을 다시 실행해도 요청은 정확하게 그대로 유지됩니다. 다음과 유사한 응답이 나타납니다.

{ "data": { "updatePost": null }, "errors": [ { "path": [ "updatePost" ], "data": null, "errorType": "DynamoDB:ConditionalCheckFailedException", "errorInfo": null, "locations": [ { "line": 2, "column": 3, "sourceName": null } ], "message": "The conditional request failed (Service: DynamoDb, Status Code: 400, Request ID: 1RR3QN5F35CS8IV5VR4OQO9NNBVV4KQNSO5AEMVJF66Q9ASUAAJG)" } ] }

조건 표현식이 false로 평가되었으므로 요청에 실패합니다.

  1. 요청을 처음 실행했을 때 Amazon DynamoDB에 있는 게시물의 version 필드 값은 1이었고, 이는 expectedVersion 인수와 일치했습니다. 요청에 성공하자 Amazon DynamoDB의 version 필드가 2로 증가했습니다.

  2. 요청을 두 번째로 실행했을 때 Amazon DynamoDB에 있는 게시물의 version 필드 값은 2이었고, 이는 expectedVersion 인수와 일치하지 않았습니다.

이러한 패턴을 일반적으로 낙관적 잠금이라고 합니다.

투표 뮤테이션 생성(Amazon DynamoDB UpdateItem)

Post 유형에는 추천과 비추천을 기록할 수 있는 upsdowns 필드가 포함되어 있습니다. 하지만 현재로서는 API를 통해 아무것도 할 수 없습니다. 게시물을 추천 및 비추천하도록 하는 뮤테이션을 추가해 보겠습니다.

뮤테이션을 추가하려면

  1. API에서 스키마 탭을 선택합니다.

  2. 스키마 창에서 Mutation 유형을 수정하고 DIRECTION 열거형을 추가하여 새 투표 뮤테이션을 추가합니다.

    type Mutation { vote(id: ID!, direction: DIRECTION!): Post updatePost( id: ID!, author: String, title: String, content: String, url: String, expectedVersion: Int! ): Post addPost( id: ID, author: String!, title: String!, content: String!, url: String! ): Post! } enum DIRECTION { UP DOWN }
  3. 스키마 저장(Save Schema)을 선택합니다.

  4. 오른쪽의 해석기 창에서 Mutation 유형에 새로 생성된 vote 필드를 찾은 다음 연결을 선택합니다. 코드를 생성하고 다음 코드 조각으로 대체하여 새 해석기를 만듭니다.

    import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const field = ctx.args.direction === 'UP' ? 'ups' : 'downs'; return ddb.update({ key: { id: ctx.args.id }, update: { [field]: ddb.operations.increment(1), version: ddb.operations.increment(1), }, }); } export const response = (ctx) => ctx.result;
  5. 변경한 내용을 모두 저장합니다.

게시물을 추천 또는 비추천하는 API 직접 호출

이제 새 해석기가 설정되었으므로 수신 upvotePost 또는 downvote 변형을 Amazon DynamoDB UpdateItem 작업으로 변환하는 방법을 AWS AppSync 배웁니다. 이제 앞서 생성한 게시물을 추천 또는 비추천하는 변형을 실행할 수 있습니다.

뮤테이션을 추가하려면

  1. API에서 쿼리 탭을 선택합니다.

  2. 쿼리 창에 다음 뮤테이션을 추가합니다. 또한 앞서 적어둔 값을 갖도록 id 인수를 업데이트해야 합니다.

    mutation votePost { vote(id:123, direction: UP) { id author title content url ups downs version } }
  3. 실행(주황색 재생 버튼)을 선택한 다음 votePost를 선택합니다.

  4. Amazon DynamoDB에서 업데이트된 게시물이 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "vote": { "id": "123", "author": "A new author", "title": "An empty story", "content": null, "url": "https://aws.amazon.com/appsync/", "ups": 6, "downs": 0, "version": 4 } } }
  5. 실행을 몇 번 더 선택합니다. 쿼리를 실행할 때마다 upsversion 필드가 1씩 증가하는 것이 보여야 합니다.

  6. 쿼리를 변경하여 다른 DIRECTION으로 호출합니다.

    mutation votePost { vote(id:123, direction: DOWN) { id author title content url ups downs version } }
  7. 실행(주황색 재생 버튼)을 선택한 다음 votePost를 선택합니다.

    이번에는 쿼리를 실행할 때마다 downsversion 필드가 1씩 증가하는 것이 보여야 합니다.

deletePost 해석기 설정(Amazon DynamoDB DeleteItem)

다음으로 게시물을 삭제하기 위한 뮤테이션을 생성해야 합니다. 이 작업은 DeleteItem Amazon DynamoDB 작업을 사용하여 수행합니다.

뮤테이션을 추가하려면

  1. 스키마에서 스키마 탭을 선택합니다.

  2. 스키마 창에서 다음과 같이 Mutation 유형을 수정하여 새로운 deletePost 뮤테이션을 추가합니다.

    type Mutation { deletePost(id: ID!, expectedVersion: Int): Post vote(id: ID!, direction: DIRECTION!): Post updatePost( id: ID!, author: String, title: String, content: String, url: String, expectedVersion: Int! ): Post addPost( id: ID author: String!, title: String!, content: String!, url: String! ): Post! }
  3. 이번에는 expectedVersion 필드를 선택 사항으로 설정했습니다. 다음으로 스키마 저장을 선택합니다.

  4. 오른쪽의 해석기 창에서 Mutation 유형에 새로 생성된 delete 필드를 찾은 다음 연결을 선택합니다. 다음 코드를 사용하여 새 해석기를 생성합니다.

    import { util } from '@aws-appsync/utils' import { util } from '@aws-appsync/utils'; import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { let condition = null; if (ctx.args.expectedVersion) { condition = { or: [ { id: { attributeExists: false } }, { version: { eq: ctx.args.expectedVersion } }, ], }; } return ddb.remove({ key: { id: ctx.args.id }, condition }); } export function response(ctx) { const { error, result } = ctx; if (error) { util.appendError(error.message, error.type); } return result; }
    참고

    참고: expectedVersion 인수는 선택적 인수입니다. 호출자가 요청에서 expectedVersion 인수를 설정하면, 요청 핸들러에서는 항목이 이미 삭제된 경우 또는 Amazon DynamoDB에 있는 version 속성이 expectedVersion과 정확하게 일치하는 경우, DeleteItem 요청이 완료되게 하는 조건을 추가합니다. 그냥 두면 DeleteItem 요청에 아무런 조건 표현식도 지정되지 않습니다. 이는 version의 값이나 해당 항목이 Amazon DynamoDB에 존재하는지 여부에 관계없이 완료됩니다.

    항목을 삭제하고 있더라도 항목이 아직 삭제되지 않은 경우 삭제된 항목을 반환할 수 있습니다.

DeleteItem 요청에 대한 자세한 내용은 DeleteItem 설명서를 참조하세요.

게시물 삭제를 위한 API 직접 호출

해석기가 설정되었으므로 수신 delete 변형을 Amazon DynamoDB DeleteItem 작업으로 변환하는 방법을 AWS AppSync 알고 있습니다. 이제 변형을 실행해 테이블에 데이터를 삭제할 수 있습니다.

뮤테이션을 추가하려면

  1. API에서 쿼리 탭을 선택합니다.

  2. 쿼리 창에 다음 뮤테이션을 추가합니다. 또한 앞서 적어둔 값을 갖도록 id 인수를 업데이트해야 합니다.

    mutation deletePost { deletePost(id:123) { id author title content url ups downs version } }
  3. 실행(주황색 재생 버튼)을 선택한 다음 deletePost를 선택합니다.

  4. Amazon DynamoDB에서 해당 게시물이 삭제됩니다. 는 Amazon DynamoDB에서 삭제된 항목의 값을 AWS AppSync 반환합니다.이 값은 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "deletePost": { "id": "123", "author": "A new author", "title": "An empty story", "content": null, "url": "https://aws.amazon.com/appsync/", "ups": 6, "downs": 4, "version": 12 } } }
  5. deletePost에 대한 호출이 Amazon DynamoDB에서 실제로 삭제된 항목인 경우에만 값이 반환됩니다. 실행을 다시 선택합니다.

  6. 호출에는 계속 성공하지만 반환되는 값은 없습니다.

    { "data": { "deletePost": null } }
  7. 이제 게시물을 삭제해 보는데, 이번에는 expectedValue를 지정해 보겠습니다. 지금까지 작업한 게시물 하나를 방금 삭제했기 때문에 먼저 새 게시물을 생성해야 합니다.

  8. 쿼리 창에 다음 뮤테이션을 추가합니다.

    mutation addPost { addPost( id:123 author: "AUTHORNAME" title: "Our second post!" content: "A new post." url: "https://aws.amazon.com/appsync/" ) { id author title content url ups downs version } }
  9. 실행(주황색 재생 버튼)을 선택한 다음 addPost를 선택합니다.

  10. 새로 생성한 게시물의 결과가 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 곧 필요할 것이기 때문에 새로 생성한 객체의 id를 기록해 둡니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "addPost": { "id": "123", "author": "AUTHORNAME", "title": "Our second post!", "content": "A new post.", "url": "https://aws.amazon.com/appsync/", "ups": 1, "downs": 0, "version": 1 } } }
  11. 이제 expectedVersion의 값이 잘못된 게시물을 삭제해 보겠습니다. 쿼리 창에 다음 뮤테이션을 추가합니다. 또한 앞서 적어둔 값을 갖도록 id 인수를 업데이트해야 합니다.

    mutation deletePost { deletePost( id:123 expectedVersion: 9999 ) { id author title content url ups downs version } }
  12. 실행(주황색 재생 버튼)을 선택한 다음 deletePost를 선택합니다. 다음 결과가 반환됩니다.

    { "data": { "deletePost": null }, "errors": [ { "path": [ "deletePost" ], "data": null, "errorType": "DynamoDB:ConditionalCheckFailedException", "errorInfo": null, "locations": [ { "line": 2, "column": 3, "sourceName": null } ], "message": "The conditional request failed (Service: DynamoDb, Status Code: 400, Request ID: 7083O037M1FTFRK038A4CI9H43VV4KQNSO5AEMVJF66Q9ASUAAJG)" } ] }
  13. 조건 표현식이 false로 평가되었으므로 요청에 실패합니다. Amazon DynamoDB에 있는 게시물의 version 값이 인수에 지정된 expectedValue와 일치하지 않습니다. 객체의 현재 값은 GraphQL 응답에서 data 섹션의 errors 필드에 반환됩니다. 이 요청을 다시 실행하되 expectedVersion을 수정합니다.

    mutation deletePost { deletePost( id:123 expectedVersion: 1 ) { id author title content url ups downs version } }
  14. 실행(주황색 재생 버튼)을 선택한 다음 deletePost를 선택합니다.

    이번에는 요청에 성공하고 Amazon DynamoDB에서 삭제된 값이 반환됩니다.

    { "data": { "deletePost": { "id": "123", "author": "AUTHORNAME", "title": "Our second post!", "content": "A new post.", "url": "https://aws.amazon.com/appsync/", "ups": 1, "downs": 0, "version": 1 } } }
  15. 실행을 다시 선택합니다. 호출에 계속해서 성공하지만 이번에는 게시물이 이미 Amazon DynamoDB에서 삭제되었으므로 반환되는 값이 없습니다.

    { "data": { "deletePost": null } }

allPost 해석기 설정(Amazon DynamoDB 스캔)

지금까지 API는 살펴보고자 하는 각 게시물의 id를 아는 경우에만 유용했습니다. 테이블의 게시물을 모두 반환하는 새 해석기를 추가해 보겠습니다.

뮤테이션을 추가하려면

  1. API에서 스키마 탭을 선택합니다.

  2. 스키마 창에서 다음과 같이 Query 형식을 수정하여 새로운 allPost 쿼리를 추가할 수 있습니다.

    type Query { allPost(limit: Int, nextToken: String): PaginatedPosts! getPost(id: ID): Post }
  3. 새로운 PaginationPosts 형식을 다음과 같이 추가합니다.

    type PaginatedPosts { posts: [Post!]! nextToken: String }
  4. 스키마 저장(Save Schema)을 선택합니다.

  5. 오른쪽의 해석기 창에서 Query 유형에 새로 생성된 allPost 필드를 찾은 다음 연결을 선택합니다. 다음 코드를 사용하여 새 해석기를 생성합니다.

    import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const { limit = 20, nextToken } = ctx.arguments; return ddb.scan({ limit, nextToken }); } export function response(ctx) { const { items: posts = [], nextToken } = ctx.result; return { posts, nextToken }; }

    이 해석기의 요청 핸들러에는 두 개의 선택적 인수가 필요합니다.

    • limit - 단일 호출에서 반환할 최대 항목 수를 지정합니다.

    • nextToken - 다음 결과 세트를 검색하는 데 사용됩니다(nextToken 값의 출처는 나중에 설명).

  6. 해석기의 모든 변경 사항을 저장합니다.

Scan 요청에 대한 자세한 내용은 스캔 참조 문서를 참조하세요.

모든 게시물을 스캔하는 API 직접 호출

해석기가 설정되었으므로 수신 allPost 쿼리를 Amazon DynamoDB Scan 작업으로 변환하는 방법을 AWS AppSync 알고 있습니다. 이제 테이블을 스캔해 게시물을 모두 검색할 수 있습니다. 지금까지 작업했던 데이터를 모두 삭제했기 때문에 이 요청을 수행하기 전에 몇 가지 데이터로 테이블을 채워야 합니다.

데이터를 추가 및 쿼리하려면

  1. API에서 쿼리 탭을 선택합니다.

  2. 쿼리 창에 다음 뮤테이션을 추가합니다.

    mutation addPost { post1: addPost(id:1 author: "AUTHORNAME" title: "A series of posts, Volume 1" content: "Some content" url: "https://aws.amazon.com/appsync/" ) { title } post2: addPost(id:2 author: "AUTHORNAME" title: "A series of posts, Volume 2" content: "Some content" url: "https://aws.amazon.com/appsync/" ) { title } post3: addPost(id:3 author: "AUTHORNAME" title: "A series of posts, Volume 3" content: "Some content" url: "https://aws.amazon.com/appsync/" ) { title } post4: addPost(id:4 author: "AUTHORNAME" title: "A series of posts, Volume 4" content: "Some content" url: "https://aws.amazon.com/appsync/" ) { title } post5: addPost(id:5 author: "AUTHORNAME" title: "A series of posts, Volume 5" content: "Some content" url: "https://aws.amazon.com/appsync/" ) { title } post6: addPost(id:6 author: "AUTHORNAME" title: "A series of posts, Volume 6" content: "Some content" url: "https://aws.amazon.com/appsync/" ) { title } post7: addPost(id:7 author: "AUTHORNAME" title: "A series of posts, Volume 7" content: "Some content" url: "https://aws.amazon.com/appsync/" ) { title } post8: addPost(id:8 author: "AUTHORNAME" title: "A series of posts, Volume 8" content: "Some content" url: "https://aws.amazon.com/appsync/" ) { title } post9: addPost(id:9 author: "AUTHORNAME" title: "A series of posts, Volume 9" content: "Some content" url: "https://aws.amazon.com/appsync/" ) { title } }
  3. 실행(주황색 재생 버튼)을 선택합니다.

  4. 이제 테이블을 스캔해 보겠습니다. 한 번에 5개 결과를 반환합니다. 쿼리 창에 다음 쿼리를 추가합니다.

    query allPost { allPost(limit: 5) { posts { id title } nextToken } }
  5. 실행(주황색 재생 버튼)을 선택한 다음 allPost를 선택합니다.

    처음 5개 게시물이 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "allPost": { "posts": [ { "id": "5", "title": "A series of posts, Volume 5" }, { "id": "1", "title": "A series of posts, Volume 1" }, { "id": "6", "title": "A series of posts, Volume 6" }, { "id": "9", "title": "A series of posts, Volume 9" }, { "id": "7", "title": "A series of posts, Volume 7" } ], "nextToken": "<token>" } } }
  6. 5개 결과가 반환되고 다음 결과 집합을 가져오는데 사용할 수 있는 nextToken도 있습니다. 이전 결과 집합에서 allPost을 포함하도록 nextToken 쿼리를 업데이트합니다.

    query allPost { allPost( limit: 5 nextToken: "<token>" ) { posts { id author } nextToken } }
  7. 실행(주황색 재생 버튼)을 선택한 다음 allPost를 선택합니다.

    나머지 4개 게시물이 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 게시물이 모두 9개이며 남은 게시물이 없기 때문에 이 결과 집합에는 nextToken이 없습니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "allPost": { "posts": [ { "id": "2", "title": "A series of posts, Volume 2" }, { "id": "3", "title": "A series of posts, Volume 3" }, { "id": "4", "title": "A series of posts, Volume 4" }, { "id": "8", "title": "A series of posts, Volume 8" } ], "nextToken": null } } }

allPostsByAuthor 해석기 설정(Amazon DynamoDB 쿼리)

Amazon DynamoDB에서 모든 게시물을 스캔하는 것 이외에 Amazon DynamoDB를 쿼리해 특정 작성자가 생성한 게시물을 검색할 수 있습니다. 앞서 이미 생성한 Amazon DynamoDB 테이블에는 특정 작성자가 생성한 게시물을 모두 검색하는 Query 작업에 사용할 수 있는 author-index라는 GlobalSecondaryIndex가 있습니다.

쿼리를 추가하려면

  1. API에서 스키마 탭을 선택합니다.

  2. 스키마 창에서 다음과 같이 Query 형식을 수정하여 새로운 allPostsByAuthor 쿼리를 추가할 수 있습니다.

    type Query { allPostsByAuthor(author: String!, limit: Int, nextToken: String): PaginatedPosts! allPost(limit: Int, nextToken: String): PaginatedPosts! getPost(id: ID): Post }

    참고: 여기서는 allPost 쿼리에 사용한 것과 동일한 PaginatedPosts 유형을 사용합니다.

  3. 스키마 저장(Save Schema)을 선택합니다.

  4. 오른쪽의 해석기 창에서 Query 유형에 새로 생성된 allPostsByAuthor 필드를 찾은 다음 연결을 선택합니다. 아래 코드 조각을 사용하여 해석기를 만듭니다.

    import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const { limit = 20, nextToken, author } = ctx.arguments; return ddb.query({ index: 'author-index', query: { author: { eq: author } }, limit, nextToken, }); } export function response(ctx) { const { items: posts = [], nextToken } = ctx.result; return { posts, nextToken }; }

    allPost 해석기와 마찬가지로 이 해석기에는 두 개의 선택적 인수가 있습니다.

    • limit - 단일 호출에서 반환할 최대 항목 수를 지정합니다.

    • nextToken - 다음 결과 세트를 검색합니다(nextToken의 값은 이전 호출에서 가져올 수 있음).

  5. 해석기의 모든 변경 사항을 저장합니다.

Query 요청에 대한 자세한 내용은 쿼리 참조 문서를 참조하세요.

작성자별 모든 게시물을 쿼리하는 API 직접 호출

해석기가 설정되었으므로는 author-index 인덱스에 대해 수신 allPostsByAuthor 변형을 DynamoDB Query 작업으로 변환하는 방법을 AWS AppSync 알고 있습니다. 이제 테이블을 쿼리해 특정 작성자별로 게시물을 모두 검색할 수 있습니다.

하지만 그 전에, 지금까지 모든 게시물의 작성자가 동일하므로 테이블을 몇 개의 게시물로 더 채워 보겠습니다.

데이터를 추가하고 쿼리하려면

  1. API에서 쿼리 탭을 선택합니다.

  2. 쿼리 창에 다음 뮤테이션을 추가합니다.

    mutation addPost { post1: addPost(id:10 author: "Nadia" title: "The cutest dog in the world" content: "So cute. So very, very cute." url: "https://aws.amazon.com/appsync/" ) { author, title } post2: addPost(id:11 author: "Nadia" title: "Did you know...?" content: "AppSync works offline?" url: "https://aws.amazon.com/appsync/" ) { author, title } post3: addPost(id:12 author: "Steve" title: "I like GraphQL" content: "It's great" url: "https://aws.amazon.com/appsync/" ) { author, title } }
  3. 실행(주황색 재생 버튼)을 선택한 다음 addPost를 선택합니다.

  4. 이제 Nadia가 작성한 게시물을 모두 반환하도록 테이블을 쿼리하겠습니다. 쿼리 창에 다음 쿼리를 추가합니다.

    query allPostsByAuthor { allPostsByAuthor(author: "Nadia") { posts { id title } nextToken } }
  5. 실행(주황색 재생 버튼)을 선택한 다음 allPostsByAuthor를 선택합니다. Nadia가 작성한 모든 게시물이 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "allPostsByAuthor": { "posts": [ { "id": "10", "title": "The cutest dog in the world" }, { "id": "11", "title": "Did you know...?" } ], "nextToken": null } } }
  6. Query에 대한 페이지 매김은 Scan을 수행할 때와 동일하게 작동합니다. 예를 들어, AUTHORNAME의 모든 게시물을 살펴보겠습니다. 이 경우 한 번에 5개 결과를 반환합니다.

  7. 쿼리 창에 다음 쿼리를 추가합니다.

    query allPostsByAuthor { allPostsByAuthor( author: "AUTHORNAME" limit: 5 ) { posts { id title } nextToken } }
  8. 실행(주황색 재생 버튼)을 선택한 다음 allPostsByAuthor를 선택합니다. AUTHORNAME가 작성한 모든 게시물이 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "allPostsByAuthor": { "posts": [ { "id": "6", "title": "A series of posts, Volume 6" }, { "id": "4", "title": "A series of posts, Volume 4" }, { "id": "2", "title": "A series of posts, Volume 2" }, { "id": "7", "title": "A series of posts, Volume 7" }, { "id": "1", "title": "A series of posts, Volume 1" } ], "nextToken": "<token>" } } }
  9. 다음과 같이 이전 쿼리에서 반환된 값으로 nextToken 인수를 업데이트합니다.

    query allPostsByAuthor { allPostsByAuthor( author: "AUTHORNAME" limit: 5 nextToken: "<token>" ) { posts { id title } nextToken } }
  10. 실행(주황색 재생 버튼)을 선택한 다음 allPostsByAuthor를 선택합니다. AUTHORNAME이 작성한 나머지 게시물이 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "allPostsByAuthor": { "posts": [ { "id": "8", "title": "A series of posts, Volume 8" }, { "id": "5", "title": "A series of posts, Volume 5" }, { "id": "3", "title": "A series of posts, Volume 3" }, { "id": "9", "title": "A series of posts, Volume 9" } ], "nextToken": null } } }

집합 사용

지금까지 Post 유형은 플랫 키/값 객체였습니다. 또한 해석기를 사용하여 집합, 목록 및 맵 등과 같은 복잡한 객체를 모델링할 수 있습니다. 태그를 포함하도록 Post 형식을 업데이트해 보겠습니다. 게시물에는 태그가 0개 이상 있을 수 있는데, 태그는 DynamoDB에 문자열 집합으로 저장됩니다. 또한 태그를 추가 및 제거하는 몇 가지 변형과 특정 태그가 지정된 게시물을 스캔하는 새 쿼리를 설정해 볼 것입니다.

데이터를 설정하려면

  1. API에서 스키마 탭을 선택합니다.

  2. 스키마 창에서 다음과 같이 Post 형식을 수정하여 새로운 tags 필드를 추가할 수 있습니다.

    type Post { id: ID! author: String title: String content: String url: String ups: Int! downs: Int! version: Int! tags: [String!] }
  3. 스키마 창에서 다음과 같이 Query 형식을 수정하여 새로운 allPostsByTag 쿼리를 추가할 수 있습니다.

    type Query { allPostsByTag(tag: String!, limit: Int, nextToken: String): PaginatedPosts! allPostsByAuthor(author: String!, limit: Int, nextToken: String): PaginatedPosts! allPost(limit: Int, nextToken: String): PaginatedPosts! getPost(id: ID): Post }
  4. 스키마 창에서 다음과 같이 Mutation 유형을 수정하여 새로운 addTagremoveTag 뮤테이션을 추가할 수 있습니다.

    type Mutation { addTag(id: ID!, tag: String!): Post removeTag(id: ID!, tag: String!): Post deletePost(id: ID!, expectedVersion: Int): Post upvotePost(id: ID!): Post downvotePost(id: ID!): Post updatePost( id: ID!, author: String, title: String, content: String, url: String, expectedVersion: Int! ): Post addPost( author: String!, title: String!, content: String!, url: String! ): Post! }
  5. 스키마 저장(Save Schema)을 선택합니다.

  6. 오른쪽의 해석기 창에서 Query 유형에 새로 생성된 allPostsByTag 필드를 찾은 다음 연결을 선택합니다. 아래 코드 조각을 사용하여 해석기를 만듭니다.

    import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const { limit = 20, nextToken, tag } = ctx.arguments; return ddb.scan({ limit, nextToken, filter: { tags: { contains: tag } } }); } export function response(ctx) { const { items: posts = [], nextToken } = ctx.result; return { posts, nextToken }; }
  7. 해석기의 모든 변경 사항을 저장합니다.

  8. 이제 아래 코드 조각을 사용하여 Mutation 필드 addTag에 대해 동일한 작업을 수행합니다:

    참고

    DynamoDB 유틸리티는 현재 집합 작업을 지원하지 않지만, 직접 요청을 작성하여 집합과 상호 작용할 수 있습니다.

    import { util } from '@aws-appsync/utils' export function request(ctx) { const { id, tag } = ctx.arguments const expressionValues = util.dynamodb.toMapValues({ ':plusOne': 1 }) expressionValues[':tags'] = util.dynamodb.toStringSet([tag]) return { operation: 'UpdateItem', key: util.dynamodb.toMapValues({ id }), update: { expression: `ADD tags :tags, version :plusOne`, expressionValues, }, } } export const response = (ctx) => ctx.result
  9. 해석기의 모든 변경 사항을 저장합니다.

  10. 아래 코드 조각을 사용하여 Mutation 필드 removeTag에 대해 이 작업을 한 번 더 반복합니다.

    import { util } from '@aws-appsync/utils'; export function request(ctx) { const { id, tag } = ctx.arguments; const expressionValues = util.dynamodb.toMapValues({ ':plusOne': 1 }); expressionValues[':tags'] = util.dynamodb.toStringSet([tag]); return { operation: 'UpdateItem', key: util.dynamodb.toMapValues({ id }), update: { expression: `DELETE tags :tags ADD version :plusOne`, expressionValues, }, }; } export const response = (ctx) => ctx.resultexport
  11. 해석기의 모든 변경 사항을 저장합니다.

태그를 사용하는 API 직접 호출

이제 해석기를 설정했으므로 수신되는 , addTag removeTagallPostsByTag 요청을 DynamoDB UpdateItemScan 작업으로 변환하는 방법을 AWS AppSync 알아봅니다. 실행해 보기 위해 이전에 생성한 게시물 중 선택해 보겠습니다. 예를 들어, Nadia에서 작성한 게시물을 사용해 보겠습니다.

태그를 사용하려면

  1. API에서 쿼리 탭을 선택합니다.

  2. 쿼리 창에 다음 쿼리를 추가합니다.

    query allPostsByAuthor { allPostsByAuthor( author: "Nadia" ) { posts { id title } nextToken } }
  3. 실행(주황색 재생 버튼)을 선택한 다음 allPostsByAuthor를 선택합니다.

  4. Nadia의 모든 게시물이 쿼리 창 오른쪽에 있는 결과 창에 나타나야 합니다. 예를 들면 다음과 같아야 합니다.

    { "data": { "allPostsByAuthor": { "posts": [ { "id": "10", "title": "The cutest dog in the world" }, { "id": "11", "title": "Did you known...?" } ], "nextToken": null } } }
  5. 세상에서 가장 귀여운 강아지라는 제목이 붙은 게시물을 사용해 봅시다. 나중에 사용할 것이기 때문에 이 게시물의 id를 기록해 둡니다. 이제 dog 태그를 추가해 보겠습니다.

  6. 쿼리 창에 다음 뮤테이션을 추가합니다. 또한 앞서 적어둔 값을 갖도록 id 인수를 업데이트해야 합니다.

    mutation addTag { addTag(id:10 tag: "dog") { id title tags } }
  7. 실행(주황색 재생 버튼)을 선택한 다음 addTag를 선택합니다. 다음과 같이 새 태그로 게시물이 업데이트됩니다.

    { "data": { "addTag": { "id": "10", "title": "The cutest dog in the world", "tags": [ "dog" ] } } }
  8. 태그를 더 추가할 수 있습니다. tag 인수를 puppy로 변경하도록 뮤테이션을 업데이트합니다.

    mutation addTag { addTag(id:10 tag: "puppy") { id title tags } }
  9. 실행(주황색 재생 버튼)을 선택한 다음 addTag를 선택합니다. 다음과 같이 새 태그로 게시물이 업데이트됩니다.

    { "data": { "addTag": { "id": "10", "title": "The cutest dog in the world", "tags": [ "dog", "puppy" ] } } }
  10. 태그를 삭제할 수도 있습니다. 쿼리 창에 다음 뮤테이션을 추가합니다. 또한 앞서 적어둔 값을 갖도록 id 인수를 업데이트해야 합니다.

    mutation removeTag { removeTag(id:10 tag: "puppy") { id title tags } }
  11. 실행(주황색 재생 버튼)을 선택한 다음 removeTag를 선택합니다. 게시물이 업데이트되고 puppy 태그가 삭제됩니다.

    { "data": { "addTag": { "id": "10", "title": "The cutest dog in the world", "tags": [ "dog" ] } } }
  12. 또한 태그가 지정된 게시물을 모두 검색할 수도 있습니다. 쿼리 창에 다음 쿼리를 추가합니다.

    query allPostsByTag { allPostsByTag(tag: "dog") { posts { id title tags } nextToken } }
  13. 실행(주황색 재생 버튼)을 선택한 다음 allPostsByTag를 선택합니다. dog 태그가 지정된 게시물이 다음과 같이 모두 반환됩니다.

    { "data": { "allPostsByTag": { "posts": [ { "id": "10", "title": "The cutest dog in the world", "tags": [ "dog", "puppy" ] } ], "nextToken": null } } }

결론

이 자습서에서는 AWS AppSync 및 GraphQL을 사용하여 DynamoDB의 Post 객체를 조작할 수 있는 API를 구축했습니다.

정리하려면 콘솔에서 AWS AppSync GraphQL API를 삭제하면 됩니다.

DynamoDB 테이블과 연결된 역할을 삭제하려면 데이터 소스 테이블에서 데이터 소스를 선택하고 편집을 클릭합니다. 새 역할 생성 또는 기존 역할 사용에서 역할 값을 기록해 둡니다. IAM 콘솔로 이동하여 역할을 삭제합니다.

DynamoDB 테이블을 삭제하려면 데이터 소스 목록에서 테이블 이름을 클릭합니다. 그러면 테이블을 삭제할 수 있는 DynamoDB 콘솔로 이동합니다.

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.