댓글 검색 목록

[Reactjs] React 및 Apollo GraphQL을 사용하여 CRUD 애플리케이션 구축

페이지 정보

작성자 운영자 작성일 20-01-27 15:54 조회 607 댓글 0

GraphQL은 API에 대한 쿼리 언어이며 기존 데이터로 쿼리를 수행하기 위한 런타임입니다. 

서버에서 데이터를 요청하고 요청한 내용만 가져 오는 간단한 인터페이스를 제공합니다. 

반대로 서버에 REST API를 사용하는 경우 리턴되는 내용을 제어 할 수 없습니다.


https://codesource.io/build-a-crud-application-with-react-and-apollo-graphql/ 


예를 봅시다. 앱이 서버에서 사용자의 세부 정보를 가져와야 한다고 가정 해 보겠습니다. REST를 사용하면 응답이 다음과 같이 보일 수 있습니다.


{
  user_details: {
    id: 6678,
    name: “John Doe”,
    email: “johndoe@example.com”
  }
}

GraphQL을 사용하면 원하는 데이터를 정확하게 요청할 수 있으며 요청한 것만 얻을 수 있습니다. 필요한 것이 사용자의 이름이라고 가정하면 응답은 다음과 같습니다.


{
  user_details: {
    name: “John Doe”
  }
}

이 외에도 REST는 달성 할 기능에 따라 다양한 엔드 포인트를 제공합니다. 

GraphQL을 사용하면 데이터를 조작하기 위해 쿼리와 변이를 보내는 엔드 포인트 하나만 얻을 수 있습니다. 

다음 단락에서 이에 대해 다룰 것입니다. 시작하자.


전제 조건 


이 자습서에서는 백엔드 서버를 제공하는 서버와 React Crud 응용 프로그램을 제공하는 서버를 2 대 운영합니다. 먼저 백엔드부터 시작하겠습니다.


우리가 만들 Crud 앱을 살펴보십시오.


https://codesource.io/wp-content/uploads/2020/01/demo-of-reat-grahql-appp.mp4


아폴로 서버 설정 


GraphQL은 클라이언트와 서버가 데이터를 조작하기 위해 상호 작용하는 방법을 설명하는 사양입니다. 

따라서 이 사양을 기반으로 하는 다양한 언어에 대해 서로 다른 구현이 있습니다. 

튜토리얼에서 사용할 것은 Apollo GraphQL입니다. 이점 중 하나는 Java, JavaScript 및 Swift에 대한 구현이 있어 많은 변경 없이 다른 클라이언트에서 사용할 수 있다는 것입니다. 

또한 시작하는 것이 비교적 간단합니다.


터미널에서 새 디렉토리를 작성하고 필요한 패키지를 설치하십시오.


mkdir todo-graphql && cd todo-graphql

이 디렉토리 안에 다른 폴더를 작성하십시오.


mkdir server

서버에는 GraphQL 서버가 포함됩니다. 터미널의 서버 폴더로 전환하고 다음을 설치하십시오.


cd server
npm install --save express apollo-server-express cors

server.js라는 루트 디렉토리에 파일을 작성하고 다음을 추가하십시오.


const express = require('express');
const { ApolloServer, gql } = require('apollo-server-express');
const cors = require('cors');

let todos = [
  {
    id: 0,
    text: 'Hello from GraphQL',
    completed: false,
  },
];

이전 단계에서 설치된 패키지를 가져옵니다. 다른 출처에서 요청을 할 수 있기를 원하므로 cors 패키지를 사용합니다.


우리가 만들 응용 프로그램은 할 일과 완료 여부를 추적하는 할 일 목록 응용 프로그램입니다. 할 일을 배열에 저장하지만 배열을 데이터베이스 나 파일로 대체 할 수 있습니다. 간단하게 하기 위해 배열을 사용합니다.


각 할일에는 ID, 텍스트 및 완료가 있습니다. 여태까지는 그런대로 잘됐다.


할 일 후에 다음을 추가하십시오.


