JavaScript&TypeScript

NodeJS - Prisma

hjkang

Prisma 프로젝트 설정

 

폴더 만들고 npm 초기화

mkdir prisma
cd prisma
npm init -y

 

prisma, ts-node, @types/node 설치

npm install prisma @prisma/client typescript ts-node @types/node --save-dev

 

prisma 초기화

npx prisma init

 

초기화하면 prisma 폴더와 .env 파일 생성 됨

 

.env에 환경변수 설정

  • DATABASE_URL="디비종류://유저이름:패스워드@localhost:포트번호/디비이름"
DB_PORT=5432
DB_USER=test
DB_PASSWORD=test
DB_HOST=localhost
DATABASE=postgres
DB_SCHEMA=public

DATABASE_URL="postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DATABASE}?schema=${DB_SCHEMA}"

 

tsconfig.json 파일 추가

{
  "compilerOptions": {
    "sourceMap": true,
    "outDir": "dist",
    "strict": true,
    "lib": ["esnext"],
    "esModuleInterop": true
  }
}

 

prisma/schema.prisma 수정

  • User 모델 추가
generator client {
  provider = "prisma-client-js"
}

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

model User {
  seq   Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}

 

정의한 모델 DB에 적용

  • --name 플래그는 마이그레이션 히스토리 이름
  • 명령 실행 시 prisma/migrations 하위에 마이그레이션 히스토리 파일 생성됨
npx prisma migrate dev --name test_table_init

 

migration.sql 을 열어보면 마이그레이션을 위해 사용된 SQL문 확인 가능

-- DropTable
DROP TABLE "test";

-- CreateTable
CREATE TABLE "User" (
    "seq" SERIAL NOT NULL,
    "email" TEXT NOT NULL,
    "name" TEXT,

    CONSTRAINT "User_pkey" PRIMARY KEY ("seq")
);

-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");

 

DB에서 생성된 User 테이블 확인

  • __prisma_migrations: 마이그레이션 히스토리가 저장되는 테이블

 

addUser.ts 파일 생성

import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

async function add() {
  const user = await prisma.user.create({
    data: {
      name: 'Hjkang',
      email: 'hjkang@test.com',
    },
  })
  console.log(user)
}

add()
  .then(() => {
    console.log('사용자 추가')
  })
  .catch((err) => {
    console.error(err)
    process.exit(1)
  })

 

코드 실행

./node_modules/.bin/ts-node addUser.ts

 

 


참고

- https://blog.outsider.ne.kr/1614