
NestJS에서 데이터베이스와 상호작용하기 위한 ORM 도구로서 Prisma 를 사용해보자.
docker --version
docker-compose.yaml
services:
postgres:
image: postgres:15
restart: always
volumes:
- ./postgres-data:/var/lib/postgresql/data
ports:
- '5432:5432'
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
docker-compose up
[TIP] VSCode Extension - PostgreSQL
- 생성된 DB와 테이블 확인 가능
npm install prisma --save-dev
npx prisma
schema.prisma 라는 파일이 자동으로 생성된다.npx prisma init
prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
.env 파일도 생성되는데, 그 파일 안에 DATABASE_URL가 정의되어 있다.DATABASE_URL="postgresql://[USERNAME]:[PASSWORD]@localhost:5432/[DATABASE]"
npm install @prisma/client
src/prisma/prisma.module.ts
import { Global, Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';
@Global()
@Module({
providers: [PrismaService],
exports: [PrismaService],
})
export class PrismaModule {}
src/prisma/prisma.service.ts
import { Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
async onModuleInit() {
await this.$connect();
}
}
user.service.ts
import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma/prisma.service';
@Injectable()
export class UserService {
constructor(private readonly prismaService: PrismaService) {}
async findAll() {
return this.prismaService.user.findMany(); // DB의 USER 테이블에 접근
}
}
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
}
[TIP] VSCode Extensions - Prisma
- prisma 문법 하이라이팅 및 포맷팅 제공
- 파일 저장 시 자동 포맷팅 기능 사용하기 위해서는 VSCode
setting.json에 아래 코드 추가"editor.formatOnSave": true, "[prisma]": { "editor.defaultFormatter": "Prisma.prisma" }
npx prisma db push
npx prisma studio
http://localhost:5555/ 접속
