Backend/DB
[DB][Prisma] Prisma에서 데이터 시딩하기
Rayi
2024. 8. 24. 21:47
Prisma를 이용해 데이터 시딩(DB에 초기 record 들을 삽입하는 것)을 할 때는
API를 만들때와 마찬가지로 PrismaClient 라이브러리를 사용합니다.
우선 시딩을 위해서는 두 가지 JS 코드가 필요하며,
코드파일은 schema.prisma 코드와 같은 경로(=터미널로 실행시킬 수 있는 경로)에 있어야 합니다.
- 시딩할 데이터를 기록한 mock 파일 (mock.js)
- 데이터 시딩을 실행할 시딩 파일 (seed.js)

seed.js의 코드는 다음과 같습니다.
PrismaClient.user.deleteMany( ) 를 사용해 기존에 있던 데이터들을 초기화하고,
PrismaClient.user.createMany( ) 를 사용해 mock.js에 기록된 새로운 데이터들을 추가합니다.
두 함수 모두 Promise를 반환하기 때문에, await 구문을 추가합니다.
import { PrismaClient } from '@prisma/client';
import { USERS } from './mock.js';
const prisma = new PrismaClient();
async function main() {
await prisma.user.deleteMany(); // delete existing data
await prisma.user.createMany({ // seed mock data
data: USERS,
skipDuplicates: true, // skip if there are the duplicates on the @unique field
});
}
main()
.then(async () => {
await prisma.$disconnect();
})
.catch(async (e) => {
console.error(e);
await prisma.$disconnect();
process.exit(1);
});
데이터 시딩을 터미널로 실행시키기 위해 package.json에 명령어를 추가합니다.
{
"dependencies": {
"@prisma/client": "^5.4.2",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"is-email": "^1.0.2",
"is-uuid": "^1.0.2",
"prisma": "^5.4.2",
"superstruct": "^1.0.3"
},
"devDependencies": {
"nodemon": "^3.0.1"
},
"type": "module",
"scripts": {
"dev": "nodemon app.js",
"start": "node app.js"
},
// $ prisma seed 명령어로 seed.js를 실행할 수 있게 합니다.
"prisma": {
"seed": "node prisma/seed.js"
}
// * * * * * *
}
이후 터미널에 아래 명령어를 실행시키면 데이터 시딩이 정상적으로 수행되는 것을 확인할 수 있습니다.
npx prisma db seed


728x90