백엔드 구축 | 노드, 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
놀랍지 않나요?
브라보! 이 게시물의 끝에 도달했습니다! 끝까지 따라와 주셔서 감사합니다. 이 빠른 자습서가 도움이 되었기를 바랍니다. 여러분의 피드백을 환영합니다 :)
다음 시간까지,
달리보르
Reference
이 문제에 관하여(백엔드 구축 | 노드, Postgres, GraphQL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/daliboru/building-backend-node-postgres-graphql-373g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)