Prisma는 NodeJS와 Typescript의 ORM
입니다.
쉽게 말해 번역기
라는 뜻입니다.
Prisma는 JS
또는 TS
로 작성된 코드를 DB가 이해할 수 있도록 중간에서 번역하는 역할
을 수행합니다.
SQL과 같은 언어로 코드를 작성시, TypeScript의 강력한 컴파일 기능으로 보호
를 받을 수 없습니다.
Prisma를 사용하면 Typescript의 에러 컴파일링 능력을 그대로 살려줄 수 있습니다.
Prisma는 사용할 데이터의 모양을 미리 선언합니다. 이를 Schema
라 부릅니다.
//schema.prisma
datasource db {
provider = 'sqlite'
url = env('DATABASE_URL')
}
generator client {
provider = 'prisma-client-js'
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(field: [authorId])
authorId Int?
}
TypeScript를 접해본 개발자 선생님
이라면, 크게 어렵지 않을것입니다. 허나, 그렇지 않은 선생님이라면 천천히 따라가시면 됩니다.
VSC에서 사용하기 위해선 Extension에 들어가 Prisma
extention을 다운받습니다.
Prisma 설치
npm i prisma -D
prisma 실행하기
npx prisma init
3번 실행후 생성된 기본 파일들 환경설정
.env
파일의 DATABASE_URL
에 사용하고있는 DB_URL을 넣어줍시다.schema.prisma
파일에서 datasource의 provider
을 설정합니다.사용할 DB를 뜻합니다. PostgreSQL, MySQL, SQL Server, SQLite, MongoDB을 사용할 수 있습니다.
//schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
제일 좋은건 역시 공식문서입니다.
처음부터 읽기 귀찮다면 아래의 내용으로 감을 잡은 뒤에 공식문서를 살펴보도록 합시다.
model User {
id Int @id @default(autoincrement())
}
작성한 순서대로 의미를 해석해봅시다.
id
: 필드명(변수명)은 id입니다.Int
: 필드 타입(변수 타입) 정수입니다.@id
: 해당 필드를 id로 사용하겠습니다.@default
: 기본 값을 설정하겠습니다. 무엇으로?autoincrement()
: 자동으로 증가하는 값을 할당하겠습니다. 현재 상황에서 유저가 거주하는 지역
을 추가적으로 받는다고 가정해보겠습니다. 물론, 유저가 거주하는 지역은 보통 필수적인 정보가 아닙니다. 따라서, 정보를 기입하는 페이지에서 지역
은 유저의 선택(optional)
에 따라 기입할 수 있습니다.
model User {
id Int @id @default(autoincrement())
location Int?
}
타입 뒤에 ?
키워드를 붙여줄 경우, 해당 데이터는 필수적으로 입력해야하는 사항이 아님을 뜻합니다.
model User {
id Int @id @default(autoincrement())
location Int?
nickName String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
@unique
: 값을 unique한 값으로 변경합니다.now()
현재 날짜를 return합니다.@updatedAt
: 해당 model의 값이 업데이트 될 것을 명시해줍니다.Prisma가 이러한 Schema를 가지고 있을 때, client를 생성할 수 있습니다. 이를 이용해 DB와 상호작용 할 수 있습니다.
스키마에 대한 감을 잡으셨다면, 필요한 스키마는 공식문서를 참고하도록 합시다.
Prisma는 PlanetScale
과 찰떡콩떡 무지개떡입니다.
필자는 유년시절 무지개떡을 정말 좋아했습니다.
따라서 이후 PlanetScale에 다뤄보도록 하겠습니다.