특정 유저에 종속되어 있는 데이터가 있다면, 그 유저가 탈퇴하게 되었을 때 종속된 데이터는 어떻게 처리되어야 할까?
예를 들어 한 유저가 작성한 모든 게시글이 탈퇴와 함께 제거되어야 한다면, 우리는 쿼리를 돌려 일일이 하나씩 제거해야 하는 것일까?
이러한 상황에 도움을 주기 위해 다양한 ORM에서는 cascade 옵션을 제공하고 있다.
서로 연결된 User entity와 Post entity가 존재한다고 가정하여 예를 들어보자.
부모(User) - 자식(Post)
Post entity에 cascade 옵션을 부여했다면 연결된 User의 데이터가 삭제 되었을 때 하위 개념으로 존재하는 Post의 데이터 또한 제거된다는 이야기.
User 제거 -> Post 제거(cascade)
사실 조금 더 정확하게 이야기 하자면, 제거 뿐 아니라 생성, 수정 과정에서도 Entity를 종속시킬 수 있도록 하는 옵션이다.
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; // 포스트 작성자
}