Prisma
현대적인 데이터베이스 툴킷으로, 개발자들이 데이터베이스와 상호 작용할 때 효율성과 생산성을 높일 수 있도록 설계되었다. Prisma는 SQL과 같은 전통적인 데이터베이스 쿼리 언어 대신에 더 직관적이고 타입 안전한 방식으로 데이터베이스를 조작할 수 있게 해준다.
Prisma의 주요 기능
- Prisma Client:
타입 안전 쿼리: Prisma Client는 타입스크립트 기반으로 동작하여, 데이터베이스 쿼리 시 타입 안전성을 보장한다. 이는 컴파일 타임에 에러를 발견할 수 있게 해주어 버그를 줄이고 개발 속도를 높인다. - 자동 완성: Prisma Client는 데이터베이스 스키마를 기반으로 자동 완성 기능을 제공하여, 쿼리를 작성할 때 오타나 실수를 줄일 수 있다.
- Prisma Migrate: 마이그레이션 관리: Prisma Migrate는 데이터베이스 스키마 변경을 추적하고 관리할 수 있게 해준다. 이는 데이터베이스 구조의 변화를 코드로 표현하고, 이를 손쉽게 배포할 수 있게 해준다.
자동 생성: Prisma는 스키마 변경 사항을 감지하여 자동으로 마이그레이션 파일을 생성한다. - Prisma Studio: GUI 기반 데이터베이스 관리자: Prisma Studio는 데이터베이스를 시각적으로 탐색하고 관리할 수 있는 GUI 도구이다. 이는 테이블을 직접 편집하거나 데이터를 조회할 때 유용하다.
- Prisma Schema: 스키마 정의: Prisma는 데이터베이스 스키마를 코드로 정의할 수 있게 해준다. 이는 데이터베이스 모델을 한 곳에서 관리하고, 팀 내에서 일관성을 유지하는 데 도움을 준다.
Prisma의 장점
- 생산성 향상: 타입 안전성과 자동 완성 기능을 통해 쿼리 작성 속도를 높이고 오류를 줄일 수 있다.
- 타입스크립트와의 호환성: Prisma는 타입스크립트와 잘 통합되어, 타입 정의와 코드의 일관성을 유지할 수 있다.
- 자동화된 마이그레이션: 데이터베이스 스키마 변경을 추적하고 자동으로 적용할 수 있어, 데이터베이스 구조 관리가 쉬워진다.
- 사용자 친화적 인터페이스: Prisma Studio를 통해 데이터베이스를 직관적으로 관리할 수 있다.
Setup
npm i prisma
: 설치npx prisma init
: Prisma Schema 생성- 환경변수 설정
- .gitignore에 .env 추가
- Extension에서 Prisma 설치
Schemas
-
?
:선택인 부분 물음표 npx prisma migrate dev
:
Prisma의 마이그레이션 도구 중 하나로, 개발 환경에서 데이터베이스 스키마를 관리하고 업데이트하는 데 사용된다. 이 명령은 특히 개발 중에 데이터베이스 스키마를 변경하고 이를 적용할 때 유용하다.- 마이그레이션 생성:
스키마 파일(주로 schema.prisma)의 변경 사항을 감지하고, 이에 따라 새로운 마이그레이션 파일을 자동으로 생성한다. 이 마이그레이션 파일은 데이터베이스 구조의 변경을 SQL로 기록한다. - 마이그레이션 적용:
생성된 마이그레이션 파일을 데이터베이스에 적용하여, 실제 데이터베이스 스키마를 업데이트한다. 이는 개발자가 데이터베이스 스키마를 코드와 동기화할 수 있게 해준다. -
스키마 동기화:
현재 프로젝트의 Prisma 스키마 파일과 실제 데이터베이스 구조를 동기화하여, 일관성을 유지한다. 이는 데이터베이스와 코드 간의 불일치를 방지한다. - gitignore에
*.db
,*.db-journal
추가
Prisma Client
- Prisma는 Client파일을 기본적으로 node modules 폴더 안에 생성
- 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)한 다음 재시작
Relationships
- 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
: 부모 레코드가 참조되고 있는 동안은 삭제할 수 없음