아카이브

[DB][Prisma] Prisma에서 데이터 시딩하기 본문

Backend/DB

[DB][Prisma] Prisma에서 데이터 시딩하기

Rayi 2024. 8. 24. 21:47

Prisma를 이용해 데이터 시딩(DB에 초기 record 들을 삽입하는 것)을 할 때는

API를 만들때와 마찬가지로 PrismaClient 라이브러리를 사용합니다.

 

우선 시딩을 위해서는 두 가지 JS 코드가 필요하며,

코드파일은 schema.prisma 코드와 같은 경로(=터미널로 실행시킬 수 있는 경로)에 있어야 합니다.

 

- 시딩할 데이터를 기록한 mock 파일 (mock.js)

- 데이터 시딩을 실행할 시딩 파일 (seed.js)

 

mock.js와 seed.js는 schema.prisma와 같은 경로에 있습니다

 

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
Comments