6. 모델 인스턴스가 생성·갱신될 때 발생하는 시그널에는 어떤 것이 있나요?

장고의 시그널을 이용하면 모델 인스턴스의 생명주기에 따라 특정 코드가 실행되도록 예약해 둘 수 있습니다. 장고가 제공하는 시그널의 종류는 다음과 같습니다.

  • pre_init
  • post_init
  • pre_save
  • post_save
  • pre_delete
  • post_delete

이 가운데 pre_savepost_save 가 가장 많이 사용됩니다. 이 두 시그널을 좀 더 자세히 살펴봅시다.

6.1. 시그널과 save 메서드 재정의 비교

시그널을 이용하면 save 메서드를 재정의하는 것과 비슷한 효과를 누릴 수 있습니다. 그래서 어느 것을 사용해야 할지 헷갈릴 수도 있는데요, 다음 규칙에 따르시기 바랍니다.

  • 다른 사람(외부 라이브러리 등)이 여러분 앱의 save 메서드를 재정의·커스터마이즈하도록 허용하려면 직접 시그널을 발생시켜야 합니다.
  • 여러분이 통제할 수 없는 앱의 save 메서드가 호출될 때 원하는 코드가 실행되도록 하려면 post_save 시그널 또는 pre_save 시그널을 이용해야 합니다.
  • 여러분이 통제할 수 있는 앱의 저장 방식을 손 볼 때는 save 메서드를 재정의해야 합니다.

다음은 UserToken 모델의 예입니다. 이 모델은 사용자 인증 정보를 제공하는 역할을 하며, User 가 생성될 때 함께 생성됩니다.

class UserToken(models.Model):
    token = models.CharField(max_length=64)

    # ...