AWS AppSync에서 로컬 해석기 사용 - AWS AppSync GraphQL

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

AWS AppSync에서 로컬 해석기 사용

AWS AppSync를 사용하면 지원되는 데이터 소스(AWS Lambda, Amazon DynamoDB 또는 Amazon OpenSearch Service)를 사용하여 다양한 작업을 수행할 수 있습니다. 하지만 특정 시나리오에서는 지원되는 데이터 원본을 호출할 필요가 없을 수도 있습니다.

이러한 경우에는 로컬 해석기가 유용합니다. 로컬 해석기는 원격 데이터 소스를 호출하는 것이 아니라 단순히 요청 핸들러의 결과를 응답 핸들러로 전달할 뿐입니다. 필드 해석은 AWS AppSync에서 이루어집니다.

로컬 해석기는 다양한 상황에서 유용합니다. 가장 널리 알려진 사용 사례는 데이터 원본 호출을 트리거하지 않고 알림을 게시하는 경우입니다. 이 사용 사례를 시연하기 위해 사용자가 메시지를 게시하고 구독할 수 있는 게시/구독 애플리케이션을 만들어 보겠습니다. 이 예제에서는 Subscriptions를 활용하므로, Subscriptions에 대해 잘 모르는 경우 실시간 데이터 자습서에 따라 실행할 수도 있습니다.

게시/구독 앱 만들기

먼저 GraphQL API를 생성할 때 처음부터 디자인 옵션을 선택하고 선택적 세부 정보를 구성하여 빈 GraphQL API를 생성합니다.

게시/구독 애플리케이션에서 클라이언트는 메시지를 구독하고 게시할 수 있습니다. 게시된 각 메시지에는 이름과 데이터가 포함됩니다. 스키마에 다음을 추가합니다.

type Channel { name: String! data: AWSJSON! } type Mutation { publish(name: String!, data: AWSJSON!): Channel } type Query { getChannel: Channel } type Subscription { subscribe(name: String!): Channel @aws_subscribe(mutations: ["publish"]) }

다음으로 Mutation.publish 필드에 해석기를 연결해 보겠습니다. 스키마 창 옆의 해석기 창에서 Mutation 유형을 찾고 publish(...): Channel 필드를 찾은 다음 연결을 클릭합니다.

없음 새 데이터 소스를 생성하고 이름을 PageDataSource로 지정합니다. 해석기에 연결합니다.

다음 코드 조각을 사용하여 해석기 구현을 추가합니다.

export function request(ctx) { return { payload: ctx.args }; } export function response(ctx) { return ctx.result; }

해석기를 만들고 변경한 내용을 저장했는지 확인합니다.

메시지 전송 및 구독

클라이언트에서 메시지를 수신하도록 하려면 먼저 클라이언트가 받은 편지함을 구독해야 합니다.

쿼리 창에서 SubscribeToData 구독을 실행합니다.

subscription SubscribeToData { subscribe(name:"channel") { name data } }

구독자는 publish 뮤테이션이 호출될 때마다 메시지를 수신하지만 메시지가 channel 구독으로 전송될 때만 수신됩니다. 쿼리 창에서 이 방법을 시도해 보겠습니다. 콘솔에서 구독이 계속 실행되는 동안 다른 콘솔을 열고 쿼리 창에서 다음 요청을 실행합니다.

참고

이 예시에서는 유효한 JSON 문자열을 사용합니다.

mutation PublishData { publish(data: "{\"msg\": \"hello world!\"}", name: "channel") { data name } }

결과는 다음과 같습니다.

{ "data": { "publish": { "data": "{\"msg\":\"hello world!\"}", "name": "channel" } } }

AWS AppSync를 나가지 않고 간단히 메시지를 게시하고 수신해 봄으로써 로컬 해석기 사용을 보여드렸습니다.