clone coding,

Prisma

Dahna Dahna Follow Jun 26, 2024 · 3 mins read
Prisma
Share this

Prisma

현대적인 데이터베이스 툴킷으로, 개발자들이 데이터베이스와 상호 작용할 때 효율성과 생산성을 높일 수 있도록 설계되었다. Prisma는 SQL과 같은 전통적인 데이터베이스 쿼리 언어 대신에 더 직관적이고 타입 안전한 방식으로 데이터베이스를 조작할 수 있게 해준다.

Prisma의 주요 기능

  1. Prisma Client:
    타입 안전 쿼리: Prisma Client는 타입스크립트 기반으로 동작하여, 데이터베이스 쿼리 시 타입 안전성을 보장한다. 이는 컴파일 타임에 에러를 발견할 수 있게 해주어 버그를 줄이고 개발 속도를 높인다.
  2. 자동 완성: Prisma Client는 데이터베이스 스키마를 기반으로 자동 완성 기능을 제공하여, 쿼리를 작성할 때 오타나 실수를 줄일 수 있다.
  3. Prisma Migrate: 마이그레이션 관리: Prisma Migrate는 데이터베이스 스키마 변경을 추적하고 관리할 수 있게 해준다. 이는 데이터베이스 구조의 변화를 코드로 표현하고, 이를 손쉽게 배포할 수 있게 해준다.
    자동 생성: Prisma는 스키마 변경 사항을 감지하여 자동으로 마이그레이션 파일을 생성한다.
  4. Prisma Studio: GUI 기반 데이터베이스 관리자: Prisma Studio는 데이터베이스를 시각적으로 탐색하고 관리할 수 있는 GUI 도구이다. 이는 테이블을 직접 편집하거나 데이터를 조회할 때 유용하다.
  5. Prisma Schema: 스키마 정의: Prisma는 데이터베이스 스키마를 코드로 정의할 수 있게 해준다. 이는 데이터베이스 모델을 한 곳에서 관리하고, 팀 내에서 일관성을 유지하는 데 도움을 준다.

Prisma의 장점

  • 생산성 향상: 타입 안전성과 자동 완성 기능을 통해 쿼리 작성 속도를 높이고 오류를 줄일 수 있다.
  • 타입스크립트와의 호환성: Prisma는 타입스크립트와 잘 통합되어, 타입 정의와 코드의 일관성을 유지할 수 있다.
  • 자동화된 마이그레이션: 데이터베이스 스키마 변경을 추적하고 자동으로 적용할 수 있어, 데이터베이스 구조 관리가 쉬워진다.
  • 사용자 친화적 인터페이스: Prisma Studio를 통해 데이터베이스를 직관적으로 관리할 수 있다.


Setup

  1. npm i prisma : 설치
  2. npx prisma init : Prisma Schema 생성
  3. 환경변수 설정
    1
  4. .gitignore에 .env 추가
  5. Extension에서 Prisma 설치


Schemas

2

  • ? :선택인 부분 물음표

  • npx prisma migrate dev :
    Prisma의 마이그레이션 도구 중 하나로, 개발 환경에서 데이터베이스 스키마를 관리하고 업데이트하는 데 사용된다. 이 명령은 특히 개발 중에 데이터베이스 스키마를 변경하고 이를 적용할 때 유용하다.
  • 마이그레이션 생성:
    스키마 파일(주로 schema.prisma)의 변경 사항을 감지하고, 이에 따라 새로운 마이그레이션 파일을 자동으로 생성한다. 이 마이그레이션 파일은 데이터베이스 구조의 변경을 SQL로 기록한다.
  • 마이그레이션 적용:
    생성된 마이그레이션 파일을 데이터베이스에 적용하여, 실제 데이터베이스 스키마를 업데이트한다. 이는 개발자가 데이터베이스 스키마를 코드와 동기화할 수 있게 해준다.
  • 스키마 동기화:
    현재 프로젝트의 Prisma 스키마 파일과 실제 데이터베이스 구조를 동기화하여, 일관성을 유지한다. 이는 데이터베이스와 코드 간의 불일치를 방지한다.

  • gitignore에 *.db, *.db-journal 추가

3


Prisma Client

  • Prisma는 Client파일을 기본적으로 node modules 폴더 안에 생성
  1. lib폴더 안에 db.ts파일 생성
import { PrismaClient } from "@prisma/client";  
  
const db = new PrismaClient();  
  
export default db;  


Prisma Studio

  • Prisma Studio는 데이터베이스를 시각적으로 탐색하고 관리할 수 있는 GUI 도구이다.
    테이블을 직접 편집하거나 데이터를 조회 가능
  • npx prisma studio : localhost 5555 열림
    ✅ NextJS 서버를 끄지 않도록 주의
    ✅ schema.prisma파일을 변경하고 싶으면 Studio끄고 수정 후 migrate(npx prisma migrate dev)한 다음 재시작

4


Relationships

5

  • SMSToken에 user 데이터가 생기는 것이 아님. userId에서 참조하기 위해 작성


onDelete

  • onDelete: Cascade : 필수값 relationship으로 연결된 데이터를 지울 때 부모 레코드가 삭제되면 자식 레코드들도 지워짐
  • onDelete: SetNull : ex)부모 레코드인 user가 삭제 됐을 때 가능하다면 null로 설정. 옵션으로 물음표 붙여줘야 함
user       User?     @relation(fields: [userId], references: [id], onDelete: SetNull)  
userId     Int?  
  
  • onDelete: Restrict : 부모 레코드가 참조되고 있는 동안은 삭제할 수 없음
Dahna
Written by Dahna Follow
Hi, I am Dahna, the author of this blog!