Django에서 커스텀 유저 모델 만들기 (AbstractBaseUser 활용)
Django 프로젝트를 처음 설정할 때, 기본 User 모델을 그대로 사용하는 대신 이메일 기반 로그인, 닉네임 필드 추가, 유저 권한 직접 정의 등을 위해 AbstractBaseUser를 활용한 커스텀 유저 모델을 만드는 경우가 많습니다.
이번 포스트에서는 첫 마이그레이션 전에 커스텀 유저 모델을 설정하는 전체 흐름을 단계별로 정리합니다.
✅ 1. 앱 생성: member
python manage.py startapp member
- 유저 모델을 따로 관리할 앱으로 member를 생성합니다.
- 이후 settings.py에 INSTALLED_APPS 등록 필요.
✅ 2. 모델 정의: member/models.py
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
from django.db import models
class UserManager(BaseUserManager):
def create_user(self, email, password):
if not email:
raise ValueError('올바른 이메일을 입력하세요.')
user = self.model(email=self.normalize_email(email))
user.set_password(password)
user.is_active = False
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(email, password)
user.is_admin = True
user.is_active = True
user.save(using=self._db)
return user
class User(AbstractBaseUser):
email = models.EmailField(verbose_name='email', unique=True)
nickname = models.CharField('nickname', max_length=20, unique=True)
is_active = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = []
class Meta:
verbose_name = '유저'
verbose_name_plural = f'{verbose_name} 목록'
def get_full_name(self):
return self.nickname
def get_short_name(self):
return self.nickname
def __str__(self):
return self.nickname
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.is_admin
@property
def is_superuser(self):
return self.is_admin
🔍 핵심 설명
- AbstractBaseUser : Django 기본 인증 로직만 제공 (username 없음)
- UserManager : 일반 유저/슈퍼유저 생성 함수 정의 필수
- is_staff, is_superuser : 관리자 페이지 접근 권한에 사용됨
- USERNAME_FIELD = 'email' : 이메일로 로그인 설정
✅ 3. settings.py 설정 변경
# settings.py
AUTH_USER_MODEL = 'member.User'
- 반드시 마이그레이션 전에 설정해야 오류 없이 적용됩니다.
✅ 4. 마이그레이션 수행
python manage.py makemigrations member
python manage.py migrate
- 최초 User 모델을 기반으로 DB 테이블이 생성됩니다.
✅ 5. 관리자 패널 접속 테스트
- 슈퍼유저 생성
python manage.py createsuperuser
# 이메일, 비밀번호 입력
- 서버 실행 후 로그인
python manage.py runserver
- http://127.0.0.1:8000/admin 에 접속하여 정상 작동 확인
✅ 6. 개발 편의 도구 설치 (선택사항)
poetry add django-extensions
- shell_plus, runscript 등의 유용한 도구 활용 가능
- settings.py에 django_extensions 등록 필요
⚠️ 주의사항
- 커스텀 유저 모델은 첫 마이그레이션 이전에 반드시 설정해야 함.
- 이후 변경은 매우 어렵고 데이터 마이그레이션까지 필요할 수 있음.
💡 정리
항목 설명
커스텀 유저 | AbstractBaseUser 상속 후 email 기반 로그인 구성 |
UserManager | 유저 생성 함수 정의 필수 (create_user, create_superuser) |
AUTH_USER_MODEL | settings.py에 반드시 지정해야 함 |
관리자 권한 | is_admin → is_staff, is_superuser 속성 연결 |
Django 프로젝트를 보다 유연하게 구성하려면, 커스텀 유저 모델 설계는 초기에 정확히 설정해두는 것이 매우 중요합니다.
추후 소셜 로그인, 권한 관리 확장, 유저 프로필 커스터마이징에 유리하므로 실무에서도 자주 사용되는 패턴입니다.
'Django' 카테고리의 다른 글
Chapter 8-4 환경변수 관리와 python-dotenv 사용법 (0) | 2025.05.12 |
---|---|
Chapter 8-3 Django 회원가입 페이지 만들기 (정적 파일 + 폼 커스텀 + 뷰 구현) (0) | 2025.05.12 |
Chapter 8-1 [인스타그램] 회원가입 및 로그인 기능 만들기 (0) | 2025.05.12 |
🚀 Django REST Framework (DRF) 개요 & API 개발 정보 ( 라이브세션 1일차 강의자료 ) (0) | 2025.05.12 |
Chapter 7-5 Django 블로그 이미지 포토 및 얻어서 생성하는 썸네일 구현 (0) | 2025.05.11 |