[Prisma+PostgreSQL] Node.js/Express 환경에서 Prisma 설치 및 PostgreSQL 연동하기

Miseon (MIMI)·2024년 6월 10일
0

Prisma+PostgreSQL

목록 보기
2/2
post-thumbnail

🔖 개요

개발 중인 Back-end 환경이 Node.js와 Express로 구성되어 있다.
DB는 PostgreSQL을 사용하고, Prisma를 통해 접근해야 한다.

Node.js와 Express로 구성된 서버에서 Prisma를 통해 PostgreSQL DB에 접근해보자.

💡 https://www.prisma.io/docs/getting-started/setup-prisma/start-from-scratch/relational-databases/querying-the-database-node-postgresql

  • 위 Prisma 공식 문서를 참고하여 작성되었다.

🔖 Prisma

📍 Prisma 설치

Prisma 사용을 위해 다음 명령어를 통해 설치를 진행한다.

$ npm install --save prisma @prisma/client

기본적인 prisma config 파일을 생성하기 위해 다음 명령어를 실행한다.

$ npx prisma init

여기까지 수행했다면,
다음과 같이 /prisma/schema.prisma 파일이 생성됐을 것이다.

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

📍 접근할 DB 정보 설정

또한, .env 파일에 DATABASE_URL 환경변수가 생성됐을 것이다.

DATABASE_URL="postgresql://<USER>:<PASSWORD>@<HOST>:<PORT>/<DB_NAME>?schema=<SCHEMA_NAME>"

USER, PASSWORD, HOST, PORT, DB_NAME, SCHEMA_NAME
PostgreSQL 환경 세팅 시 진행했던 부분으로 채워주면 된다.

이를 통해 PostgreSQL DB를 prisma로 접근할 수 있다.

📍 Prisma 명령어

init 외에도 다양한 Prisma 명령어가 존재한다.

  • npx prisma db pull : 환경변수를 통해 접근 가능해진 DB의 구조를 model 데이터로 가져온다.
  • npx prisma db push : schema.prisma 파일에 정의된 model을 환경변수를 통해 접근 가능해진 DB에 업데이트한다.
  • npx prisma generate : model이 추가/삭제/수정되는 경우에 반드시 실행해야 하고, 해당 명령어를 통해 prisma client 및 type 동기화가 진행된다.

💡 model 데이터?
- 다음과 같이 Table 구조를 정의한 데이터를 말한다. schema.prisma 파일에 쓰여진다.

model todo {
  id     Int     @id @default(autoincrement())
  name   String  @db.VarChar(255)
  title  String? @db.VarChar(255)
  detail String? @db.VarChar(255)
}

🔖 PostgreSQL DB Query

Prisma를 사용하는 파일에서 다음과 같은 코드를 추가하여 Prisma Client 환경을 구성한다.

  • /api/list.ts
const { PrismaClient } = require("@prisma/client");
const prisma = new PrismaClient();

📍 Prisma를 통해 DB CRUD 수행하기

간단한 CRUD API 개발이 가능한 명령어를 정리해보고자 한다.

1. Create

const data = await prisma.<TABLE_NAME>.create({
  data: { /* ... */ }
});

2. Read
where 파라미터를 통해 컬럼을 선택적으로 가져올 수 있다. (SQL의 WHERE 절과 동일함)

const data = await prisma.<TABLE_NAME>.findMany({
  where: {
    id: 1 // id가 1인 컬럼만 가져올 것
  }
});

3. Update
where 조건에 해당하는 컬럼을 찾은 후,
data 형태로 컬럼의 update를 수행한다.

const data = await prisma.<TABLE_NAME>.update({
  where: {
    id: parseInt(id)
  },
  data: {
    name,
  },
});

4. Delete
where 조건에 해당하는 컬럼을 찾은 후,
컬럼 삭제를 진행한다.

const data = await prisma.<TABLE_NAME>.delete({
  where: {
    id: parseInt(id)
  }
});
profile
방황하는 개발자

0개의 댓글