이 articl e에서는 TypeScript, AWS Lambda, 그리고 Apollo Server를 사용하여 서버를 관리하지 않는 GraphQL API를 생성하는 과정에 대해 引导할 것입니다.
Serverless 컴퓨팅
Serverless 컴퓨팅은 클라우드 提供商이 응용 프로그램을 실행하기 위한 인프RASTRUCTURE를 자동으로 관리하는 클라우드 计算机 실행 모델입니다. 이 모델에서는 개발자는 코드를 写得 후, 클라우드 提供商이 서버를 运行, 扩展, 以及 mantain하는 것을 유치하므로 개발자는 서버 관리, 인프RASTRUCTURE 제공, 或者 扩展할 필요가 없습니다. “Serverless”이란 용어는 서버가 아닌 것이라고 해석되는 것이 아니라, 개발자에게 서버 관리 任务들이 abstraction되어 있다는 의미입니다. AWS Lambda는 Amazon Web Services (AWS)에서 제공하는 서버를 provisioning 하거나 관리하지 않고 코드를 실행할 수 있는 서버 Less compute service입니다.
GraphQL
GraphQL은 API에 대한 조회 언어로 그 조회를 실행하는 runtime입니다. 이는 クライアント가 정말 필요한 데이터를 요청할 수 있는 것을 허용하므로 REST와 相比하여 효율적입니다. GraphQL을 사용하면 クライアン트는 응답의 형상과 구조를 指定할 수 있으며 單일 요청으로 여러 자원을 가져올 수 있습니다. 이러한 유연성은 성능을 改善하고 네트워크 오버하드를 감소시키ます. GraphQL은 강한 타입화를 지원하며, 사용 가능한 형상과 操作을 정의하는 스캔(schema)가 있습니다. 现代化的 응용 프로그램에서는 프론트 端과 バック 端之间의 通信을 優化하기 위해 GraphQL을 사용하는 것이 일반적입니다. 이렇게 인터섹션은 더 적극적으로 대응하고 정확한 자원 관리를 할 수 있습니다.
Apollo Server
인기있고 오픈 소스의 GraphQL 서버로, 개발자들이 GraphQL API를 쉽게 생성할 수 있습니다. 스키마 정의, 쿼리 실행, 응답 형식 formatting을 하나의 프로세스로 简単하게 만들어주며, 강健壮한 그 자체를 가진 GraphQL API를 만들 수 있습니다. Apollo Server는 데이터 가져오기, 캐시, 인증 등의 기능을 지원하며, 현대 응용 프로그램에 적용이 용이합니다. REST API, 데이터베이스, microservices 등의 다양한 데이터 소스와 함께 일관성을 보여줍니다. 성능 모니터링과 에러 처리를 수행하는 내장 ツール로 Apollo Server는 背着 개발을 시간 줄이며, GraphQL 환경에서 클라이언트와 서버之间的 간단하고 유연한 통신을 제공합니다.
왜 TypeScript?
JavaScript의 상속 언어로 static typing을 추가하여 있습니다. 開発 과정에서 에러를 잡고, 코드 읽기를 改善하며, 변경 사항을 더욱 좋게 도울 수 있습니다. 형변이 안전性和 도구 지원을 제공하여 수명 lonizable 그리고 확장性 있는 응용 프로그램을 가능하게 합니다. 대형 프로젝트 또는 팀에서 理想한 것입니다.
为什么无服务器和GraphQL如此好的工作在一起(或者说“代码中的爱情故事”)
- 最適化된 자원 사용: GraphQL의 정확한 데이터 가져오기와 서버 없이 지불 모델이 완벽하게 일치하여 효율적인 자원 Utilization을 Ensure 합니다.
- 简単한 백エンド: 서버 없는 함수는 GraphQL 결정자를 효율적으로 처리하여 백 엔드 아키텍처를 精简합니다.
- 개선된 성능: GraphQL의 데이터 오버헤드를 줄이는 능력이 있으며, 서버 없는 Architecture와 결합하여 더욱 빨라지는 응용 프로그램을 만들 수 있습니다.
- 스케일ability: 이 두 기술은 다양한 로드를 처리하기에 優れており, 이러한 조합은 높은 스케일ability를 posess한다.
- 成本效益: 서버 없이 컴퓨팅의 Pay-as-you-go 모델, GraphQL의 효율적인 데이터 이전 함께 사용하여 substancial 수익을 얻을 수 있다.
“Serverless과 GraphQL의 조합은 스케일ability와 효율성이 있는 API를 快速하게 开発할 수 있다. 開発 시간과 운영 コスト를 substancial하게 줄일 수 있는 強力한 쌍이다.” – Nader Dabit, “Full Stack Serverless“
下記は AWS Lambdaで GraphQLを使用したサービスのデプロイメントの手順を step-by-step で説明します。
- Step 1: 新的な TypeScript プロジェクトを初期化し、依存性をインストールする。
mkdir serverless-graphql-api
cd serverless-graphql-api
npm init -y
npm install typescript @types/node --save-dev
npx tsc --init
npm install apollo-server-lambda graphql @types/aws-lambda
npm install --save-dev serverless-offline
- Step 2: 必要な要素で GraphQL スキーマを定義する。
import { gql } from 'apollo-server-lambda';
export const typeDefs = gql`
type Query {
auto: String
}
type Mutation {
sayAuto(name: String!): String
}
`;
- Step 3: リゾルバの実装:
export const resolvers = {
Query: {
auto: () => 'Hello from serverless GraphQL!',
},
Mutation: {
sayAuto: (_: any, { name }: { name: string }) => `Hello, ${name}!`,
},
};
- Step 4: Lambda ハンドラを作成する:
import { ApolloServer } from 'apollo-server-lambda';
import { typeDefs } from './schema';
import { resolvers } from './resolvers';
const server = new ApolloServer({
typeDefs,
resolvers,
});
export const graphqlHandler = server.createHandler();
- Step 5: serverless デプロイメントを設定する。
serverless.yml
ファイルを作成します:
service: serverless-graphql-api provider: name: aws runtime: nodejs16.x stage: dev region: us-east-1 functions: graphql: handler: handler.graphqlHandler events: - http: path: graphql method: post - http: path: graphql method: get plugins: - serverless-offline
AWS에서 (빠른 Hello World) 코드를 직접 람다로 작성할 수 있으며, CDK 또는 Terraform과 같은 적절한 배포 옵션을 사용할 수 있습니다. 서버리스 컴퓨팅과 GraphQL이 계속해서 발전하기 때문에, still more powerful tools and practices 이 나타날 것입니다.
결론
서버리스 GraphQL을 Embrace 하면 開発자는 자동으로 扩展 되고 고객이 필요한 것을 정확하게 제공하는 API를 만들 수 있습니다. 数据的 정보를 가져오고 扩展 하는 것을 水晶球이 항상 정확하게 知らせる 것과 유사합니다.
Source:
https://dzone.com/articles/serverless-computing-and-graphql