장고 사용자 차단 모델 확장하기
지난번에는 Django에서 기본적인 사용자 차단 기능을 구현하는 방법을 소개했었다. 차단 모델을 설계하고, 차단/차단 해제 뷰를 구현하며 사용자가 원치 않는 사람과의 상호작용을 쉽게 차단할 수 있도록 만드는 과정이었는데, 이번에는 그 기능을 조금 더 발전시켜보려고 한다.
이번 작업은 차단 모델에 추가 필드를 정의하는 것이 핵심이다. 기본 차단 기능만으로도 충분할 수 있지만, 프로젝트의 요구 사항에 따라 더 세분화된 차단 관리가 필요할 수 있다. 그래서 다양한 추가 필드를 고려해봤다.
차단 사유 (reason)
먼저, 차단 사유를 기록하는 필드이다. 이 필드를 추가하면 차단할 때 사용자나 관리자가 차단 이유를 입력할 수 있다. 예를 들어 "스팸", "부적절한 메시지"와 같은 이유를 기록해두면, 나중에 차단된 이유를 명확하게 파악할 수 있어 좋을 것 같다. 관리자는 이 정보를 참고해 차단 여부를 다시 결정할 수도 있다.
reason = models.TextField(null=True, blank=True, help_text="Reason for blocking")
차단 만료 시간 (expires_at)
또 한 가지 유용할 수 있는 기능은 차단 만료 시간이다. 영구적인 차단이 아닌 일정 시간 동안만 차단 상태를 유지한 후 자동으로 해제되는 방식이 필요할 때 쓸 수 있다. 예를 들어, 7일간의 차단 후 자동으로 해제되는 설정을 할 수 있는데, 이는 짧은 기간 동안의 규제에 유용할 것 같다.
expires_at = models.DateTimeField(null=True, blank=True, help_text="Optional expiration time for the block")
차단 상태 (is_active)
세 번째는 차단 상태를 나타내는 필드이다. 이 필드를 통해 차단이 활성 상태인지, 혹은 비활성 상태인지를 기록할 수 있다. 프로젝트에서 차단을 임시로 비활성화하는 기능이 필요하다면 이 필드를 이용해 쉽게 관리할 수 있다.
is_active = models.BooleanField(default=True, help_text="Whether the block is currently active")
관리자 차단 여부 (is_admin_blocked)
차단이 사용자가 아니라 관리자에 의해 이루어진 것인지 구분할 수 있는 필드도 고려해봤다. 관리자가 직접 차단한 사용자와 사용자가 자발적으로 차단한 사용자를 구분하면, 추후 차단 해제나 관리에 도움을 줄 수 있다.
is_admin_blocked = models.BooleanField(default=False, help_text="Whether the block was issued by an admin")
차단 메타데이터 (metadata)
마지막으로는 메타데이터를 저장할 수 있는 필드이다. 차단된 사용자와 관련된 추가 정보를 기록할 수 있는데, 예를 들어 "특정 메시지로 인해 차단됨" 같은 로그를 남길 수 있다. 차단 기록을 더욱 세밀하게 관리하고 분석하는 데 도움이 될 수 있다.
metadata = models.JSONField(null=True, blank=True, help_text="Additional metadata related to the block")
이 모든 필드를 한데 모아 최종적인 차단 모델을 완성하면, 차단 기능이 훨씬 강력해지고 관리 측면에서도 유용한 정보를 더 많이 제공할 수 있다.
이번 작업을 통해 차단 모델을 더 유연하게 구성할 수 있었고, 앞으로 확장 가능성도 고려하면서 필드를 설계했다. 필요에 따라 추가 필드를 조정할 수 있도록 했기 때문에, 이 기능은 다양한 요구사항을 만족시킬 수 있을 것이다. 프로젝트의 필요에 맞춰 꼭 필요한 필드들만 사용하자는 점을 항상 염두에 두고 작업을 진행했다.
이제는 프로젝트의 상황에 맞게 차단 기능을 어떻게 확장해 나갈지 고민해보면 좋겠다.