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
'JavaScript&TypeScript' 카테고리의 다른 글
JavaScript - 구조 분해 할당 (0) | 2023.08.24 |
---|---|
JavaScript - Object.entries를 사용하여 객체를 배열로 변환 (0) | 2023.08.24 |
JavaScript의 this (0) | 2023.06.15 |
JavaScript 소수점 반올림, 올림, 내림, 버림 처리 (0) | 2023.05.30 |
JavaScript flat(), flatMap() (0) | 2023.05.26 |