백엔드 구축 | 노드, Postgres, GraphQL

안녕하세요 👋

모든 애플리케이션에는 백엔드가 필요합니다. 그리고 이를 달성할 수 있는 많은 언어와 도구가 있습니다. 그러나 이 빠른 자습서에서는 대량의 데이터로 작동하는 강력한 백엔드를 구축하기 위한 꽤 일반적인 스택인 PostgreSQL과 Node로 백엔드 서버GraphQL를 설정하는 방법을 보여드리겠습니다. 그럴 수도 있겠지만, 나는 당신이 당신의 조사를 했다고 가정하고 있으며, 따라서 당신은 이 도구 조합을 결정했습니다.

구조 및 패키지



먼저 서버의 구조를 정의해 보겠습니다.

▶ 이것을 터미널에 붙여넣기: npm init -y 필요한 파일과 폴더를 생성합니다.



이제 필요한 모든 패키지를 설치하십시오: npm i apollo-server graphql graphql-tag pg

INDEX.JS



프로젝트의 진입점인 index.js에 다음을 붙여넣습니다.

const { ApolloServer } = require("apollo-server");
const typeDefs = require("./graphql/typeDefs");
const resolvers = require("./graphql/resolvers");

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => {
    return { req };
  },
});

const PORT = process.env.PORT || 4000;

server.listen({ port: PORT });
console.log("Server up and running on port: " + PORT);



✅ 서버가 가동 중입니다!

포스트그레스



Postgres가 설치되어 있다고 가정하겠습니다. 따라서 터미널을 열고 Postgres에 로그인하십시오. 내 경우: psql -U postgres + 암호. 로그인한 후 이 자습서에서 사용할 새 데이터베이스를 만듭니다. CREATE DATABASE dogdb
이제 db.js 파일에서 데이터베이스에 대한 연결을 준비합니다. pool를 통해 소통하겠습니다.

const Pool = require("pg").Pool;

const pool = new Pool({
  user: "postgres",
  password: "postgres",
  host: "localhost",
  port: 5432,
  database: "dogdb",
});

module.exports = pool;



터미널로 돌아가서 새 테이블을 만듭니다(데이터를 저장하는 테이블에). 하지만 그 전에 나중에 db의 각 인스턴스에 대해 고유 ID를 생성할 'uuid-ossp' 확장을 설치합니다.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";


CREATE TABLE dog(
    uid UUID NOT NULL PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    breed VARCHAR(40) NOT NULL
);



✅ DB 준비 완료!

GraphQL



typeDefs에서는 유형, 쿼리 및 변형을 정의합니다. 즉, 나중에 활용할 데이터 및 데이터 조작에 대해 설명합니다.

const gql = require('graphql-tag');

module.exports = gql`
  type Dog{
      uid: ID!
      name: String!
      breed: String!
    }

  type Query {
      getDogs: [Dog]
  }

  type Mutation{
      addDog(name: String!, breed: String!): Dog!
      editDog(name: String!, breed: String!): Dog!
      deleteDog(uid: ID!): String!
  }
`



이제 resolvers 폴더에서 index.js 옆에 새 파일을 만들고 이름을 dogs.js 로 지정합니다. 해당 파일에서 type Dog 에 대한 CRUD 작업을 작성합니다. 그 전에 먼저 index.js(리졸버의 진입점)로 가져오기dogs.js를 수행해 보겠습니다.

const dogsResolvers = require('./dogs');

module.exports = {
  Query: {
    ...dogsResolvers .Query,
  },
  Mutation: {
    ...dogsResolvers .Mutation,
  },
};



나중에 고양이(또는 오소리)를 키우기로 결정한 경우. 당신도 똑같이 할 것입니다. resolvers 폴더에 cats.js를 만들고 index.js로 가져옵니다.

이제 CRUD를 해보자!

const pool = require('../../db')

module.exports = {
  Query: {
    async getDogs() {
      try {
        const dogs = await pool.query('SELECT * FROM dogs')
        return dogs.rows;
      } catch (error) {
        throw new Error(error);
      }
    },
  },
Mutation: {
    async addDog(_, { name, breed }) {
      try {
        const query = {
          text: 'INSERT INTO dog(uid, name, breed) VALUES(uuid_generate_v4(), $1, $2) 
                   RETURNING *',
          values: [name, breed]
        }
        const dog = await pool.query(query);
        return dog.rows[0];
      } catch (error) {
        throw new Error(error);
      }
    },
    async editDog(_, { uid, name, breed }) {
      try {
        const query = {
          text: 'UPDATE dog SET name=$1, breed=$2 WHERE uid=$3 RETURNING *',
          values: [name, breed, uid]
        }
        const dog = await pool.query(query);
        return dog.rows[0];
      } catch (error) {
        throw new Error(error);
      }
    },
    async deleteDog(_, { uid }) {
      try {
        const query = {
          text: 'DELETE FROM dog WHERE uid=$1',
          values: [uid]
        }
        await pool.query(query)
        return 'Dog deleted'
      } catch (error) {
        throw new Error(error);
      }
    }
  }
}



✅✅✅ 축하합니다! 당신은 서버를 구축! 🥳🚀

그것을 밖으로 시도하자!



브라우저를 열고 다음 URL로 이동하세요: http://localhost:4000/ 서버가 작동하는지 확인하겠습니다!

개를 추가





getDogs





editDog





deleteDog





놀랍지 않나요?

브라보! 이 게시물의 끝에 도달했습니다! 끝까지 따라와 주셔서 감사합니다. 이 빠른 자습서가 도움이 되었기를 바랍니다. 여러분의 피드백을 환영합니다 :)

다음 시간까지,

달리보르

좋은 웹페이지 즐겨찾기