본문 바로가기

back-end/NestJs

Prisma db 관련 설명과 그 용도

반응형

주요 명령어

1. prisma db seed

용도:

  • 데이터베이스에 초기 데이터(Seed)를 삽입하는 명령어.
  • prisma/seed.ts 또는 prisma/seed.js 파일에 정의된 스크립트를 실행하여 데이터베이스에 데이터를 삽입합니다.

사용 시점:

  • 개발 환경에서 기본 데이터를 설정할 때.
  • 테스트 환경에서 데이터베이스를 초기화할 때.
  • 프로덕션 환경에 필수적인 초기 데이터를 삽입할 때.

실행 결과:

  • seed.ts에 정의된 스크립트가 실행되며, 데이터베이스에 초기 데이터가 삽입됩니다.

명령어 실행:

npx prisma db seed

2. prisma db seed 관련 설정

package.json 설정

  • Prisma는 prisma 디렉토리의 seed.ts 또는 seed.js 파일을 실행합니다.
  • package.json에 스크립트를 설정해야 합니다.
"prisma": {
  "seed": "ts-node --transpile-only prisma/seed.ts"
}
  • 설명:
    • "ts-node"는 TypeScript로 작성된 seed.ts 파일을 실행하기 위해 사용.
    • --transpile-only 옵션은 컴파일 속도를 향상.

Seed 파일 (prisma/seed.ts)

  • Seed 데이터를 정의하는 스크립트.
  • 예제:
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();

async function main() {
  // 유저 데이터 삽입
  await prisma.user.createMany({
    data: [
      { userId: 'john123', username: 'John', nickName: 'Johnny', password: 'pass123' },
      { userId: 'jane123', username: 'Jane', nickName: 'Janey', password: 'pass456' },
    ],
  });

  // SNS 데이터 삽입
  await prisma.sns.createMany({
    data: [
      { userId: 1, platform: 'Twitter', accountName: '@johnny123', url: 'https://twitter.com/johnny123' },
      { userId: 2, platform: 'Facebook', accountName: 'jane.official', url: 'https://facebook.com/jane.official' },
    ],
  });
}

main()
  .then(async () => {
    await prisma.$disconnect();
  })
  .catch(async (e) => {
    console.error(e);
    await prisma.$disconnect();
    process.exit(1);
  });

3. prisma db push

용도:

  • Prisma 모델 정의(schema.prisma)를 데이터베이스에 동기화.
  • 데이터베이스 스키마를 업데이트하지만, 마이그레이션 기록은 생성하지 않습니다.

사용 시점:

  • 빠른 개발 환경에서 모델을 데이터베이스에 반영할 때.
  • 마이그레이션 기록이 필요 없는 간단한 데이터베이스 동기화 작업에 사용.

실행 결과:

  • schema.prisma의 모델이 데이터베이스에 바로 반영.
  • 테이블이 생성되거나 수정됩니다.

명령어 실행:

npx prisma db push

주의사항:

  • 마이그레이션 기록(prisma/migrations)이 남지 않으므로, 팀 프로젝트나 프로덕션 환경에는 적합하지 않음.

db seed와 db push의 차이점

Feature prisma db seed prisma db push

주요 목적 데이터 삽입 데이터베이스 스키마 동기화
입력 seed.ts 스크립트에서 데이터를 삽입 schema.prisma 파일을 데이터베이스에 반영
실행 결과 데이터베이스에 초기 데이터 추가 테이블 생성, 수정 등 데이터베이스 구조 변경
마이그레이션 기록 없음 없음
사용 시점 초기 데이터 설정, 개발/테스트 환경 데이터 초기화 빠른 개발 중 데이터베이스 스키마 변경

전체 워크플로우 예시

  1. 프로젝트 초기화:
  2. npx prisma init
  3. 모델 정의 및 스키마 적용:
  4. npx prisma db push
  5. Seed 파일 작성:
    • prisma/seed.ts에 초기 데이터 작성.
  6. Seed 실행:
  7. npx prisma db seed

결론

npx prisma db seed

  • 데이터베이스에 초기 데이터를 삽입.
  • prisma/seed.ts를 사용.

npx prisma db push

  • 데이터베이스 스키마를 동기화.
  • 마이그레이션 기록 없이 반영.

개발 환경에서는 db push와 db seed를 조합하여 빠르게 데이터베이스를 구성할 수 있다.