기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
GraphQL 해석기는 형식 스키마의 필드를 데이터 원본에 연결합니다. 해석기는 요청을 이행하는 메커니즘입니다.
AWS AppSync의 해석기는 JavaScript를 사용하여 GraphQL 표현식을 데이터 소스가 사용할 수 있는 형식으로 변환합니다. 또는 Apache Velocity Template Language(VTL)
이 섹션에서는 JavaScript를 사용하여 해석기를 구성하는 방법을 설명합니다. 해석기 자습서(JavaScript) 섹션에서는 JavaScript를 사용하여 해석기를 구현하는 방법에 대한 심화된 자습서를 제공합니다. 해석기 참조(JavaScript) 섹션에서는 JavaScript 해석기와 함께 사용할 수 있는 유틸리티 작업에 대한 설명을 제공합니다.
앞서 언급한 자습서를 사용하기 전에 이 안내서를 확인하는 것이 좋습니다.
이 섹션에서는 쿼리와 변형을 위한 해석기를 만들고 구성하는 방법을 살펴보겠습니다.
참고
이 안내서에서는 스키마를 만들었으며 쿼리 또는 변형이 하나 이상 있다고 가정합니다. 구독(실시간 데이터)을 찾고 있다면 이 안내서를 참조하세요.
이 섹션에서는 아래 스키마를 사용하는 예제와 함께 해석기 구성을 위한 몇 가지 일반적인 단계를 제공합니다.
// schema.graphql file
input CreatePostInput {
title: String
date: AWSDateTime
}
type Post {
id: ID!
title: String
date: AWSDateTime
}
type Mutation {
createPost(input: CreatePostInput!): Post
}
type Query {
getPost: [Post]
}
기본 쿼리 해석기 생성
이 섹션에서는 기본 쿼리 해석기를 생성하는 방법을 보여 줍니다.
-
에 로그인 AWS Management Console 하고 AppSync 콘솔
을 엽니다. -
API 대시보드에서 GraphQL API를 선택합니다.
-
사이드바에서 스키마를 선택합니다.
-
-
스키마와 데이터 원본의 세부 정보를 입력합니다. 자세한 내용은 스키마 설계 및 데이터 원본 연결 섹션을 참조하세요.
-
스키마 편집기 옆에는 해석기라는 창이 있습니다. 이 상자에는 스키마 창에 정의된 형식 및 필드 목록이 있습니다. 필드에 해석기를 연결할 수 있습니다. 주로 필드 작업에 해석기를 연결하게 될 것입니다. 이 섹션에서는 간단한 쿼리 구성을 살펴보겠습니다. 쿼리 유형에서 쿼리 필드 옆에 있는 연결을 선택합니다.
-
해석기 연결 페이지의 해석기 유형에서 파이프라인 또는 단위 해석기 중에서 선택할 수 있습니다. 이러한 유형에 대한 자세한 내용은 해석기를 참조하세요. 이 안내서에서는
pipeline resolvers
를 활용합니다.작은 정보
파이프라인 해석기를 생성하면 데이터 원본이 파이프라인 함수에 연결됩니다. 함수는 파이프라인 해석기를 생성한 후에 생성되므로 이 페이지에는 설정을 위한 옵션이 없습니다. 단위 해석기를 사용하는 경우 데이터 원본이 해석기에 직접 연결되므로 이 페이지에서 설정하게 됩니다.
해석기 런타임의 경우
APPSYNC_JS
를 선택하여 JavaScript 런타임을 활성화하세요. -
이 API에 캐싱을 활성화할 수 있습니다. 그러나 지금은 이 기능을 끄는 것이 좋습니다. 생성(Create)을 선택합니다.
-
해석기 편집 페이지에는 해석기 핸들러 및 응답(사전 및 사후 단계)에 대한 로직을 구현할 수 있게 해주는 해석기 코드라는 코드 편집기가 있습니다. 자세한 내용은 JavaScript 해석기 개요를 참조하세요.
참고
이 예에서는 요청을 비워 두고 컨텍스트의 마지막 데이터 원본 결과를 반환하도록 응답을 설정해 보겠습니다.
import {util} from '@aws-appsync/utils'; export function request(ctx) { return {}; } export function response(ctx) { return ctx.prev.result; }
이 섹션 아래에는 함수라는 테이블이 있습니다. 함수를 사용하면 여러 해석기에서 재사용할 수 있는 코드를 구현할 수 있습니다. 코드를 계속 다시 작성하거나 복사하는 대신, 소스 코드를 함수로 저장하여 필요할 때마다 해석기에 추가되도록 할 수 있습니다.
함수는 파이프라인 작업 목록의 대부분을 구성합니다. 해석기에서 여러 함수를 사용하는 경우 함수 순서를 설정하면 해당 순서대로 순차적으로 실행됩니다. 이러한 함수는 요청 함수가 실행된 후와 응답 함수가 시작되기 전에 실행됩니다.
새 함수를 추가하려면 함수에서 함수 추가를 선택한 다음 새 함수 생성을 선택합니다. 또는 선택할 수 있는 함수 생성 버튼이 표시될 수도 있습니다.
-
데이터 원본을 선택합니다. 이 항목은 해석기가 작동하는 데이터 원본이 됩니다.
참고
이 예제에서는
id
로Post
객체를 검색하는getPost
에 대한 해석기를 연결합니다. 이 스키마에 대한 DynamoDB 테이블을 이미 설정했다고 가정해 보겠습니다. 파티션 키는id
로 설정되어 있고 비어 있습니다. -
Function name
을 입력합니다. -
함수 코드에서 함수의 동작을 구현해야 합니다. 헷갈릴 수도 있지만 각 함수에는 고유한 로컬 요청 및 응답 핸들러가 있습니다. 요청이 실행되면 요청을 처리하기 위한 데이터 원본 간접 호출이 수행되고, 응답 핸들러가 데이터 원본 응답을 처리합니다. 결과는 컨텍스트 객체에 저장됩니다. 이후에는 목록의 다음 함수가 실행되거나 마지막 함수인 경우 사후 단계 응답 핸들러로 전달됩니다.
참고
이 예제에서는 데이터 원본에서
Post
객체 목록을 가져오는getPost
에 해석기를 연결합니다. 요청 함수는 테이블에서 데이터를 요청하고, 테이블은 컨텍스트(ctx)에 응답을 전달한 다음, 응답은 컨텍스트에 결과를 반환합니다. AWS AppSync의 강도는 다른 AWS 서비스와의 상호 연결성에 있습니다. DynamoDB를 사용하고 있기 때문에 이와 같은 작업을 단순화할 수 있는 일련의 작업이 있습니다. 다른 데이터 원본 유형에 대한 몇 가지 보일러플레이트 예제도 있습니다.코드는 다음과 같습니다.
import { util } from '@aws-appsync/utils'; /** * Performs a scan on the dynamodb data source */ export function request(ctx) { return { operation: 'Scan' }; } /** * return a list of scanned post items */ export function response(ctx) { return ctx.result.items; }
이 단계에서는 두 가지 함수를 추가했습니다.
-
request
: 요청 핸들러는 데이터 원본에 대해 검색 작업을 수행합니다. 인수에는 컨텍스트 객체(ctx
) 또는 특정 작업을 수행하는 모든 해석기에 사용할 수 있는 일부 데이터가 포함됩니다. 예를 들어 권한 부여 데이터, 해석 중인 필드 이름 등이 포함될 수 있습니다. 반환 문은Scan
작업을 수행합니다(예시는 여기를 참조). DynamoDB로 작업 중이므로 해당 서비스의 일부 작업을 사용할 수 있습니다. 스캔은 테이블 내 모든 항목에 대한 기본 가져오기를 수행합니다. 이 작업의 결과는 응답 핸들러로 전달되기 전에 컨텍스트 객체에result
컨테이너로 저장됩니다.request
는 파이프라인에서 응답보다 먼저 실행됩니다. -
response
:request
의 출력을 반환하는 응답 핸들러입니다. 인수는 업데이트된 컨텍스트 객체이고, 반환 문은ctx.prev.result
입니다. 이 시점에서는 이 값에 익숙하지 않을 수 있습니다.ctx
는 컨텍스트 객체를 나타냅니다.prev
는 파이프라인에서의 이전 작업을 나타내며, 여기에서는request
였습니다.result
에는 파이프라인을 통과하는 해석기의 결과가 포함됩니다. 종합해 보면ctx.prev.result
는 마지막으로 수행된 작업, 즉 요청 핸들러의 결과를 반환합니다.
-
-
완료했으면 생성을 선택합니다.
-
-
해석기 화면으로 돌아가서 함수 아래에서 함수 추가 드롭다운을 선택하고 함수를 함수 목록에 추가합니다.
-
저장을 선택하여 해석기를 업데이트합니다.
이 예제에서 발생한 일을 요약하기 위해 요청 및 응답 핸들러를 구현한 AWS AppSync 함수를 보았습니다. 함수는 데이터 원본과의 상호 작용을 담당했습니다. 요청 핸들러가 DynamoDB 데이터 소스에 대해 수행할 Scan
작업을 AWS AppSync지시하는 작업을에 보냈습니다. 응답 핸들러는 항목의 목록(ctx.result.items
)을 반환했습니다. 그런 다음 항목 목록이 Post
GraphQL 유형에 자동으로 매핑되었습니다.
기본 변형 해석기 생성
이 섹션에서는 기본 변형 해석기를 생성하는 방법을 보여 줍니다.
-
에 로그인 AWS Management Console 하고 AppSync 콘솔
을 엽니다. -
API 대시보드에서 GraphQL API를 선택합니다.
-
사이드바에서 스키마를 선택합니다.
-
-
해석기 섹션 및 변형 유형에서 필드 옆에 있는 연결을 선택합니다.
참고
이 예제에서는 테이블에
Post
객체를 추가하는createPost
에 대한 해석기를 연결합니다. 마지막 섹션과 동일한 DynamoDB 테이블을 사용한다고 가정해 보겠습니다. 파티션 키는id
로 설정되어 있고 비어 있습니다. -
해석기 연결 페이지의 해석기 유형에서
pipeline resolvers
를 선택합니다. 참고로 해석기에 대한 추가 정보는 여기에서 확인할 수 있습니다. 해석기 런타임의 경우APPSYNC_JS
를 선택하여 JavaScript 런타임을 활성화하세요. -
이 API에 캐싱을 활성화할 수 있습니다. 그러나 지금은 이 기능을 끄는 것이 좋습니다. 생성(Create)을 선택합니다.
-
함수 추가를 선택한 다음 새 함수 생성을 선택합니다. 또는 선택할 수 있는 함수 생성 버튼이 표시될 수도 있습니다.
-
데이터 원본을 선택합니다. 변형을 사용하여 조작할 데이터가 들어 있는 원본이어야 합니다.
-
Function name
을 입력합니다. -
함수 코드에서 함수의 동작을 구현해야 합니다. 이는 변형이므로 요청은 간접적으로 호출된 데이터 원본에서 일부 상태 변경 작업을 수행하는 것이 이상적입니다. 결과는 응답 함수에 의해 처리됩니다.
참고
createPost
는 파라미터를 데이터로 사용하여 테이블에 새Post
를 추가하거나 '퍼팅'합니다. 다음과 같이 추가할 수 있습니다.import { util } from '@aws-appsync/utils'; /** * Sends a request to `put` an item in the DynamoDB data source */ export function request(ctx) { return { operation: 'PutItem', key: util.dynamodb.toMapValues({id: util.autoId()}), attributeValues: util.dynamodb.toMapValues(ctx.args.input), }; } /** * returns the result of the `put` operation */ export function response(ctx) { return ctx.result; }
이 단계에서
request
및response
함수도 추가했습니다.-
request
: 요청 핸들러는 컨텍스트를 인수로 받아들입니다. 요청 핸들러 반환 문은 내장된 DynamoDB 작업인PutItem
명령을 수행합니다(예시는 여기 또는 여기 참조).PutItem
명령은 파티션key
값(util.autoid()
에서 자동으로 생성됨)과 컨텍스트 인수 입력의attributes
(요청 시 전달할 값)를 가져와 DynamoDB 테이블에Post
객체를 추가합니다.key
는id
이고attributes
는date
및title
필드 인수입니다. 둘 다 DynamoDB 테이블에서 작동하도록util.dynamodb.toMapValues
도우미를 통해 미리 형식이 지정되어 있습니다. -
response
: 응답은 업데이트된 컨텍스트를 수락하고 요청 핸들러의 결과를 반환합니다.
-
-
완료했으면 생성을 선택합니다.
-
-
해석기 화면으로 돌아가서 함수 아래에서 함수 추가 드롭다운을 선택하고 함수를 함수 목록에 추가합니다.
-
저장을 선택하여 해석기를 업데이트합니다.
이 예제에서 일어나는 일을 요약하기 위해는 createPost
필드에 정의된 인수를 GraphQL 스키마에서 DynamoDB 작업으로 AWS AppSync 자동 변환합니다. 이 예제에서는 util.autoId()
도우미를 사용하여 자동으로 생성되는 id
의 키를 사용하여 DynamoDB에 레코드를 저장합니다. AWS AppSync 콘솔에서 또는 다른 방식으로 수행된 요청의 컨텍스트 인수(ctx.args.input
)에 전달하는 다른 모든 필드는 테이블의 속성으로 저장됩니다. 키와 특성 모두 util.dynamodb.toMapValues(values)
도우미를 사용하여 호환되는 DynamoDB 형식에 자동으로 매핑됩니다.
AWS AppSync 는 해석기 편집을 위한 테스트 및 디버깅 워크플로도 지원합니다. 모의 context
객체를 사용하여 간접 호출 전에 템플릿의 변환된 값을 확인할 수 있습니다. 선택적으로 쿼리를 실행할 때 대화식으로 데이터 원본에 대한 전체 요청을 볼 수 있습니다. 자세한 내용은 해석기 테스트 및 디버깅(JavaScript) 및 모니터링 및 로깅을 참조하세요.
고급 해석기
스키마 설계의 선택적 페이지 매김 섹션을 따르는 경우에도 페이지 매김을 사용하려면 요청에 해석기를 추가해야 합니다. 이 예제에서는 한 번에 요청된 항목 중 일부만 반환하도록 getPosts
라는 쿼리 페이지 매김을 사용했습니다. 해당 필드의 해석기 코드는 다음과 같을 수 있습니다.
/**
* Performs a scan on the dynamodb data source
*/
export function request(ctx) {
const { limit = 20, nextToken } = ctx.args;
return { operation: 'Scan', limit, nextToken };
}
/**
* @returns the result of the `put` operation
*/
export function response(ctx) {
const { items: posts = [], nextToken } = ctx.result;
return { posts, nextToken };
}
요청에서는 요청의 컨텍스트를 전달합니다. limit
은 20
으로, 첫 번째 쿼리에서 최대 20개의 Posts
를 반환합니다. nextToken
커서는 데이터 원본의 첫 번째 Post
항목에 고정됩니다. 이러한 값은 인수로 전달됩니다. 그런 다음 요청은 첫 번째 Post
부터 시작하여 스캔 제한 횟수까지 스캔을 수행합니다. 데이터 원본은 결과를 컨텍스트에 저장하고, 이 결과는 응답에 전달됩니다. 응답은 검색된 Posts
를 반환한 다음 nextToken
을 한도 바로 뒤의 Post
항목으로 설정합니다. 정확히 동일한 작업을 수행하지만 첫 번째 쿼리 직후의 오프셋부터 시작하도록 다음 요청이 전송됩니다. 이러한 종류의 요청은 병렬로 수행되지 않고 순차적으로 수행된다는 점에 유의하세요.