TypeORM Cascade

otter·2023년 10월 15일

특정 유저에 종속되어 있는 데이터가 있다면, 그 유저가 탈퇴하게 되었을 때 종속된 데이터는 어떻게 처리되어야 할까?
예를 들어 한 유저가 작성한 모든 게시글이 탈퇴와 함께 제거되어야 한다면, 우리는 쿼리를 돌려 일일이 하나씩 제거해야 하는 것일까?

이러한 상황에 도움을 주기 위해 다양한 ORM에서는 cascade 옵션을 제공하고 있다.

cascade

  • 사전적 정의: 종속
  • ORM의 cascade: 부모 객체(또는 Entity)와 관련된 자식 객체(또는 Entity)에 대한 데이터베이스 작업을 일괄적으로 처리하는 옵션 또는 기능.

서로 연결된 User entity와 Post entity가 존재한다고 가정하여 예를 들어보자.
부모(User) - 자식(Post)

Post entity에 cascade 옵션을 부여했다면 연결된 User의 데이터가 삭제 되었을 때 하위 개념으로 존재하는 Post의 데이터 또한 제거된다는 이야기.
User 제거 -> Post 제거(cascade)

사실 조금 더 정확하게 이야기 하자면, 제거 뿐 아니라 생성, 수정 과정에서도 Entity를 종속시킬 수 있도록 하는 옵션이다.

TypeORM의 Cascade

TypeORM 또한 cascade 옵션을 제공하는 ORM 중 하나다.

용법은 아래 예시 코드와 같이 종속 시키고자 하는 Entity에 cascade 옵션을 부여하면 된다.
아래의 경우 연결된 User 데이터가 delete 될 경우 Post 데이터 또한 함께 삭제되도록 해주는 옵션

@Entity()
@ObjectType()
export class Post {
  @PrimaryGeneratedColumn('uuid')
  @Field(() => String)
  postId: string;

  @Column()
  @Field(() => String)
  title: string;

  @Column({ type: 'text' })
  @Field(() => String)
  content: string;
  
  @ManyToOne(() => User, { onDelete: 'CASCADE' })
  @Field(() => User)
  user: User; //  포스트 작성자
}

0개의 댓글