[Prisma] CreateInput과 UncheckedCreateInput의 차이점

임민교·2024년 7월 15일
post-thumbnail

Prisma에서는 모델을 생성할 때 사용되는 입력 유형으로 CreateInputUncheckedCreateInput이 있습니다. 이 두 입력 유형은 데이터베이스에 새로운 레코드를 생성할 때 사용되지만, 각각의 목적과 동작 방식이 다릅니다.

CreateInput

CreateInput은 관계 데이터 무결성을 보장하기 위해 사용됩니다. 즉, Prisma는 입력 데이터가 올바른지, 외래 키 제약 조건을 만족하는지 등을 검증합니다. 이를 통해 데이터베이스의 무결성을 유지합니다.

예제

// Assuming we have the following model in Prisma schema
model User {
  id    Int    @id @default(autoincrement())
  name  String
  posts Post[]
}

model Post {
  id     Int    @id @default(autoincrement())
  title  String
  userId Int
  user   User   @relation(fields: [userId], references: [id])
}

// CreateInput example
const userCreateInput: Prisma.UserCreateInput = {
  name: 'Alice',
  posts: {
    create: [
      {
        title: 'First Post',
      },
    ],
  },
};

await prisma.user.create({ data: userCreateInput });

위 예제에서 UserCreateInput은 사용자가 작성한 게시물(posts)까지 포함할 수 있으며, Prisma는 관계 데이터의 무결성을 검증합니다.

UncheckedCreateInput

UncheckedCreateInput은 Prisma의 데이터 무결성 검사를 우회하고, 개발자가 데이터 무결성에 대해 더 많은 제어를 할 수 있도록 합니다. 이는 주로 개발자가 성능 향상이나 특정 상황에서 데이터베이스 제약 조건을 피하기 위해 사용합니다. UncheckedCreateInput을 사용하면 외래 키 제약 조건이 검증되지 않기 때문에, 잘못된 데이터가 삽입될 위험이 있습니다.

예제

// UncheckedCreateInput example
const userUncheckedCreateInput: Prisma.UserUncheckedCreateInput = {
  id: 1, // Manually setting ID, which normally would be handled by Prisma
  name: 'Alice',
  posts: {
    create: [
      {
        id: 1, // Manually setting ID
        title: 'First Post',
        userId: 1, // Manually setting userId
      },
    ],
  },
};

await prisma.user.create({ data: userUncheckedCreateInput });

위 예제에서 UserUncheckedCreateInputiduserId를 명시적으로 설정하고 있으며, Prisma는 이 값들이 올바른지 여부를 검증하지 않습니다.

차이점 요약

  1. 무결성 검사:

    • CreateInput: Prisma는 입력 데이터의 무결성을 검증합니다. 외래 키 제약 조건을 포함한 데이터베이스의 관계 규칙을 준수하도록 보장합니다.
    • UncheckedCreateInput: Prisma는 입력 데이터의 무결성을 검증하지 않습니다. 외래 키 제약 조건을 포함한 데이터베이스의 관계 규칙을 무시할 수 있습니다.
  2. 사용 사례:

    • CreateInput: 일반적인 데이터 생성 작업에서 사용됩니다. 데이터 무결성을 유지하면서 새로운 레코드를 생성할 때 적합합니다.
    • UncheckedCreateInput: 성능 최적화가 필요하거나, 데이터 무결성 검사를 우회해야 하는 특정 상황에서 적합합니다.
  3. 위험성:

    • CreateInput: 데이터 무결성을 보장하므로, 잘못된 데이터가 삽입될 가능성이 적습니다.
    • UncheckedCreateInput: 데이터 무결성을 보장하지 않으므로, 잘못된 데이터가 삽입될 위험이 있습니다.

선택 기준

  • 데이터 무결성이 중요하고, 일반적인 CRUD(Create, Read, Update, Delete) 작업을 수행할 때는 CreateInput을 사용하는 것이 좋습니다.
  • 특정 성능 요구 사항이나 무결성 검사가 불필요한 경우에는 UncheckedCreateInput을 사용할 수 있지만, 이는 주의해서 사용해야 합니다.
profile
매일 1% 성장하는 개발자

0개의 댓글