🔍 Django에서 User.objects.model의 정체는?
Django에서 사용자 인증 시스템을 만들다 보면 자주 등장하는 코드가 있습니다:
User.objects.create_user(email, password)
이때 User.objects는 무엇이며, 그 내부에서 model은 어떤 역할을 할까요?
이 글에서는 UserManager와 User 사이의 연결 구조를 깊이 있게 이해해봅니다.
1️⃣ objects = UserManager()가 하는 일
먼저, 아래와 같은 User 모델을 정의했다고 가정해봅시다:
class User(AbstractBaseUser):
email = models.EmailField(unique=True)
...
objects = UserManager() # ✅ 여기!
이 코드 한 줄이 의미하는 것은 다음과 같습니다:
User.objects = UserManager()
즉, User.objects는 UserManager의 인스턴스가 되는 거예요.
2️⃣ Django가 자동으로 해주는 연결: model = User
Django는 위처럼 매니저(UserManager)를 모델(User)에 붙이면, 내부적으로 아래와 같은 처리를 자동으로 해줍니다:
manager = UserManager()
manager.model = User # ✅ 이걸 Django가 자동으로 설정해줌
User.objects = manager
그래서 우리가 self.model이라고 쓰면,
이건 자동으로 User 클래스를 의미하게 되는 것이죠.
3️⃣ User.objects.model은 결국 무엇인가?
정리하면:
- User.objects → UserManager() 객체
- User.objects.model → User 클래스
✔ 그래서 실제로 아래 코드는 모두 True입니다:
User.objects.__class__ == UserManager # 매니저 클래스
User.objects.model == User # 모델 클래스
4️⃣ 왜 self.model이 필요한가?
Django는 매니저(UserManager)가 어떤 모델에 붙을지 미리 알 수 없기 때문에,
직접 User라고 하드코딩하지 않고 self.model을 통해 연결합니다.
이 방식의 장점은 다음과 같습니다:
- ✅ 재사용성: UserManager를 다른 모델에 붙여도 작동함
- ✅ 유연성: 모델 이름이 바뀌어도 코드 변경 없이 사용 가능
- ✅ Django 스타일: BaseUserManager나 models.Manager를 확장할 때 필수 패턴
5️⃣ 흐름 요약
class User(AbstractBaseUser):
objects = UserManager()
- Django가 User.objects = UserManager() 처리
- 동시에 UserManager.model = User 자동 설정
- 그래서 User.objects.create_user(...) 호출 시
→ 내부에서 self.model(...)이 곧 User(...)가 됨
✅ 최종 요약
표현 의미 실제 객체
User | 사용자 모델 | class User(AbstractBaseUser) |
User.objects | 매니저 객체 | UserManager 인스턴스 |
User.objects.model | 연결된 모델 | User 클래스 |
💬 마치며
처음에는 User.objects.model이 왜 User를 가리키는지 헷갈릴 수 있지만,
Django의 내부 동작 방식인 "모델-매니저 연결" 개념을 이해하면 그 구조가 명확히 보입니다.
이제 여러분도 UserManager와 User의 관계를 완벽히 이해한 Django 유저 인증 시스템 마스터입니다 💪
'Django' 카테고리의 다른 글
Chapter 9-2 Django Post 목록 페이지 만들기 (0) | 2025.05.14 |
---|---|
Chapter 9-1 Django Post 기능 구현하기 (0) | 2025.05.14 |
Chapter 8-6 Mini Project: Django Login & Logout 기능 만들기 (0) | 2025.05.12 |
Chapter 8-5 Django 이메일 인증을 위한 SMTP 설정 가이드 (0) | 2025.05.12 |
Chapter 8-4 환경변수 관리와 python-dotenv 사용법 (0) | 2025.05.12 |