const typeDefs = gql`
  type Todo {
    id: String
    text: String
    completed: Boolean
  }
  type Query {
    todos: [Todo]!
  }
  type Mutation {
    createTodo(text: String!):String
    removeTodo(id: String!):String
  }
`;

먼저 Todo라는 스키마를 정의합니다. 기본적으로 Todo의 모델입니다. 다음으로 쿼리를 정의합니다. 앞에서 정의한 Todo 배열을 포함하는 쿼리 할 일이 하나뿐입니다. 끝에 있는 (!)는 항상 무언가를 반환한다는 것을 나타냅니다.


쿼리를 GraphQL 서버에서 데이터를 가져 오는 방식으로 생각할 수 있습니다. REST의 GET 요청과 같습니다. 이 쿼리는 클라이언트 앱을 채우는 데 사용될 서버에서 할 일을 가져옵니다.


또한 2 개의 변이를 정의합니다. 변이는 서버에서 데이터를 업데이트하는 방법입니다. 우리가 가진 첫 번째 변이는 createTodo입니다. 하나의 매개 변수 텍스트를 허용하며 이는 문자열이어야 합니다. 그런 다음 완료되면 문자열을 반환합니다. removeTodo도 마찬가지입니다.


이 타입 정의는 gql ''헬퍼 함수를 ​​사용하여 생성되었습니다.


다음으로 리졸버를 추가합니다.


const resolvers = {
  Query: {
    todos: () => todos,
  },
  Mutation: {
    createTodo: (parent, args, context, info) => {

      return todos.push({
        id: Date.now().toString(),
        text: args.text,
        completed: false,
      });
    },
    removeTodo: (parent, args, context, info) => {
      for (let i in todos) {
        if (todos[i].id === args.id) {
          todos.splice(i, 1);
        }
      }
      return args.id;
    }
  }
};

리졸버는 쿼리와 돌연변이가 발생할 때 실행되는 함수입니다. 여기에서 고객에게 반환 되는 데이터를 가져오고 조작 할 수 있습니다. 할 일 쿼리가 할 일 배열을 반환했습니다. 돌연변이는 4 개의 인수를 받지만 특히 클라이언트에서 전달 된 데이터를 포함하는 인수에 관심이 있습니다. 이 데이터를 사용하여 할 일의 배열을 조작하고 결과를 반환합니다.


const server = new ApolloServer({ typeDefs, resolvers });

const app = express();
server.applyMiddleware({ app });

app.use(cors());

app.listen({ port: 4000 }, () =>
  console.log('Now browse to http://localhost:4000' + server.graphqlPath)
);

마지막으로 타입 정의와 리졸버를 전달하여 ApolloServer를 만듭니다. 또한 교차 출처 요청을 허용하기 위해 cors()를 사용해야 합니다. 그런 다음 포트 4000에서 앱을 제공합니다.


파일을 변경할 때 서버에 변경 사항이 반영되도록 하기 위해 다른 패키지를 설치합니다.


npm install --save nodemon

그런 다음 package.json의 scripts 섹션에 다음을 추가하십시오.


"scripts": {
  "start": "nodemon server.js"
}

터미널에서 npm start를 실행하십시오.


모든 것이 올바르게 설정 되었으면 이제 터미널에서 http : // localhost : 4000 / graphql을 찾습니다.가 표시됩니다. 이 링크는 클라이언트 앱에서 모든 쿼리와 변이를 보내는 곳입니다.


68L-YoXZhmmhGdBMAkYVlzDYM_Y0ZZ81dZ29owHCluf5Ej_BZ839cSST1OZ25NgSwPITfR3jt1w5O7Byrsjhop6tZXnLli9A0DjB1vCxbHX1xleXpAMPKiq4eQtCFQJ49HvBHlOF.png?resize=720%2C330&ssl=1 


해당 URL로 이동하면 클라이언트 앱에 통합하기 전에 쿼리 및 변형 테스트를 실행할 수 있는 대화식 셸이 제공됩니다.



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.