IT/작업기록

[Django] 등록 안 된 admin 클래스, 지워도 되는 죽은 코드였다

aram 2026. 7. 27. 13:44

Q. 삭제한 BaseSafeAdmin, 이게 어떤 역할이었지?

코드 정리 작업을 하다가 지운 클래스였는데, 나중에 다시 보니 "이게 뭐 하던 코드였지" 싶었다.

class BaseSafeAdmin(admin.ModelAdmin):
    readonly_fields = ("is_deleted", "deleted_at")

의도됐던 역할

Django admin 화면에서 특정 모델을 등록할 때, is_deleted/deleted_at 필드를 관리자가 admin 화면에서 실수로 직접 수정하지 못하게(읽기 전용으로) 막아주려던 공통 베이스 클래스였던 것으로 보인다. Soft delete 필드를 admin에서 직접 건드리면 트리거·soft-delete 로직을 우회하게 되니, 그걸 방지하려던 안전장치 성격이었을 것.

그런데 실제로는 아무 역할도 안 하고 있었다

관련 앱들의 admin.py를 확인해보니, @admin.register(모델, BaseSafeAdmin) 같은 식으로 실제 모델에 연결하는 코드가 어디에도 없었다. 클래스만 정의해놓고 아무도 상속하거나 등록하지 않은 채로 방치된 상태였던 것.

그 결과:

  • 이 클래스가 보호하려던 모델들은 애초에 Django admin(/admin/)에 전혀 노출되지 않고 있었다 (등록 자체가 안 됐으니까)
  • 그래서 이 클래스를 지워도 admin 화면 동작에는 아무 변화가 없다 — 지우기 전이나 후나 /admin/에서 해당 모델을 볼 수 없는 건 동일하다

정리

즉 "쓰이고 있던 기능을 없앤 것"이 아니라, "언젠가 쓰려고 만들어놓고 실제로는 연결을 안 한 죽은 스캐폴딩"을 치운 것이었다. 이런 코드는 grep으로 클래스명이나 함수명을 검색해서 실제로 참조/등록하는 곳이 있는지 확인하지 않으면, "지워도 되는 코드"인지 "지금 동작 중인 코드"인지 구분하기 어렵다.

나중에 다시 admin에서 관리하고 싶어지면, 다른 모델에 이미 쓰고 있는 @admin.register(모델) 패턴처럼 새로 등록하면서 필요하면 이런 read-only 처리도 그때 다시 추가하면 된다. 삭제 자체는 되돌리기 쉬운 결정이었다.