[nodejs] Prisma를 사용한 GraphQL 서버 구축
본 포스트에서는 Prisma를 사용하여 Node.js 기반의 GraphQL 서버를 구축하는 방법에 대해 다룹니다.
목차
- Prisma 소개
- 프로젝트 초기 설정
- Prisma 스키마 정의
- Prisma Migrate를 사용한 데이터베이스 마이그레이션
- GraphQL 서버 구축
- 결론
1. Prisma 소개
Prisma는 데이터베이스를 다루는 데 필요한 모든 것을 제공하는 현대적인 ORM(Object-Relational Mapping) 도구입니다. 프로덕션 환경에서 안정적으로 사용될 수 있도록 설계되었으며, TypeScript를 완벽하게 지원하여 타입 안정성을 보장합니다. 또한 Prisma는 데이터 모델링, 데이터베이스 마이그레이션, 쿼리 빌딩 및 데이터베이스 접근을 위한 강력한 도구를 제공합니다.
2. 프로젝트 초기 설정
먼저, Node.js 프로젝트를 생성하고 필수 패키지를 설치합니다.
mkdir graphql-server
cd graphql-server
npm init -y
npm install express apollo-server-express @prisma/client
3. Prisma 스키마 정의
프로젝트 루트 디렉토리에 schema.prisma
파일을 생성하고 데이터 모델을 정의합니다.
// schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
name String
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String
userId Int
user User @relation(fields: [userId], references: [id])
}
4. Prisma Migrate를 사용한 데이터베이스 마이그레이션
Prisma Migrate를 사용하여 데이터베이스 스키마를 초기화하고 마이그레이션을 수행합니다.
npx prisma migrate dev --name init --preview-feature
5. GraphQL 서버 구축
index.js
파일을 생성하고 아래와 같이 GraphQL 서버를 구축합니다.
// index.js
const { ApolloServer, gql } = require('apollo-server-express');
const { PrismaClient } = require('@prisma/client');
const express = require('express');
const prisma = new PrismaClient();
const typeDefs = gql`
type Query {
users: [User]
posts: [Post]
}
type User {
id: Int
name: String
posts: [Post]
}
type Post {
id: Int
title: String
content: String
user: User
}
`;
const resolvers = {
Query: {
users: async () => {
return await prisma.user.findMany({ include: { posts: true } });
},
posts: async () => {
return await prisma.post.findMany({ include: { user: true } });
},
},
};
const server = new ApolloServer({ typeDefs, resolvers });
const app = express();
server.applyMiddleware({ app });
const PORT = process.env.PORT || 4000;
app.listen({ port: PORT }, () =>
console.log(`Server ready at http://localhost:${PORT}${server.graphqlPath}`)
);
6. 결론
이제 Prisma를 사용하여 데이터 모델을 정의하고 GraphQL 서버를 구축하는 방법에 대해 알아보았습니다. Prisma를 사용하면 타입 안정성을 가진 강력한 데이터베이스 도구를 활용하여 더욱 안정적이고 확장 가능한 애플리케이션을 개발할 수 있습니다.