Prisma

pengooseDev·2022년 11월 27일
0
post-thumbnail

What is Prisma?

Prisma는 NodeJS와 Typescript의 ORM입니다.

ORM?(Object Relational Mapping)

쉽게 말해 번역기라는 뜻입니다.
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를 접해본 개발자 선생님이라면, 크게 어렵지 않을것입니다. 허나, 그렇지 않은 선생님이라면 천천히 따라가시면 됩니다.


환경설정

  1. VSC에서 사용하기 위해선 Extension에 들어가 Prisma extention을 다운받습니다.

  2. Prisma 설치

    npm i prisma -D

  3. prisma 실행하기

    npx prisma init

  4. 3번 실행후 생성된 기본 파일들 환경설정

  • .env 파일의 DATABASE_URL에 사용하고있는 DB_URL을 넣어줍시다.
  • schema.prisma 파일에서 datasource의 provider을 설정합니다.

provider?

사용할 DB를 뜻합니다. PostgreSQL, MySQL, SQL Server, SQLite, MongoDB을 사용할 수 있습니다.

//schema.prisma

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

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

schema.prisma

제일 좋은건 역시 공식문서입니다.

처음부터 읽기 귀찮다면 아래의 내용으로 감을 잡은 뒤에 공식문서를 살펴보도록 합시다.

model User {
  id Int @id @default(autoincrement())
}

작성한 순서대로 의미를 해석해봅시다.

  • id : 필드명(변수명)은 id입니다.
  • Int : 필드 타입(변수 타입) 정수입니다.
  • @id : 해당 필드를 id로 사용하겠습니다.
    (unique한 value, 즉, 중복된 값을 사용할 수 없게 됨.)
  • @default : 기본 값을 설정하겠습니다. 무엇으로?
  • autoincrement() : 자동으로 증가하는 값을 할당하겠습니다.

Optional(schema)

현재 상황에서 유저가 거주하는 지역을 추가적으로 받는다고 가정해보겠습니다. 물론, 유저가 거주하는 지역은 보통 필수적인 정보가 아닙니다. 따라서, 정보를 기입하는 페이지에서 지역은 유저의 선택(optional)에 따라 기입할 수 있습니다.

model User {
 id        Int  @id @default(autoincrement())
 location  Int?
}

타입 뒤에 ? 키워드를 붙여줄 경우, 해당 데이터는 필수적으로 입력해야하는 사항이 아님을 뜻합니다.


그외의 것들(schema)

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와 상호작용 할 수 있습니다.

스키마에 대한 감을 잡으셨다면, 필요한 스키마는 공식문서를 참고하도록 합시다.


찰떡콩떡 PlanetScale

Prisma는 PlanetScale과 찰떡콩떡 무지개떡입니다.
필자는 유년시절 무지개떡을 정말 좋아했습니다.

따라서 이후 PlanetScale에 다뤄보도록 하겠습니다.

0개의 댓글