Database/TypeORM

TypeORM의 Listener

wam 2024. 7. 29. 23:39

 

엔티티 리스너(Listener)


엔티티 리스너는 엔티티의 상태 변화와 관련된 이벤트를 감지하는 메서드를 포함한다. 이러한 메서드는 엔티티의 @Entity() 데코레이터로 정의된 클래스 내에서 구현할 수 있으며, 엔티티의 생명주기 이벤트가 발생할 때 자동으로 호출된다.

 

주요 이벤트

  • @BeforeInsert(): 엔티티가 데이터베이스에 삽입되기 전에 호출
  • @AfterInsert(): 엔티티가 데이터베이스에 삽입된 후 호출
  • @BeforeUpdate(): 엔티티가 업데이트되기 전에 호출
  • @AfterUpdate(): 엔티티가 업데이트된 후 호출
  • @BeforeRemove(): 엔티티가 삭제되기 전에 호출
  • @AfterRemove(): 엔티티가 삭제된 후 호출

 

 

리스너 메서드 정의

 

import { Entity, PrimaryGeneratedColumn, Column, BeforeInsert, AfterInsert, BeforeUpdate, AfterUpdate, BeforeRemove, AfterRemove } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  age: number;

  // 엔티티가 삽입되기 전에 호출되는 리스너 메서드
  @BeforeInsert()
  beforeInsert() {
    console.log('Before inserting User entity');
    // 추가적인 로직을 여기에 구현
  }

  // 엔티티가 삽입된 후 호출되는 리스너 메서드
  @AfterInsert()
  afterInsert() {
    console.log('After inserting User entity');
    // 추가적인 로직을 여기에 구현
  }

  // 엔티티가 업데이트되기 전에 호출되는 리스너 메서드
  @BeforeUpdate()
  beforeUpdate() {
    console.log('Before updating User entity');
    // 추가적인 로직을 여기에 구현
  }

  // 엔티티가 업데이트된 후 호출되는 리스너 메서드
  @AfterUpdate()
  afterUpdate() {
    console.log('After updating User entity');
    // 추가적인 로직을 여기에 구현
  }

  // 엔티티가 삭제되기 전에 호출되는 리스너 메서드
  @BeforeRemove()
  beforeRemove() {
    console.log('Before removing User entity');
    // 추가적인 로직을 여기에 구현
  }

  // 엔티티가 삭제된 후 호출되는 리스너 메서드
  @AfterRemove()
  afterRemove() {
    console.log('After removing User entity');
    // 추가적인 로직을 여기에 구현
  }
}

 

설명

  • @BeforeInsert(): 엔티티가 데이터베이스에 삽입되기 전에 호출
    예를 들어, 필드 값의 유효성 검사를 수행하거나 기본값을 설정할 수 있다.

  • @AfterInsert(): 엔티티가 데이터베이스에 삽입된 후 호출
    예를 들어, 삽입 후의 후처리 작업이나 로그 기록을 할 수 있다.

  • @BeforeUpdate(): 엔티티가 업데이트되기 전에 호출
    예를 들어, 업데이트 전의 상태를 기록하거나 특정 필드를 검증할 수 있다.

  • @AfterUpdate(): 엔티티가 업데이트된 후 호출
    예를 들어, 업데이트 후의 후처리 작업이나 상태 업데이트를 수행할 수 있다.

  • @BeforeRemove(): 엔티티가 삭제되기 전에 호출
    예를 들어, 삭제 전의 상태를 기록하거나 관련된 데이터 정리를 할 수 있다.

  • @AfterRemove(): 엔티티가 삭제된 후 호출
    예를 들어, 삭제 후의 후처리 작업이나 로그 기록을 수행할 수 있다.