

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

# AWS AppSync에서 로컬 해석기 사용
<a name="tutorial-local-resolvers-js"></a>

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

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

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

## 게시/구독 앱 만들기
<a name="create-the-pub-sub-application-js"></a>

먼저 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;
}
```

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

## 메시지 전송 및 구독
<a name="send-and-subscribe-to-messages-js"></a>

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

**쿼리** 창에서 `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를 나가지 않고 간단히 메시지를 게시하고 수신해 봄으로써 로컬 해석기 사용을 보여드렸습니다.