백엔드 서버에 DEV.를 복제하여 현실 세계로의 여행(3부)
In the last series we have installed the required minimum dependencies to setup our project as we will move further in this project we will install our required dependencies according to requirement.
Apollo 서버는 스키마 우선 접근 방식을 사용하여 더 작은 프로젝트에서 큰 문제를 생성하지 않는 graphql 쿼리를 작성하지만 프로젝트가 성장하고 스키마에 더 나은 유형이 필요한 경우 graphql 스키마를 작성하기 위한 코드 우선 접근 방식인
nexus schema
를 거쳐야 합니다.In this project we will use apollo server schema first approach for simplicity and we will explore the Query , Mutation and Subscription to design our application.
먼저 javascript와 postgresql로 prisma를 설정합니다.
typescript 또는 다른 데이터베이스에 대해 prisma를 설정하려면 탐색할 수 있습니다here.
우리는 이미 이전 시리즈에서 dev 의존성으로 prisma를 설치했습니다. 디지털 오션의 this 블로그 게시물을 사용하여 우분투에서 postgresql을 설정할 수 있습니다.
프로젝트 devblog_server의 루트에서 터미널을 열고 prisma 프로젝트를 생성합니다.
npx prisma init
이것은
prisma
파일schema.prisma
이 포함된 폴더schema.prisma
를 포함하는 완전히 새로운 프리즈마 프로젝트를 초기화할 것입니다. 테이블을 생성하고 모든 유형의 데이터베이스에 연결하려면 이 파일에서 전체 구성 및 모델 생성을 수행할 수 있습니다.prisma init
또한 .env
파일을 생성함을 알 수 있습니다. .env
파일은 응용 프로그램에 필요한 비밀을 저장하는 경우에 유용한 구성 파일입니다. nodejs에서 작업하는 경우 pnpm add dotenv
를 사용하여 수동으로 설치할 수 있습니다. 그러나 prisma는 종속 항목에 자동으로 설치하므로 여기에 설치할 필요가 없습니다..env
파일을 열면 데이터베이스에 연결하기 위해 prisma가 생성하는 필드가 하나 있습니다. 여기서는 postgresql을 사용하여 다음과 같이 보일 것입니다.DATABASE_URL="postgresql://postgres:harsh12345@localhost:5432/devblog"
DATABASE_URL is field that can used as a environment variable in our nodejs file to get data stored in it
postgres:harsh12345
에는 postgresql 사용자 이름과 암호username:password
가 포함되어 있으며 다른 사용자에 대한 역할을 포함하는 인증 흐름과 같은 UNIX를 사용합니다.@localhost:5432
는 postgresql 서버가 실행되고 있는 호스트 및 포트입니다.devblog
는 첫 번째 마이그레이션을 적용할 때 prisma가 자동으로 생성할 데이터베이스 이름입니다.do not push
.env
file to github always add.env
in you.gitignore
file because it contain all of your secrets and connection url when we will deploy this project we will see how we will use heroku postgres url for now we will use local postgres server on machine.
프로젝트를 위한 폴더 구조를 생성해 보겠습니다. 모든 사람은 프로젝트 구조를 만드는 고유한 방법이 있습니다. 나는 또한 그것을 구성하는 내 자신의 방법을 따릅니다. 확장할 수 있고 향후 새로운 기능을 쉽게 추가할 수 있도록 이렇게 만들었습니다.
먼저 루트 수준에
src/
디렉터리를 만듭니다. 우리의 루트 레벨은 devblog_server
입니다.그런 다음 서버를 구성할 파일
server.js
을 만듭니다.server.js
const { ApolloServer ,gql} = require("apollo-server-express");
const context = require("./context");
const http = require("http");
const express = require("express");
const { PORT } = require("./config");
const typeDefs = gql`
type Query {
hello : String!
}
`
const resolvers = {
Query :{
hello(){
return "welcome the real world"
}
}
async function startApolloServer() {
const app = express();
const server = new ApolloServer({
typeDefs,
resolvers,
context,
tracing: true, // tracing trace our request and response time and much more.
});
await server.start();
server.applyMiddleware({ app });
// testing for REST endpoints through express server
app.use((req, res, next) => {
return res.status(200).json({
success: true,
message: "Express server up & running",
});
});
const httpServer = http.createServer(app);
server.installSubscriptionHandlers(httpServer);
await new Promise((resolve) => httpServer.listen(PORT, resolve));
console.log(`🚀 Express Server ready at http://localhost:${PORT}`);
console.log(
`🚀 Graphql Server ready at http://localhost:${PORT}${server.graphqlPath}`
);
console.log(
`🚀 Subscriptions ready at ws://localhost:${PORT}${server.subscriptionsPath}`
);
}
startApolloServer();
위에서 우리는 모든 구독, 변형 및 쿼리를 처리하기 위해 Apollo 서버, 익스프레스 서버 및 기본 nodejs http 서버를 가져오고 인스턴스화했습니다.
tracing
는 morgan과 비슷하고 심지어 더 좋습니다. REST
세계에서 우리는 morgan
를 사용하여 req 및 res 시간 추적을 기록하고 graphql 놀이터에서 동일한 작업을 수행합니다. 첫 번째 서버를 시작할 때 다음 시리즈에서 graphql 놀이터를 보게 될 것입니다.생성
context.js and config.js in src/ folder
context.js
const prisma = require("./prisma");
module.exports = ({ req, res }) => {
return {
prisma,
};
};
여기에서 우리는 prisma를 가져오고 apollo 서버의 컨텍스트로 전달하여 모든 리졸버에서 prisma를 사용할 수 있도록 합니다.
Be careful do not create new instance of PrismaClient in your every resolvers because it will impact your application performance . you can read about performance optimization in prisma docs here.
config.js
exports.PORT = process.env.PORT
.env
...
PORT=4000
we knew that when we will deploy our backend on heroku their PORT randomly assigned hence there PORT will automatically configured using heroku environment variable
다음 시리즈에서는 localhost에서 서버를 시작하고 사용자 및 포스트 모델을 생성하여 첫 번째 마이그레이션을 적용합니다.
Reference
이 문제에 관하여(백엔드 서버에 DEV.를 복제하여 현실 세계로의 여행(3부)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/harshmangalam/journey-to-the-real-world-by-cloning-dev-to-backend-server-part-3-2bl9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)