npm i apollo-server graphql
apollo-server 는 graphql의 프레임워크다
restAPI 의 Express 라고 생각하면 좋다.
$npx prisma migrate dev --preview-feature
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
ORM인 prisma를 사용해 JS코드로 SQL문을 작성하는 것이다. default Database는 postgresql 이다
dev flag를 사용하면 prisma 가 자동적으로 client를 생성해준다.
client는 데이터베이스와 소통하는 수단이다.
$npx prisma studio
Prisma Studio 를 사용하면 데이터베이스 안에 있는 정보를 시각적으로 볼 수 있다.
index.js에서 gql 코드를 전부 작성하면 가독성도 떨어지고 유지보수도 하기도 어려워진다,
모듈 별로 나누는 것이 중요한데
graphql을 사용할때는 graphql-tools 패키지를 사용해서 불리된 모듈을 한곳으로 모아주어야 한다.
기능 별로 나누고, 그 안에서 typeDefs과 resolvers 로 나누는것이 바람직하다.
npm install graphql-tools@7.0.2
// in schema.js
const loadedTypes = loadFilesSync(`${__dirname}/**/*.typeDefs.js`);
const loadedResolvers = loadFilesSync(
`${__dirname}/**/*.{queries, mutations}.js`
);
const typeDefs = mergeTypeDefs(loadedTypes);
const resolvers = mergeResolvers(loadedResolvers);
const schema = makeExecutableSchema({
typeDefs,
resolvers,
});
${__dirname}/*/.typeDefs.js
현재 디렉토리(src)를 기준으로 모든 폴더 > typeDefs.js로 끝나는 모든 것을 가져오겠다
// in server.js
require("dotenv").config();
import {ApolloServer, gql} from "apollo-server";
import schema from "./schema";
const server = new ApolloServer({
schema,
});
const PORT = process.env.PORT;
server
.listen(PORT)
.then(() => console.log("Server is running on http://localhost:4000"));